К содержанию
API v3

Аккаунт и команда

Настройки аккаунта

Своё хранилище файлов, брендинг, адрес опросов, тариф и партнёрская программа

Markdown для нейросетей Актуально на 21.09.2026

Своё хранилище файлов, брендинг и логотип

Подключение своего хранилища в API не входит: там ключи доступа к S3 или Яндекс.Диску. Читать состояние и проверять доступность можно.


92. Своё хранилище

В API с 08.09.2026

Действие HTTP
Состояние GET /workspace/{workspace_id}/storage
Занятое место GET /workspace/{workspace_id}/storage/usage
Скрытые файлы GET /workspace/{workspace_id}/storage/hidden-files
Проверка доступности POST /workspace/{workspace_id}/storage/verify

Файлы сверх дисковой квоты не удаляются, а скрываются: их возвращают, освободив место или оплатив хранение — это и отдают «скрытые файлы». Возвращают их оплатой, поэтому список требует право payment.

Своё хранилище входит не во все тарифы. На запрещённом состояние и занятое место отвечают 200 с available: false и без настроек: файлы лежат на стороне платформы, настройкам взяться неоткуда.

Проверка отвечает 200 с полем storage_ok: недоступное хранилище — результат проверки, а не сбой вызова. Запускает её только владелец аккаунта — проверка меняет состояние подключения, а не просто читает его. Тариф без своего хранилища — 403 с blocked_by_tariff, хранилище не подключено — 400 с кодом storage_not_connected.


93. Брендинг и логотип

В API с 08.09.2026

Требуют право account_quiz_settings. Логотип и копирайт — настройки аккаунта: действуют сразу на все его опросы, отчёты и PDF.

Действие HTTP
Логотип и копирайт POST /workspace/{workspace_id}/branding с полями logo_show, show_copyright
Загрузить логотип POST /workspace/{workspace_id}/branding/logo, файл в поле logo (jpeg, jpg, png, webp, до 5 МБ)
Удалить логотип DELETE /workspace/{workspace_id}/branding/logo

После загрузки адрес файла приходит полем logo_url.

Скрыть копирайт можно не на всех тарифах: на запрещённом запрос отклоняется с 403 и blocked_by_tariff, а значение остаётся включённым — так же поступает конструктор.


Адрес, по которому открываются опросы

Требует право участника domain. Адресов четыре: служебный, поддомен сервиса, дополнительный поддомен и свой домен. Поддомены и свой домен разрешены разными тарифными опциями, поэтому в ответе на чтение приходит allowed_by_tariff.


103. Текущий адрес аккаунта

В API с 08.09.2026

GET/workspace/{workspace_id}/domain

JSON
{
    "status": true, "workspace_id": 760,
    "domain_type": "subdomain", "domain": null,
    "subdomain": "nashi-oprosy.webask.io", "other_subdomain": null,
    "service_url": "webask.io", "certificate_state": null,
    "allowed_by_tariff": {"domain": true, "subdomain": true}
}

domain_type — какой из адресов используется сейчас. certificate_state — на чём стоит выпуск сертификата для своего домена: без success домен не откроется по https. Записи адреса у аккаунта может не быть — тогда приходит domain: null, опросы открываются по служебному адресу.


104. Поддомен

В API с 08.09.2026

POST/workspace/{workspace_id}/domain/subdomain

Поле Тип Обязательное Описание
subdomain string|null Да Имя поддомена. Пустая строка или null снимает его.
subdomain_kind string Нет default (по умолчанию) или other_subdomain.

Поле обязательно, даже когда поддомен снимают. Отсутствие поля — 422: молчаливое стирание увело бы все опросы аккаунта на служебный адрес, о чём никто не просил.

Если снять поддомен, которым аккаунт пользовался, адрес автоматически возвращается на служебный (domain_type: "default") — иначе он указывал бы в пустоту.

Отказы приходят кодом: subdomain_invalid (недопустимые символы), subdomain_long, subdomain_forbidden (имя занято служебными адресами сервиса), subdomain_taken (занято другим аккаунтом). Тариф без поддоменов — 403 с blocked_by_tariff: true и кодом tariff_subdomain.


105. Выбор адреса

В API с 08.09.2026

POST/workspace/{workspace_id}/domain/type

Поле Тип Обязательное Описание
domain_type string Да default, subdomain, domain, other_subdomain.

Пустое имя поддомена при выборе достраивается значением по умолчанию — иначе выбранный адрес указывал бы в никуда. Тариф без своего домена или без поддоменов — 403 с blocked_by_tariff: true и кодом tariff_type.


Тариф, приём оплаты и партнёрская программа

Оплатить тариф или вывести партнёрские средства через API нельзя: это перевод денег, его делает человек сам. Здесь картина тарифа, настройка приёма оплаты в опросе и сводка по программе.


106. Что входит в тариф аккаунта

В API с 08.09.2026

GET/workspace/{workspace_id}/tariff

JSON
{
    "status": true, "workspace_id": 760,
    "tariff": {"code": "premium", "is_free": false, "is_trial": false,
               "is_paid": true, "expires_at": "2026-10-09T00:00:00+03:00", "days_left": 30},
    "limits": {
        "quizzes": {"used": 12, "limit": 999999, "left": 999987, "can_create_more": true},
        "answers": {"left": 4200, "resets_on_day": 9, "incomplete_counted": false},
        "members": {"used": 3, "can_add_more": true},
        "themes": {"limit": 50},
        "disk": {"used_bytes": 1048576, "limit_bytes": 10737418240, "free_bytes": 10736369664,
                 "file_size_limit_bytes": 52428800},
        "letters": {"recipients_limit": 5000}
    },
    "features": {"mcp_access": true, "custom_domain": true, "quiz_payment": true,
                 "integrations": {"webhook": true, "telegram": true, "google_sheets": true}}
}

