Заказы по ключу

Один ключ, четыре метода: залить архив, спросить статус, забрать отчёт, отменить. Демо ниже не ходит в боевой API — показывает тот же JSON, который вернёт сервер.

Куда слать запросы?

Базовый адрес

Все методы живут под одним префиксом. Тело у создания заказа — файл, у остальных методов тела нет.

base
BASE_URL = "https://tvyze.com/api/customer/v1"

Заказ через API стартует сам: примерно через минуту, а если в архиве больше 500 аккаунтов — через 10 минут. Пока старт не наступил, статус paused.

Как авторизоваться?

Заголовок Api-Key

Ключ передаётся в заголовке, не в query и не как Bearer. Лимит — 60 запросов в минуту на ключ. Чужой order_id вернёт 403.

заголовок
Api-Key: <ваш ключ>
Как создать заказ?

Залить архив

POST/orders/create

multipart/form-data, поле файла называется file. Подходят .zip и .rar, до 200 МБ. В ответе total_accounts — сколько аккаунтов реально приняли из архива.

ответ
{
  "order_id": 12345,
  "total_accounts": 100,
  "message": "Order created successfully"
}
демо · создание
Как узнать, сколько уже оплачено?

Статус заказа

GET/orders/{order_id}

done_accounts — успешно закрытые аккаунты. report_url появляется, когда отчёт готов (заказ completed, cancelled или completed_hide). Ссылка живёт около часа, потом запросите статус ещё раз.

в работе
{
  "order_id": 12345,
  "status": "in_work",
  "total_accounts": 100,
  "done_accounts": 37,
  "report_url": null
}
демо · опрос статуса
Как остановить заказ?

Отмена

DELETE/orders/{order_id}

Незабранные аккаунты снимаются, заморозка по ним возвращается. Если кто-то уже взял аккаунт в работу, заказ переходит в wait_cancel и дожидается этих попыток — ответ всё равно cancelled: true. Повторный DELETE по уже завершённому заказу его прячет (cancelled: false).

ответ
{
  "order_id": 12345,
  "cancelled": true,
  "message": "Order cancelled successfully"
}
демо · отмена
Как посмотреть свои заказы за период?

Статистика

GET/orders/stats

Только свои заказы. Окно по дате создания, дни в UTC. ordered — сколько аккаунтов заказали, paid — сколько успешно закрыто.

days14, от 1 до 90
limit100, от 1 до 1000
offset0 и больше
ответ
{
  "period_days": 14,
  "orders_count": 3,
  "ordered": 220,
  "paid": 180,
  "by_day": [
    { "date": "2026-09-20", "orders": 2, "ordered": 120, "paid": 90 }
  ],
  "orders": [
    {
      "order_id": 12345,
      "created_at": "2026-09-21T18:44:29Z",
      "status": "in_work",
      "ordered": 100,
      "paid": 37
    }
  ],
  "limit": 100,
  "offset": 0
}
демо · статистика
Есть готовый клиент?

Python

Четыре функции. В API_KEY подставьте свой ключ. На создание заказа таймаут 10 минут — архив может быть большим.

client.py
import requests

BASE_URL = "https://tvyze.com/api/customer/v1"
API_KEY = ""

HEADERS = {"Api-Key": API_KEY}


def create_order(archive_path: str) -> dict:
    """Залить архив (.zip / .rar) с аккаунтами и создать заказ."""
    with open(archive_path, "rb") as f:
        r = requests.post(
            f"{BASE_URL}/orders/create",
            headers=HEADERS,
            files={"file": (archive_path.split("/")[-1], f, "application/octet-stream")},
            timeout=600,
        )
    r.raise_for_status()
    return r.json()


def get_order(order_id: int) -> dict:
    r = requests.get(f"{BASE_URL}/orders/{order_id}", headers=HEADERS, timeout=30)
    r.raise_for_status()
    return r.json()


def cancel_order(order_id: int) -> dict:
    r = requests.delete(f"{BASE_URL}/orders/{order_id}", headers=HEADERS, timeout=60)
    r.raise_for_status()
    return r.json()


def orders_stats(days: int = 14) -> dict:
    r = requests.get(
        f"{BASE_URL}/orders/stats",
        headers=HEADERS,
        params={"days": days, "limit": 100, "offset": 0},
        timeout=30,
    )
    r.raise_for_status()
    return r.json()
Как это выглядит подряд?

Сценарий

Создали → опросили, пока идёт работа → дождались отчёта. Демо прогоняет эти три ответа без сети.

демо · полный цикл
Что должно лежать внутри zip?

Архив

  • Формат .zip или .rar. Вложенные архивы раскрываются.
  • Аккаунт — это файл .session или папка с tdata/key_datas.
  • Если в архиве есть и session, и tdata, берётся tdata.
  • Пустой архив или без аккаунтов — 400, заказ не создаётся.
Что значат коды?

Ошибки

401invalid access key — нет заголовка или ключ выключен
403api_orders_disabled — ключу не открыт API заказов
403Access denied — заказ принадлежит другому ключу
404Order not found — такого id нет
400No accounts found in archive — в архиве нечего брать
400Insufficient balance — не хватает баланса на заморозку
400order_finished — отмена уже идущей отмены или скрытого заказа
429rate limit exceeded — больше 60 запросов за минуту
503orders_acceptance_paused — приём заказов на паузе

Статусы в поле status:

pausedЖдёт отложенного старта
in_workВ работе
wait_cancelОтмена запрошена, дожимаются уже взятые аккаунты
cancelledОтменён, остаток разморожен
completedЗакрыт, отчёт можно забирать
completed_hideСкрыт повторной отменой