### GET /api/v1/file/{bucketName}/{fileName} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json **Публичный эндпоинт** — не требует авторизации. **Кэширование:** - Ответ кэшируется на 1 час **Возвращает:** - 200 OK — содержимое файла с соответствующим Content-Type - 404 — бакет или файл не найден ```markdown ### Parameters - **bucketName** (string, path, required): Имя бакета - **fileName** (string, path, required): Имя файла ### Responses #### 200 - Файл успешно скачан #### 404 - Бакет или файл не найден **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/file/{bucketName}/{fileName}" ``` ``` -------------------------------- ### GET /api/v1/Services/{key} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json API endpoint for GET /api/v1/Services/{key} ```markdown ### Parameters - **key** (string, path, required) ### Responses #### 200 - OK **ServiceResponse** - **key** (string): Уникальный ключ сервиса (example: "objectiveo") - **name** (string): Название сервиса - **description** (null,string): Описание сервиса - **unit** (string): Единица измерения (Items/Seconds/Tokens) (example: "Items") - **permissions** (array (string)): Список разрешений сервиса - **isActive** (boolean): Активен ли сервис - **createdAt** (string (date-time)): Дата создания - **updatedAt** (null,string): Дата последнего обновления #### 404 - Not Found **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Services/{key}" ``` ``` -------------------------------- ### GET /api/v1/Templates Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает только id, key и title (без полного промпта). Сервис определяется по API-ключу. ```markdown ### Responses #### 200 - OK - Array of TemplateListItem #### 401 - Unauthorized **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Templates" ``` ``` -------------------------------- ### GET /api/v1/funnels/{serviceKey}/{funnelKey} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает полную структуру воронки со всеми шагами и офферами. **Публичный эндпоинт** — не требует авторизации. **Структура:** - `steps` — шаги воронки в порядке - `offers` — офферы на каждом шаге **Возвращает:** - 200 OK — воронка найдена - 404 Not Found — воронка не найдена или неактивна ```markdown ### Parameters - **serviceKey** (string, path, required): Ключ сервиса - **funnelKey** (string, path, required): Ключ воронки ### Responses #### 200 - Воронка найдена **FunnelResponse** - **id** (string (uuid)): ID воронки - **key** (string) (required): Уникальный ключ воронки (example: "onboarding") - **name** (string) (required): Название воронки - **description** (null,string): Описание воронки - **steps** (array (FunnelStepResponse)): Шаги воронки Array items: - **id** (string (uuid)): ID шага - **key** (string) (required): Уникальный ключ шага (example: "step1") - **order** (integer,string): Порядковый номер шага - **title** (string) (required): Заголовок шага - **subtitle** (null,string): Подзаголовок шага - **description** (null,string): Описание шага - **imageUrl** (null,string): URL изображения для шага - **videoUrl** (null,string): URL видео для шага - **offers** (array (FunnelOfferResponse)): Офферы на этом шаге Array items: - **id** (string (uuid)): ID оффера - **order** (integer,string): Порядковый номер оффера - **title** (string) (required): Заголовок оффера - **subtitle** (null,string): Подзаголовок оффера - **buttonText** (null,string): Текст кнопки - **imageUrl** (null,string): URL изображения оффера - **badgeText** (null,string): Текст бейджа (например "Популярный") - **actionType** (string) (required): Тип действия при выборе оффера (example: "Payment") - **actionData** (null,string): Данные действия (ID тарифа, URL и т.д.) #### 404 - Воронка не найдена или неактивна **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/funnels/{serviceKey}/{funnelKey}" ``` ``` -------------------------------- ### GET /api/v1/Styles Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json API endpoint for GET /api/v1/Styles ```markdown ### Responses #### 200 - OK - Array of StyleListItem #### 401 - Unauthorized **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Styles" ``` ``` -------------------------------- ### GET /api/v1/analytics/referrals/{serviceKey} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает агрегированную статистику по реферальной программе. **Важно:** - Требуется авторизация `ServiceAccess` - Период по умолчанию: последние 30 дней **Метрики:** - `clicks` — клики по реферальным ссылкам - `registrations` — регистрации - `activations` — активации рефералов - `payments` — оплаты - `conversionClickToRegistration` — конверсия клик→регистрация (%) - `conversionRegistrationToPayment` — конверсия регистрация→оплата (%) ```markdown ### Parameters - **serviceKey** (string, path, required): Ключ сервиса - **from** (string (date-time), query, optional): Начало периода (по умолчанию 30 дней назад) - **to** (string (date-time), query, optional): Конец периода (по умолчанию сейчас) ### Responses #### 200 - Статистика успешно получена **ReferralAnalyticsResponse** - **serviceKey** (string) (required): Ключ сервиса - **period** (object) (required): Информация о периоде - **from** (string (date-time)): Начало периода - **to** (string (date-time)): Конец периода - **clicks** (integer,string): Количество кликов по реферальным ссылкам - **registrations** (integer,string): Количество регистраций по рефералам - **activations** (integer,string): Количество активаций рефералов - **payments** (integer,string): Количество оплат от рефералов - **conversionClickToRegistration** (number,string): Конверсия из клика в регистрацию (%) - **conversionRegistrationToPayment** (number,string): Конверсия из регистрации в оплату (%) #### 401 - Требуется авторизация **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 403 - Доступ запрещён **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/analytics/referrals/{serviceKey}?from=2023-01-01T00:00:00Z&to=2023-01-01T00:00:00Z" ``` ``` -------------------------------- ### GET /api/v1/Referrals/my-code/{serviceKey} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает существующий код или создаёт новый. **Включает:** - Реферальную ссылку Telegram - Статистику: клики, активации, платежи ```markdown ### Parameters - **serviceKey** (string, path, required): Ключ сервиса - **userId** (string (uuid), query, optional): ID пользователя ### Responses #### 200 - Реферальный код со статистикой **ReferralCodeResponse** - **code** (string): Реферальный код (example: "ABC123") - **serviceKey** (string): Ключ сервиса (example: "objectiveo") - **referralLink** (string): Полная реферальная ссылка (example: "https://t.me/your_bot?start=objectiveo_ABC123") - **statistics** (object): Статистика реферального кода - **clicks** (integer,string): Количество кликов по ссылке - **activations** (integer,string): Количество активаций - **payments** (integer,string): Количество оплат - **totalEarned** (number,string): Общая сумма заработка ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Referrals/my-code/{serviceKey}?userId=string" ``` ``` -------------------------------- ### GET /api/v1/Services Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json API endpoint for GET /api/v1/Services ```markdown ### Parameters - **activeOnly** (boolean, query, optional) ### Responses #### 200 - OK - Array of ServiceResponse ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Services?activeOnly=true" ``` ``` -------------------------------- ### GET /api/v1/Gemini/roles Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает глобальный список ролей (не привязаны к конкретному сервису). Любой сервис с permission `gemini.generate` может использовать любую роль. ```markdown ### Responses #### 200 - OK - Array of GeminiRoleListItem #### 401 - Unauthorized **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Gemini/roles" ``` ``` -------------------------------- ### GET /api/v1/Gemini/roles/{key} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json API endpoint for GET /api/v1/Gemini/roles/{key} ```markdown ### Parameters - **key** (string, path, required) ### Responses #### 200 - OK **GeminiRoleDetailResponse** - **systemInstruction** (string) - **temperature** (number,string) - **thinkingLevel** (string) - **key** (string) - **title** (string) - **description** (null,string) - **modelName** (string) - **cost** (number,string) - **capabilities** (array (string)) #### 401 - Unauthorized **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 404 - Not Found **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Gemini/roles/{key}" ``` ``` -------------------------------- ### GET /api/v1/analytics/users/{userId}/events Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает список всех событий пользователя для анализа. **Фильтры:** - `serviceKey` — фильтр по сервису (опционально) - `from`/`to` — фильтр по периоду (опционально) **Важно:** - Требуется авторизация `ServiceAccess` ```markdown ### Parameters - **userId** (string (uuid), path, required): ID пользователя - **serviceKey** (string, query, optional): Фильтр по сервису (опционально) - **from** (string (date-time), query, optional): Начало периода (опционально) - **to** (string (date-time), query, optional): Конец периода (опционально) ### Responses #### 200 - События успешно получены - Array of UserEventResponse #### 401 - Требуется авторизация **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/analytics/users/{userId}/events?serviceKey=string&from=2023-01-01T00:00:00Z&to=2023-01-01T00:00:00Z" ``` ``` -------------------------------- ### GET /api/v1/balances/user/{userId} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает все балансы пользователя или баланс конкретной валюты. **Типы валют:** - `tokens` - внутренние токены для генерации - `rub` - рубли - `usd` - доллары **Примеры:** - `/api/v1/balances/user/{userId}` - все балансы - `/api/v1/balances/user/{userId}?currency=tokens` - только токены ```markdown ### Parameters - **userId** (string (uuid), path, required) - **currency** (string, query, optional) ### Responses #### 200 - OK - Array of BalanceDto #### 404 - Not Found **ErrorResponse** - **code** (string) - **message** (string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/balances/user/{userId}?currency=string" ``` ``` -------------------------------- ### GET /api/v1/service-balances/user/{userId} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает все балансы пользователя по сервисам или баланс конкретного сервиса. **Примеры:** - `/api/v1/service-balances/user/{userId}` - все балансы по сервисам - `/api/v1/service-balances/user/{userId}?serviceKey=music_gen` - только баланс music_gen ```markdown ### Parameters - **userId** (string (uuid), path, required) - **serviceKey** (string, query, optional) ### Responses #### 200 - OK - Array of ServiceBalanceDto #### 404 - Not Found **ErrorResponse** - **code** (string) - **message** (string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/service-balances/user/{userId}?serviceKey=string" ``` ``` -------------------------------- ### GET /api/v1/Users/{telegramId} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Возвращает профиль пользователя. При передаче параметра `serviceKey` ответ дополнительно содержит три блока сервис-специфичных данных: - **serviceBalance** — купленные кредиты пользователя в этом сервисе (не истекают) - **serviceMetadata** — произвольные key-value данные, специфичные для сервиса (например: `bonus_limit`, `pack_id`, `ref_count`, `is_blogger` и т.д.) - **activeSubscription** — активная подписка с квотами и датой истечения Данные кэшируются через Redis (пользователь и подписка). **Примеры запросов:** ``` GET /api/v1/users/123456789 GET /api/v1/users/123456789?serviceKey=trekopes ``` **Пример ответа (с serviceKey):** ```json { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "telegramId": 123456789, "username": "john_doe", "firstName": "John", "lastName": "Doe", "displayName": "John Doe", "languageCode": "ru", "telegramPremium": false, "referralCode": "ABCD1234", "createdAt": "2024-01-15T10:00:00Z", "isBlocked": false, "serviceBalance": 50, "serviceMetadata": { "bonus_limit": "20", "pack_id": "portrait_v2", "is_blogger": "true" }, "activeSubscription": { "id": "...", "planName": "PRO", "expiresAt": "2025-03-01T00:00:00Z", "autoRenew": false, "quotas": [ { "serviceKey": "trekopes", "limit": 100, "used": 30, "remaining": 70 } ] } } ``` ```markdown ### Parameters - **telegramId** (integer (int64), path, required): Числовой Telegram ID пользователя - **serviceKey** (string, query, optional): Ключ сервиса для загрузки баланса, метаданных и подписки (опционально) ### Responses #### 200 - Пользователь найден **UserResponse** - **id** (string (uuid)): Внутренний UUID пользователя в системе PanX - **telegramId** (null,integer,string): Числовой Telegram ID (null если пользователь зарегистрирован через OAuth) - **username** (null,string): Юзернейм в Telegram (без @). null если не установлен - **firstName** (null,string): Имя в Telegram - **lastName** (null,string): Фамилия в Telegram - **displayName** (string): Отображаемое имя: FirstName + LastName, или Username, или TelegramId - **languageCode** (string): Код языка Telegram (например: "ru", "en") - **telegramPremium** (boolean): Наличие Telegram Premium - **email** (null,string): Email пользователя (если указан) - **phone** (null,string): Телефон пользователя (если указан) - **timezone** (null,string): Часовой пояс пользователя (например: "Europe/Moscow") - **referralCode** (string): Реферальный код пользователя (8 символов, A-Z0-9) - **avatarUrl** (null,string): URL аватарки пользователя (если загружена) - **createdAt** (string (date-time)): Дата регистрации (UTC) - **updatedAt** (string (date-time)): Дата последнего обновления профиля (UTC) - **lastActiveAt** (null,string): Дата последней активности (UTC) - **isBlocked** (boolean): Признак заблокированного пользователя - **serviceBalance** (null,number,string): Баланс купленных кредитов в сервисе (не истекают). Заполняется только при передаче параметра serviceKey. - **serviceMetadata** (null,object): Сервис-специфичные метаданные пользователя в формате key → value. Заполняются только при передаче параметра serviceKey. Примеры ключей: bonus_limit, pack_id, is_blogger, ref_count, demo_count. - **activeSubscription** (null) #### 401 - Отсутствует или невалидный X-API-Key **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 404 - Пользователь с указанным Telegram ID не найден **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Users/{telegramId}?serviceKey=string" ``` ``` -------------------------------- ### PUT /api/v1/files/upload Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Загружает файл в S3-бакет и сохраняет метаданные в БД. **Headers:** - `X-Bucket-Key` — API-ключ с правом `write` - `X-API-Key` — API-ключ сервиса **Ограничения:** - Максимальный размер файла: 100MB - Проверяется лимит ёмкости бакета **Возвращает:** - 200 OK — файл загружен, возвращается URL и ID - 400 — файл не предоставлен - 401 — ключ отсутствует/неверен - 403 — нет права write - 413 — превышен лимит бакета ```markdown ### Parameters - **X-Bucket-Key** (string, header, optional) ### Request Body **Content-Type:** multipart/form-data - **file** (string (binary)) ### Responses #### 200 - Файл успешно загружен **FileUploadResponse** - **id** (string (uuid)): ID файла в системе - **fileName** (string): Имя загруженного файла - **sizeBytes** (integer,string): Размер файла в байтах - **contentType** (string): MIME-тип файла (example: "image/jpeg") - **url** (string): Публичный URL для скачивания - **s3Key** (string): Ключ файла в S3 #### 400 - Файл не предоставлен **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 401 - X-Bucket-Key отсутствует или неверен **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 403 - Недостаточно прав (write) **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 404 - Бакет не найден **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 413 - Превышен лимит ёмкости бакета **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X PUT "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/files/upload" \ -H "Content-Type: application/json" \ -d '{ "file": "value" }' ``` ``` -------------------------------- ### GET /api/v1/Referrals/partners Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json API endpoint for GET /api/v1/Referrals/partners ```markdown ### Responses #### 200 - OK - Array of PartnerResponse ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Referrals/partners" ``` ``` -------------------------------- ### POST /api/v1/Generations/image Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Создаёт запрос на генерацию изображения через KIE API. **Важно:** - Требуется заголовок `X-Service-Key` с API-ключом сервиса - Сервис должен иметь разрешение `generate.image` - С баланса пользователя списывается 1 токен (если `skipCharge = false`) - Результат сохраняется в указанный бакет **Модели:** - `nano-banana-pro` — быстрая генерация **Возвращает:** - 202 Accepted — запрос принят, генерация запущена - 400 Bad Request — невалидный запрос или бакет - 402 Payment Required — недостаточно баланса - 403 Forbidden — сервис не имеет нужного разрешения ```markdown ### Request Body **Content-Type:** application/json - **userId** (string (uuid)) - **bucketId** (string (uuid)): ID бакета для сохранения результата (обязательно) - **prompt** (string) - **imageInput** (null,array) - **aspectRatio** (null,string) - **resolution** (null,string) - **outputFormat** (null,string) - **callbackUrl** (null,string): URL для callback-уведомления о результате - **skipCharge** (boolean): Пропустить списание баланса - **styleKey** (null,string): Ключ стиля (добавляет промпт стиля в конец) - **templateKey** (null,string): Ключ шаблона (добавляет промпт шаблона в конец) - **templateVariables** (null,object): Переменные для подстановки в шаблон ({{name}} → value) **Content-Type:** text/json - **userId** (string (uuid)) - **bucketId** (string (uuid)): ID бакета для сохранения результата (обязательно) - **prompt** (string) - **imageInput** (null,array) - **aspectRatio** (null,string) - **resolution** (null,string) - **outputFormat** (null,string) - **callbackUrl** (null,string): URL для callback-уведомления о результате - **skipCharge** (boolean): Пропустить списание баланса - **styleKey** (null,string): Ключ стиля (добавляет промпт стиля в конец) - **templateKey** (null,string): Ключ шаблона (добавляет промпт шаблона в конец) - **templateVariables** (null,object): Переменные для подстановки в шаблон ({{name}} → value) **Content-Type:** application/*+json - **userId** (string (uuid)) - **bucketId** (string (uuid)): ID бакета для сохранения результата (обязательно) - **prompt** (string) - **imageInput** (null,array) - **aspectRatio** (null,string) - **resolution** (null,string) - **outputFormat** (null,string) - **callbackUrl** (null,string): URL для callback-уведомления о результате - **skipCharge** (boolean): Пропустить списание баланса - **styleKey** (null,string): Ключ стиля (добавляет промпт стиля в конец) - **templateKey** (null,string): Ключ шаблона (добавляет промпт шаблона в конец) - **templateVariables** (null,object): Переменные для подстановки в шаблон ({{name}} → value) ### Responses #### 202 - Генерация запущена, возвращается ID для отслеживания **GenerationResponse** - **id** (string (uuid)): ID генерации в системе - **taskId** (string): ID задачи во внешнем сервисе - **status** (string): Статус генерации (Pending, Processing, Completed, Failed) (example: "Processing") - **type** (string): Тип генерации (Photo, Video) (example: "Photo") - **serviceKey** (string): Ключ сервиса (example: "objectiveo") #### 400 - Невалидный запрос или бакет не найден/неактивен **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 402 - Недостаточно средств на балансе сервиса **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) #### 403 - Сервис не имеет разрешения generate.image **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X POST "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Generations/image" \ -H "Content-Type: application/json" \ -d '{ "userId": "string", "bucketId": "string", "prompt": "string", "imageInput": "value", "aspectRatio": "value", "resolution": "value", "outputFormat": "value", "callbackUrl": "value", "skipCharge": "true", "styleKey": "value", "templateKey": "value", "templateVariables": "value" }' ``` ``` -------------------------------- ### POST /api/Payments/create Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json Создаёт новый платёж в системе и возвращает URL для перенаправления пользователя на страницу оплаты (Yookassa). ### Типы платежей: - **0** (Tariff) — разовая покупка тарифа, кредиты зачисляются навсегда - **1** (Subscription) — подписка с ежемесячным продлением ### Пример запроса: ```json { "userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": 0, "referenceId": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "email": "user@example.com" } ``` ```markdown ### Request Body **Content-Type:** application/json - **userId** (string (uuid)) (required): ID пользователя (example: "3fa85f64-5717-4562-b3fc-2c963f66afa6") - **type** (integer) (required) - **referenceId** (string (uuid)) (required): ID тарифа или плана подписки (example: "7c9e6679-7425-40de-944b-e07fc1f90ae7") - **email** (null,string): Email пользователя для чека (опционально) (example: "user@example.com") - **selectedOptionsJson** (null,string): JSON с выбранными опциями из групп выбора (опционально) (example: [{"ServiceKey":"transcriber","Amount":180}]) - **enableAutoRenew** (boolean): Включить автопродление (сохранить метод оплаты). Только для подписок. (example: true) **Content-Type:** text/json - **userId** (string (uuid)) (required): ID пользователя (example: "3fa85f64-5717-4562-b3fc-2c963f66afa6") - **type** (integer) (required) - **referenceId** (string (uuid)) (required): ID тарифа или плана подписки (example: "7c9e6679-7425-40de-944b-e07fc1f90ae7") - **email** (null,string): Email пользователя для чека (опционально) (example: "user@example.com") - **selectedOptionsJson** (null,string): JSON с выбранными опциями из групп выбора (опционально) (example: [{"ServiceKey":"transcriber","Amount":180}]) - **enableAutoRenew** (boolean): Включить автопродление (сохранить метод оплаты). Только для подписок. (example: true) **Content-Type:** application/*+json - **userId** (string (uuid)) (required): ID пользователя (example: "3fa85f64-5717-4562-b3fc-2c963f66afa6") - **type** (integer) (required) - **referenceId** (string (uuid)) (required): ID тарифа или плана подписки (example: "7c9e6679-7425-40de-944b-e07fc1f90ae7") - **email** (null,string): Email пользователя для чека (опционально) (example: "user@example.com") - **selectedOptionsJson** (null,string): JSON с выбранными опциями из групп выбора (опционально) (example: [{"ServiceKey":"transcriber","Amount":180}]) - **enableAutoRenew** (boolean): Включить автопродление (сохранить метод оплаты). Только для подписок. (example: true) ### Responses #### 200 - Платёж создан успешно **CreatePaymentResponse** - **paymentId** (string (uuid)): ID созданного платежа (example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890") - **paymentUrl** (string): URL для перенаправления на страницу оплаты Robokassa (example: "https://auth.robokassa.ru/Merchant/Index.aspx?MerchantLogin=demo&OutSum=990.00&InvId=12345") - **invId** (integer,string): Номер заказа в системе Robokassa (example: 12345) - **amount** (number,string): Сумма к оплате (example: 990) - **currency** (string): Валюта платежа (example: "Rub") #### 404 - Пользователь или тариф не найден **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X POST "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/Payments/create" \ -H "Content-Type: application/json" \ -d '{ "userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": "value", "referenceId": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "email": "user@example.com", "selectedOptionsJson": [ { "ServiceKey": "transcriber", "Amount": 180 } ], "enableAutoRenew": true }' ``` ``` -------------------------------- ### GET /api/v1/Subscriptions/user/{userId} Source: https://refreshingly-utmost-stinkbug.cloudpub.ru/openapi/v1.json API endpoint for GET /api/v1/Subscriptions/user/{userId} ```markdown ### Parameters - **userId** (string (uuid), path, required): ID пользователя ### Responses #### 200 - Подписка найдена **SubscriptionResponse** - **id** (string (uuid)): ID подписки - **userId** (string (uuid)): ID пользователя - **planId** (string (uuid)): ID плана - **planName** (string): Название плана - **status** (string): Статус - **startedAt** (string (date-time)): Дата начала - **expiresAt** (string (date-time)): Дата истечения - **autoRenew** (boolean): Автопродление - **quotas** (array (QuotaInfo)): Квоты Array items: - **serviceKey** (string): Ключ сервиса - **limit** (integer,string): Лимит - **used** (integer,string): Использовано #### 404 - Активная подписка не найдена **ProblemDetails** - **type** (null,string) - **title** (null,string) - **status** (null,integer,string) - **detail** (null,string) - **instance** (null,string) ### Example Usage ```bash curl -X GET "http://refreshingly-utmost-stinkbug.cloudpub.ru//api/v1/Subscriptions/user/{userId}" ``` ```