Признаки читаются поштучно и по отдельности не роняют остальные: опция может отсутствовать в справочнике, и для картины тарифа это означает «возможности нет», а не «ответа нет». Числовой лимит в таком случае приходит как null — «неизвестно».

features.quiz_payment вынесен отдельно от integrations: приём оплаты — не интеграция, у него своя тарифная опция.


107. Список тарифов с ценами

В API с 08.09.2026

GET/workspace/{workspace_id}/tariff/list


108. Приём оплаты в опросе

В API с 08.09.2026

Требует тарифную опцию приёма оплаты и право участника settings.

Действие HTTP
Что настроено GET /quiz/{id}/payment
Настроить POST /quiz/{id}/payment
Поле Тип Обязательное Описание
yookassa_account_id integer Да Счёт продавца этого же аккаунта.
payment_type string Да fixed — фиксированная сумма, scoring — по набранным баллам.
fixed_amount numeric При fixed — да Иначе оплата была бы на ноль.
contact_widget_id string Нет Вопрос, из которого берут контакт для чека.

Счета продавца заводят в кабинете: там платёжные ключи. Секретный токен счёта наружу не отдаётся — он равносилен доступу к приёму платежей; в ответе только shop_id, название и настройки чека.

payment_ready показывает, есть ли у аккаунта хоть один счёт: отдельного переключателя у оплаты нет, она работает при наличии счёта и разрешающего тарифа, а показ вопроса задаётся его виджетом.

Счёт другого аккаунта — 400 с кодом account_not_found: чужой увёл бы платежи респондентов на другого продавца.


109. Партнёрская программа

В API с 08.09.2026

GET/partner

Параметр Тип Описание
date_from, date_to date Период приглашений и начислений.
source_id integer Отбор по метке источника.
limit integer 1–200, по умолчанию 20.
offset integer Сдвиг по списку приглашённых.

В ответе registrations.total — сколько приглашённых всего, registrations.returned — сколько пришло на этой странице; остальные забираются через offset.

Возвращает баланс (доступный и ещё не подтверждённый к выплате), приглашённых с числом их оплат, начисления за период и список меток. Всё считается по владельцу программы: программа принадлежит человеку, а не аккаунту.

Вывод средств через API не делается.


110. Метки источников

В API с 08.09.2026

POST/partner/sources

Поле Тип Обязательное Описание
action string Да create, rename, delete.
source_id integer Кроме create
name string При rename — да 3–25 символов. При create необязательно: подставится имя по порядку.

Имя по порядку при create берётся первым свободным: после удаления метки счёт по количеству выдавал бы уже занятое имя.

Метка ищется среди своих — чужую не переименовать и не удалить (400, source_not_found).


Запись на встречи

Требует право участника settings: расписание — это настройка того, как респондент записывается.


117. Расписания аккаунта

В API с 08.09.2026

Действие HTTP
Список GET /workspace/{workspace_id}/schedulers
Создать POST /workspace/{workspace_id}/schedulers
Изменить POST /workspace/{workspace_id}/schedulers/{schedulerId}
Копия POST /workspace/{workspace_id}/schedulers/{schedulerId}/duplicate
Удалить DELETE /workspace/{workspace_id}/schedulers/{schedulerId}

Основные поля: name, color, schedule_mode (weekly — недельная сетка, slots — конкретные даты), timezone, slot_duration (5–1440 минут) и weekly — список дней с интервалами. При создании они обязательны, при правке нет: непереданное остаётся прежним.

Остальное: description, is_active, slot_increment, buffer_before, buffer_after, min_notice_minutes, max_advance (rolling со days, range с from и to, либо infinite), daily_limit, seats_per_slot, confirmation_mode (auto или manual), notify_respondent, allow_respondent_cancel, notify_admin, admin_emails, location_type (online, phone, address, custom), location_value, manual_slots, overrides — исключения из сетки на диапазон дат.

Расписание другого аккаунта не найдётся — 400 с кодом scheduler_not_found.


118. Журнал брони

В API с 08.09.2026

GET/workspace/{workspace_id}/bookings

Параметр Тип Обязательное Описание
from date Да Начало периода.
to date Да Конец, позже начала.

Период обязателен: журнал за всё время — это выборка по всем встречам аккаунта, она нужна редко и стоит дорого.


119. Правка брони

В API с 08.09.2026

POST/workspace/{workspace_id}/bookings/{bookingId}

Поле Тип Описание
status string pending, confirmed, cancelled, no_show.
comment string До 5000 символов.
start_utc, end_utc date Перенос встречи.

Время задаётся парой. Одна граница или пустое значение — 422: перенос идёт только при обеих, и такой запрос выглядел бы успешным, а встреча уехала бы на момент вызова или осталась на месте.

Смена статуса и перенос отправляют респонденту уведомление, если оно включено в расписании.


120. Блокировки времени

В API с 08.09.2026

Способ закрыть занятый интервал, не ломая всю сетку: отпуск, праздник, разовая встреча вне опроса.

Действие HTTP
Закрыть время POST /workspace/{workspace_id}/booking-blocks
Снять DELETE /workspace/{workspace_id}/booking-blocks/{blockId}

Поля: scheduler_id, start_utc, end_utc (позже начала), необязательный comment. Время приводится к UTC на нашей стороне — присылать можно и со смещением. В журнале видно, кто закрыл время: блокировки ставят и руками, и по ключу.