x333e3.xyzdocsЛичный кабинет

API x333e3

Управляйте серверами, оформляйте заказы и получайте историю расходов из своих приложений.

Базовый адрес · v1https://x333e3.xyz/api/v1
HTTPS и JSON

POST принимает JSON-объект.

Суммы в центах

1100 означает 11.00 USD.

Идентификаторы

Сервера доступны по публичному хэшу.

Авторизация

Создайте токен в разделе «Настройки → API и webhooks». Выберите необходимые права и срок действия. Передавайте токен в заголовке — не в URL.

export X333_TOKEN='YOUR_API_TOKEN'

curl https://x333e3.xyz/api/v1/servers \
  -H "Authorization: Bearer $X333_TOKEN"

Токен участника ограничен его рабочим пространством, правами и списком серверов. Отзыв токена, доступа участника или смена данных входа прекращают доступ. Секрет показывается один раз при создании.

servers:readКонфигурации и сервераservers:powerУправление питаниемservers:renewПродлениеorders:writeКорзина и заказыoperations:readСтатусы операцийbilling:readИстория расходов

Безопасные повторы

Каждый POST требует Idempotency-Key: от 16 до 100 букв, цифр и символов _ : -. Для новой операции создавайте новый ключ; при сетевом сбое повторяйте прежний ключ и то же тело запроса.

  1. Сохраните ключ до отправки команды.
  2. Если ответ не получен, повторите запрос с тем же ключом.
  3. Если ответ содержит operation_id, проверьте результат через GET /operations.
Команда с operation_id принята в очередь; это ещё не означает её завершение. Повтор с другими параметрами и прежним ключом возвращает конфликт 409.

Ошибки и ограничения

{
  "error": {
    "message": "Токен недоступен или не имеет нужного права.",
    "code": 403
  }
}
КодЗначение
400Неверные параметры или JSON
401Отсутствует заголовок авторизации
403Токен, права или доступ недоступны
404Ресурс или маршрут не найден
409Конфликт, занятая операция или нет наличия
413Тело запроса превышает 32 КБ
415Нужен Content-Type: application/json
429Превышена частота запросов
503Временная ошибка

Прикладной лимит: 180 запросов на токен и 360 на аккаунт за 15-минутное окно. Защита WAF действует дополнительно; API-токен не отменяет её правила.

Максимумы ответов: 500 серверов, 100 операций и 5000 строк расходов. В корзине до 10 позиций; количество одной позиции — 1–10. Тело POST — до 32 КБ.

Webhooks

Настройте HTTPS endpoint и подписки в кабинете. Допускается порт 443 без редиректов. Локальные и закрытые адреса запрещены. Пароли и реквизиты серверов в payload не входят.

Проверка подписи

Подписана строка timestamp + '.' + исходные байты JSON. Допуск времени — 5 минут. Проверяйте HMAC до разбора и обработки события.

X-X333-Event: server.operation
X-X333-Delivery: DELIVERY_ID
X-X333-Timestamp: UNIX_TIMESTAMP
X-X333-Signature: v1=HEX_HMAC_SHA256
import hashlib, hmac, time

