Документация REST API
Один и тот же API использует веб-панель и мобильные клиенты. Ниже — как вызывать методы из кода или HTTP-клиента; пользовательский сценарий — через маркетплейс и веб-панели по ролям (описание в справке).
1. Авторизация (JWT)
Защищённые методы требуют заголовок Authorization: Bearer <access_token> (именно префикс Bearer и пробел, затем токен).
- Получите OAuth-токен Яндекса (мобильное приложение или OAuth-кабинет для отладки).
-
POST /api/auth/yandexс телом{"yandexToken":"…","deviceId":"…"}— без JWT. В ответе поляaccessTokenиrefreshToken. - Дальше передавайте
accessTokenв заголовкеAuthorizationкак указано выше. - Продление:
POST /api/auth/refreshс тем жеdeviceId, телом сrefreshToken.
2. Спецификация OpenAPI (схемы и список операций)
Машиночитаемое описание всех путей, параметров и тел запросов в формате OpenAPI 3:
/swagger/v1/swagger.json
(удобно импортировать в Postman, Insomnia, codegen и т.п.). Доступно только в окружении Development.
В описании операций заданы теги вида Роль: … — по ним видно, для какой роли сессии метод предназначен. У одной операции может быть несколько тегов.
3. Маркетплейс
GET /api/marketplace/posts— лента (без JWT).GET /api/marketplace/posts/{id}— один пост (без JWT).-
POST /api/marketplace/posts— создание поста (JWT, в сессии роль Seller). Тело JSON, например:{ "title": "Заголовок", "description": "Текст", "photos": ["/api/files/content/…"], "priceInfo": "Цена и условия", "contacts": "Телефон или мессенджер" } GET /api/users/{userId}/organizer-rating— публичный «паспорт СП»: средний балл, число оценок, блокировка на создание закупок (без JWT).
4. Файлы и чат
POST /api/files/upload— загрузка изображения (JWT), в ответе URL для поляphotosпоста.GET /api/files/content/{id}— выдача файла, без JWT (для ссылок в постах и тегов<img>).- Чат в реальном времени: SignalR hub
/hubs/chat— JWT в query-параметреaccess_tokenили в заголовке (см. настройки клиента SignalR).
5. Закупки
Группа /api/purchases — полные пути, тела и коды ответов в
OpenAPI. Ниже — краткая шпаргалка по веб-панелям.
Пользовательские сценарии — в справке.
Участник (Member)
GET /api/purchases,GET /api/purchases/{id}— список и детали с позициямиPOST /api/purchases/{id}/join/{code}— вступитьPOST …/lines— новая строка списка;PUT …/lines/{id}/my-quantity— ваш объёмGET/POST /api/purchases/{id}/messages— чат (REST; реал-тайм — см. § 4)POST /api/purchases/{id}/rate-organizer— оценка организатора послеCompleted(три критерия 1–5; не организатор; 14 дней сcompleted_at)
Организатор (Organizer)
POST /api/purchases— создать закупку (description,deliveryAddress,deliveryCost— оценка доставки); при активной блокировке рейтинга — 403PATCH /api/purchases/{id}— описание и адрес раздачиPOST /api/purchases/{id}/invite— новый кодPATCH /api/purchases/{id}/status— статусPATCH /api/purchases/{id}/lines/{lineId}—estimatedPrice(₽/ед., только организатор)- Остальные операции участника — как у Member
Закупщик (Buyer)
PATCH /api/purchases/{id}/status— перевод статусаPATCH /api/purchases/{id}/lines/{lineId}—actualPrice(₽ за единицу),isBought
6. Талоны раздачи
Группа /api/purchases/{id}/tickets. Доступна в статусе закупки Distributing (Раздача).
POST …/generate— сформировать / перегенерировать талоны (только Организатор). С параметромforce=trueаннулирует старые активные талоны.GET …/— список талонов (Организатор или Закупщик).GET …/summary— сводка: всего / погашено / активно (Организатор или Закупщик).GET …/pdf?perPage=8— PDF для печати (perPage= 4, 6 или 8; сетка 2×N на A4). Участник получает только свой талон, Организатор и Закупщик — все.GET …/my— актуальный талон текущего участника.GET …/redeem/by-barcode/{barcode}— проверить по штрихкоду без погашения (Организатор или Закупщик).POST …/redeem— погасить талон. Тело:{"barcode":"…"}(Организатор или Закупщик).POST …/{ticketId}/cancel— аннулировать талон до выдачи (только Организатор). Ответ 204.
7. Поддержка
Группа /api/support/tickets. Работает как анонимно, так и с JWT.
-
POST /api/support/tickets— создать обращение. Тело:{"email":"…","message":"…"}. Без JWT — гостевое; с JWT — привязывается к аккаунту. Ответ:201 {"id","publicNumber"}— публичный номер видаPP-A1B2C3. GET /api/support/tickets— мои обращения (JWT). Ответ: массив{"publicNumber","createdAt","hasStaffReply"}.-
GET /api/support/tickets/{publicNumber}/thread— переписка. Доступ: JWT владельца или query-параметр?email=(гостевой доступ). Ответ:{"publicNumber","createdAt","messages[]"}. -
POST /api/support/tickets/{publicNumber}/messages— дополнить обращение. Тело:{"message":"…"}. Те же правила доступа, что уGET …/thread. Ответ 204.
8. Подписка
-
POST /api/subscription/checkout— создать счёт на оплату подписки (JWT). Ответ:{"paymentUrl":"…"}— URL страницы оплаты Selfwork. После успешной оплаты Selfwork пришлёт вебхук и подписка активируется автоматически. -
POST /api/webhook/selfwork— вебхук оплаты (без JWT, служебный). Требует заголовокX-Webhook-Signature(HMAC-SHA256 от Selfwork). Обрабатывает статусыPaidиCancelled.
9. Мониторинг
GET /health/live — проверка живости процесса (для балансировщиков и healthcheck в Docker).