SSpotify Partner API

Если статус заказа pairing, нужно открыть pair_url.

pair_url может прийти:

1. Сразу в ответе POST /orders, если ссылка успела создаться за первые секунды.
2. Позже в ответе GET /orders/{order_id}.
3. Позже через webhook со статусом pairing.

Если к партнеру привязана Telegram-конфа, бот также отправит уведомление туда.

Создание Pairing-заказа и ожидание ссылки на Python:

import time

import requests


BASE_URL = "https://api.averonpay.app"
TOKEN = "pk_partner_key"
headers = {"Authorization": f"Bearer {TOKEN}"}

created = requests.post(
    f"{BASE_URL}/orders",
    headers=headers,
    json={
        "product_id": "spotify_premium_pairing",
        "item_id": "spotify_premium_pairing_1",
        "ref": "pairing-order-1002",
        "fields": {
            "spotify_premium_pairing_email": "user@example.com",
        },
    },
    timeout=30,
)
created.raise_for_status()
order = created.json()
order_id = order["order_id"]

for _ in range(12):
    if order.get("pair_url"):
        print("Откройте ссылку:", order["pair_url"])
        break

    if order["status"] in {"done", "failed", "cancelled"}:
        print("Заказ завершился:", order)
        break

    time.sleep(5)
    response = requests.get(
        f"{BASE_URL}/orders/{order_id}",
        headers=headers,
        timeout=20,
    )
    response.raise_for_status()
    order = response.json()
else:
    print("Ссылка еще не готова — продолжайте polling или ждите webhook")

Обновление истекшей ссылки на Python:

order = requests.get(
    f"{BASE_URL}/orders/{order_id}",
    headers=headers,
    timeout=20,
).json()

if "pair_link_expired" in (order.get("error") or ""):
    repaired = requests.post(
        f"{BASE_URL}/orders/{order_id}/actions/repair",
        headers=headers,
        timeout=20,
    )
    repaired.raise_for_status()
    print(repaired.json())

Срок действия и автоматическая отмена

Pairing-ссылка обычно действует около 5 минут. Определяйте истечение по текущему состоянию заказа — status = waiting и error, содержащий pair_link_expired.

Для получения новой ссылки вызовите POST /orders/{order_id}/actions/repair. Успешный repair создает новую ссылку с новым сроком действия. Сам вызов GET /orders/{order_id} ссылку не продлевает.

Если предыдущий repair еще обрабатывается или действие недоступно для текущего состояния заказа, API возвращает HTTP 409 с error = order_action_conflict. Обновите заказ через GET /orders/{order_id} и повторяйте repair только после появления pair_link_expired.

Если pairing долго не завершен и ссылка не обновляется, заказ может быть автоматически отменен примерно через час с возвратом баланса. В таком случае заказ получает status = cancelled, error = pair_link_timeout и refunded = true. Это время ориентировочное: repair может продлить жизненный цикл заказа, поэтому клиентской интеграции не следует самостоятельно считать заказ отмененным по локальному таймеру — дождитесь cancelled/failed через GET или webhook.