def verify(raw_body: bytes, headers, secret: str) -> bool:
    timestamp = headers.get('X-X333-Timestamp', '')
    try:
        if abs(time.time() - int(timestamp)) > 300:
            return False
    except (ValueError, TypeError):
        return False
    message = timestamp.encode() + b'.' + raw_body
    expected = 'v1=' + hmac.new(
        secret.encode(), message, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(
        expected, headers.get('X-X333-Signature', '')
    )

Доставка может повторяться: сохраните X-X333-Delivery с UNIQUE-ограничением. Возвращайте 2xx после надёжного сохранения события. Максимум 8 попыток с возрастающей задержкой; журнал и ручной повтор — в кабинете.

События

server.readyserver.operationorder.createdbilling.creditbilling.renewalbilling.reminderticket.replyticket.openedstock.availableteam.changedmaintenance.plannedmaintenance.emergencyresource.warningresource.recoveryendpoint.test
GET/plans

Тарифы и наличие

Актуальные конфигурации, цены в центах и число доступных серверов по локациям.

Право токена servers:read

Дополнительных параметров нет.

Ответ 200

Пример структуры, не реальные данные.

{
  "data": [
    {
      "id": 1,
      "name": "Nano",
      "cpu": 4,
      "ram_gb": 8,
      "disk_gb": 100,
      "price_cents": 1100,
      "locations": [
        {
          "code": "nl",
          "label": "Нидерланды",
          "available": 2
        }
      ]
    }
  ]
}
curl 'https://x333e3.xyz/api/v1/plans' \
  -H "Authorization: Bearer $X333_TOKEN"
GET/servers

Список серверов

Сервера рабочего пространства токена. Учитываются права участника и список доступных ему серверов.

Право токена servers:read

Дополнительных параметров нет.

Ответ 200

Пример структуры, не реальные данные.

{
  "data": [
    {
      "id": "0123456789abcdef0123456789abcdef",
      "name": "web-01",
      "state": "provisioned",
      "ip": "192.0.2.10",
      "configuration": "4 vCPU / 8 GB RAM / 100 GB NVMe",
      "location": "Нидерланды",
      "os": "Ubuntu 24.04",
      "renewal_price_cents": 1100,
      "paid_until": 1795000000,
      "auto_renew": true
    }
  ]
}
curl 'https://x333e3.xyz/api/v1/servers' \
  -H "Authorization: Bearer $X333_TOKEN"
GET/servers/{hash}

Данные сервера

Конфигурация, адрес, состояние, срок оплаты и автопродление. Пароли и реквизиты в ответ не входят.

Право токена servers:read

Параметры

hashstring · path

Публичный идентификатор сервера: 32 шестнадцатеричных символа. Возьмите из GET /servers.

Ответ 200

Пример структуры, не реальные данные.

{
  "data": {
    "id": "0123456789abcdef0123456789abcdef",
    "name": "web-01",
    "state": "provisioned",
    "ip": "192.0.2.10",
    "configuration": "4 vCPU / 8 GB RAM / 100 GB NVMe",
    "location": "Нидерланды",
    "os": "Ubuntu 24.04",
    "renewal_price_cents": 1100,
    "paid_until": 1795000000,
    "auto_renew": true
  }
}
curl 'https://x333e3.xyz/api/v1/servers/0123456789abcdef0123456789abcdef' \
  -H "Authorization: Bearer $X333_TOKEN"
GET/operations

Состояние операций

До 100 последних операций. Сопоставьте id с operation_id принятой команды и проверяйте state.

Право токена operations:read

Дополнительных параметров нет.

Ответ 200

Пример структуры, не реальные данные.

{
  "data": [
    {
      "id": 42,
      "server": "0123456789abcdef0123456789abcdef",
      "action": "restart",
      "action_label": "Перезапуск",
      "state": "queued",
      "label": "В очереди",
      "phase": "В очереди",
      "created": "2026-10-26 10:00:00",
      "updated": "2026-10-26 10:00:00",
      "error": ""
    }
  ]
}
curl 'https://x333e3.xyz/api/v1/operations' \
  -H "Authorization: Bearer $X333_TOKEN"
GET/billing

История расходов

До 5000 операций за выбранный месяц. amount_cents — целые центы USD: положительное значение означает пополнение, отрицательное — списание.

Право токена billing:read

Параметры

monthstring · query

Месяц в формате YYYY-MM. По умолчанию — текущий месяц UTC.

Ответ 200

Пример структуры, не реальные данные.

{
  "data": [
    {
      "id": 7,
      "created": "2026-10-26 10:00:00",
      "amount_cents": -1100,
      "description": "Продление сервера",
      "server": "0123456789abcdef0123456789abcdef",
      "project": "Без проекта"
    }
  ]
}
curl 'https://x333e3.xyz/api/v1/billing?month=2026-10' \
  -H "Authorization: Bearer $X333_TOKEN"
POST/cart

Добавить в корзину

Добавляет позицию или заменяет её количество для сочетания тарифа и локации. Само добавление не оформляет заказ.

Право токена orders:write

Параметры

plan_idinteger · body

ID активного тарифа из GET /plans.

locationstring · body

Код доступной локации тарифа, например nl или us.

quantityinteger · body

От 1 до 10. По умолчанию 1.

project_idinteger · body

Необязательно: ID существующего проекта. По умолчанию 0 — без проекта.

Команда выполняет реальное действие. Для POST обязательны JSON и Idempotency-Key.

Ответ 201

Пример структуры, не реальные данные.

{
  "data": {
    "cart": [
      {
        "plan_id": 1,
        "location": "nl",
        "quantity": 1
      }
    ]
  }
}
curl -X POST 'https://x333e3.xyz/api/v1/cart' \
  -H "Authorization: Bearer $X333_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: cart-request-20261026-001' \
  -d '{"plan_id": 1, "location": "nl", "quantity": 1}'
POST/checkout

Оформить заказ

Оформляет всю корзину с баланса. Наличие и стоимость проверяются заново. При нехватке серверов корзина не списывается частично.

Право токена orders:write

Тело запроса: пустой JSON-объект {}.

Команда выполняет реальное действие. Для POST обязательны JSON и Idempotency-Key.

Ответ 202

Пример структуры, не реальные данные.

{
  "data": {
    "kind": "checkout",
    "servers": [
      {
        "server": "0123456789abcdef0123456789abcdef",
        "operation_id": 42
      }
    ],
    "amount_cents": 1100
  }
}
curl -X POST 'https://x333e3.xyz/api/v1/checkout' \
  -H "Authorization: Bearer $X333_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: checkout-request-20261026-001' \
  -d '{}'
POST/servers/{hash}/start

Включить сервер

Ставит включение сервера в очередь. Принятая команда ещё не означает завершённое включение.

Право токена servers:power

Параметры

hashstring · path

Публичный идентификатор сервера: 32 шестнадцатеричных символа. Возьмите из GET /servers.

Команда выполняет реальное действие. Для POST обязательны JSON и Idempotency-Key.

Ответ 202

Пример структуры, не реальные данные.

{
  "data": {
    "operation_id": 42,
    "state": "queued"
  }
}
curl -X POST 'https://x333e3.xyz/api/v1/servers/0123456789abcdef0123456789abcdef/start' \
  -H "Authorization: Bearer $X333_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: start-request-20261026-001' \
  -d '{}'
POST/servers/{hash}/stop

Выключить сервер

Ставит выключение в очередь. Команда влияет на работу реального сервера.

Право токена servers:power

Параметры

hashstring · path

Публичный идентификатор сервера: 32 шестнадцатеричных символа. Возьмите из GET /servers.

Команда выполняет реальное действие. Для POST обязательны JSON и Idempotency-Key.

Ответ 202

Пример структуры, не реальные данные.

{
  "data": {
    "operation_id": 42,
    "state": "queued"
  }
}
curl -X POST 'https://x333e3.xyz/api/v1/servers/0123456789abcdef0123456789abcdef/stop' \
  -H "Authorization: Bearer $X333_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: stop-request-20261026-001' \
  -d '{}'
POST/servers/{hash}/restart

Перезапустить сервер

Ставит перезапуск в очередь. Отслеживайте результат через GET /operations.

Право токена servers:power

Параметры

hashstring · path

Публичный идентификатор сервера: 32 шестнадцатеричных символа. Возьмите из GET /servers.

Команда выполняет реальное действие. Для POST обязательны JSON и Idempotency-Key.

Ответ 202

Пример структуры, не реальные данные.

{
  "data": {
    "operation_id": 42,
    "state": "queued"
  }
}
curl -X POST 'https://x333e3.xyz/api/v1/servers/0123456789abcdef0123456789abcdef/restart' \
  -H "Authorization: Bearer $X333_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: restart-request-20261026-001' \
  -d '{}'
POST/servers/{hash}/renew

Продлить на 30 дней

Продлевает сервер с баланса рабочего пространства. Возвращает новый срок оплаты и списанную сумму в центах. Продление выполняется сразу; отдельная операция в очереди не создаётся.

Право токена servers:renew

Параметры

hashstring · path

Публичный идентификатор сервера: 32 шестнадцатеричных символа. Возьмите из GET /servers.

Команда выполняет реальное действие. Для POST обязательны JSON и Idempotency-Key.

Ответ 202

Пример структуры, не реальные данные.

{
  "data": {
    "paid_until": 1797592000,
    "amount_cents": 1100
  }
}
curl -X POST 'https://x333e3.xyz/api/v1/servers/0123456789abcdef0123456789abcdef/renew' \
  -H "Authorization: Bearer $X333_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: renew-request-20261026-001' \
  -d '{}'
Документация