Документация Sponsr API
Максимальное количество запросов в минуту — 200
Валидация API ключа
Проверка полученного X-API-KEY на валидность
GET sponsr.ru/api/v2/external-api/api-keys/validate
Headers:
accept: application/json X-API-KEY
Ответ в случае успеха
{
"valid": true,
"expires_at": "2024-11-10T15:30:11.000Z"
}
Ответ в случае неверного ключа:
{
"message": "Unauthorized",
"statusCode": 401
}
Ответ в случае устаревшего ключа:
{
"message": "Api key expired",
"error": "Forbidden",
"statusCode": 403
}
Описание ответа:
- message — текст ошибки;
- statusCode — код ошибки.
Генерация {uuid} для платежной ссылки
Создание {uuid} по заданным параметрам в теле запроса
POST sponsr.ru/api/v2/external-api/donate-urls
Headers:
accept: application/json X-API-KEY Content-Type: application/json
Тело запроса:
{
"type": "subscribe",
"level_id": 123,
"period": "monthly"
}
Параметры тела запроса:
- type — тип оплаты (one_time_payment, subscribe);
- level_id — идентификатор уровня, необходимый для подписки. Обязателен, если type = subscribe;
- period — период подписки (monthly, annual). Обязателен, если type = subscribe;
- redirect_url — URL для перенаправления после успешного завершения платежа (планируется в будущем);
- web_hook_url —URL для получения уведомлений о статусе платежа (планируется в будущем).
Пример ответа в случае успеха:
{
"data": {
"donateUrl": "sponsr.ru/api/v2/external-api/payment/e41aeeb2-9a44-4c06-8b82-8ed2f9c1eeef"
}
}
uuid из примера: e41aeeb2-9a44-4c06-8b82-8ed2f9c1eeef
Примеры ответов в случае неудачи:
{
"message": [
"level_id must be a number conforming to the specified constraints"
],
"error": "Bad Request",
"statusCode": 400
}
{
"message": [
"period should not be empty",
"period must be one of the following values: monthly, annual"
],
"error": "Bad Request",
"statusCode": 400
}
{
"message": [
"redirect_url must be a URL address",
"web_hook_url must be a URL address"
],
"error": "Bad Request",
"statusCode": 400
}
Описание ответа:
- message — текст ошибки;
- statusCode — код ошибки;
- error — тип ошибки.
Получение платежной ссылки пользователя
Полученная ссылка используется пользователями для перехода на форму оплаты. Чтобы оплатить пользователю необходимо быть авторизованным на Sponsr
Копируем {uuid} из POST запроса и вставляем в конец запроса
GET sponsr.ru/api/v2/external-api/payment{uuid}?payer_id=123
Headers:
accept: */*
При переходе по URL оплаты ({URL сервиса} + payment/{uuid}) автор может передать GET-параметр payer_id — обозначив какой-либо уникальный идентификатор пользователя перенаправляемого на оплату. После успешного платежа передаваемый параметр payer_id будет отображен для соответствующего юзера в ответе запроса GET subscribers.
В будущем планируется отправление параметра payer_id на web_hook_url вместе с результатом платежа.
Получение списка уровней подписки
Вы можете получить список уровней вашего проекта
GET sponsr.ru/api/v2/external-api/projects/levels
Headers:
accept: application/json X-API-KEY
Query параметры в ссылке:
- offset — пагинационный отступ (вы можете сделать через этот параметр постраничное получение данных, offset = 0 будет означать page = 1);
- limit — лимит записей в ответе;
- orderByType — направление сортировки (asc, desc);
- orderBy — поле сортировки.
Пример запроса:
sponsr.ru/api/v2/external-api/projects/levels?offset=0&limit=1&orderByType=desc&orderBy=level_price
Пример ответа:
{
"total": 12,
"list": [
{
"id": 4369,
"project_id": 1877,
"level_name": "Платина",
"level_description": "Укажите здесь, что получат подписчики уровня. Что входит в стоимость, как часто публикуется контент, какие дополнительные преимущества у подписчиков этого уровня..",
"level_price": "5000",
"level_subscribers": 0,
"level_limit": null,
"level_status": "deleted",
"level_visible": "visible",
"level_can_comment": 0,
"level_comment_disable": 0,
"ts": "2022-11-30T16:08:00.000Z",
"can_comment": false
}
],
"page": 1,
"limit": 1
}
Получение списка подписчиков
Вы можете получить подписчиков вашего проекта и их данные
GET sponsr.ru/api/v2/external-api/projects/subscribers
Headers:
accept: application/json X-API-KEY
Query параметры в ссылке:
- offset — пагинационный отступ (вы можете сделать через этот параметр постраничное получение данных, offset = 0 будет означать page = 1);
- limit — лимит записей в ответе;
- orderByType — направление сортировки (asc, desc);
- orderBy — поле сортировки;
- total_paid — оборот для каждого пользователя (true, false);
- withProviders — подключенные соцсети пользователя (true, false);
- level_id — ID уровня подписки;
- provider — фильтр по подключённому oauth-провайдеру. Указывается строго один провайдер(ok, vk, google, telegram, yandex, mailru, steam);
- provider_mode — фильтр по провайдеру (include — у пользователя провайдер подключён, exclude — не подключён). Работает только вместе с provider.
Пример запроса:
sponsr.ru/api/v2/external-api/projects/subscribers?offset=0&limit=2&orderByType=desc&orderBy=id&level_id=16363&withProviders=true
Пример ответа:
{
"total": 2,
"list": [
{
"id": 168063,
"name": "Testuser123",
"avatar": "/images/avatars/63/168063/avatar.webp",
"telegram_id": "123456",
"subscription_expired": "2025-06-24T10:00:34.000Z",
"last_payment": "2025-05-24T10:00:34.000Z",
"level": {
"id": 16363,
"name": "TestTest",
"level_price": "244"
},
"metadata": {
"payer_id":"123"
}
"withProviders": [
{
"provider": "vk",
"provider_id": "123123"
}
]
},
{
"id": 148169,
"name": "TEST123",
"avatar": "/images/avatars/169/148169/avatar.webp",
"telegram_id": null,
"subscription_expired": "2025-06-24T10:00:34.000Z",
"last_payment": "2025-05-24T10:00:34.000Z",
"level": {
"id": 16363,
"name": "133"
}
}
],
"page": 1,
"limit": 2
}
Публикация поста
Вы можете создать и опубликовать пост в проекте
POST sponsr.ru/api/v2/external-api/post
Headers:
accept: application/json X-API-KEY
Пример тела запроса:
{
"date": "2026-10-23",
"title": "Демо-пост публикации через API",
"text": "<h1>Демо-пост через API</h1>\n<p>Пример публикации через <b>внешний API</b>. Доступны <b>жирный</b>, <i>курсив</i>, <u>подчёркнутый</u>, <s>зачёркнутый</s> и <a href='LINK_URL'>ссылка</a>.</p>\n<h2>Списки</h2>\n<ul><li>Маркированный пункт</li><li>Ещё один пункт</li></ul>\n<ol><li>Нумерованный пункт</li><li>Второй пункт</li></ol>\n<h2>Фото</h2>\n<img src='IMAGE_URL' alt='Описание изображения' width='480'>\n<h2>Видео</h2>\n<iframe width='720' height='405' src='VIDEO_URL' style='border: none;' allowfullscreen></iframe>\n<h2>Цитата и код</h2>\n<blockquote>Цитата автора поста.</blockquote>\n<pre><code>console.log('Привет');</code></pre>\n<hr>\n<p><b>Проверьте: заголовки, списки, фото, видео, цитата и код отображаются корректно.</b></p>",
"is_extended_view": true,
"is_pinned": true,
"is_markdown": false,
"is_notified": false,
"tag_id": [91419, 91420],
"meta_title": "Демо-пост публикации через API",
"meta_description": "SEO-описание страницы"
}
Перед отправкой запроса замените плейсхолдеры на свои ссылки:
- «LINK_URL» — ссылка на внешний ресурс, например:
sponsr.ru
- «IMAGE_URL» — прямая ссылка на изображение, например :
media.sponsr.ru/project/1/post/93635/image/314322/imagesprojects11uunjcj38f6i785e6_original.webp?1760442786744
- «VIDEO_URL» — ссылка на встраиваемое видео, например :
rutube.ru/play/embed/137be5b90abe7af601e12c92119c3ba2
Пример опубликованного поста:
sponsr.ru/projecttest/189902/Demopost_publikacii_cherez_API
Параметры тела запроса:
- level_id — ID уровня подписки. Если параметр не передан, пост будет опубликован как бесплатный и доступный всем пользователям. При передаче level_id доступ к посту получают только пользователи указанного уровня;
- date — дата публикации в формате ISO 8601;
- title — заголовок поста. От 4 до 256 символов;
- text — содержимое поста. От 0 до 150 000 символов;
- is_extended_view — показывать пост в развернутом виде (true / false);
- is_pinned — закрепить пост (true / false);
- is_markdown — применить markdown к тексту (true / false);
- is_notified — не оповещать о публикации поста (true / false)
- tag_id — ID существующей подборки, в которую нужно добавить пост (можно передавать несколько tag_id массивом);
- meta_title — SEO-заголовок страницы. От 1 до 1000 символов;
- meta_description — SEO-описание страницы. От 1 до 1000 символов.
Контент в содержимом поста
Поле «text» позволяет передавать не только текстовые данные, но и медиа-элементы в составе HTML или Markdown.
Изображения вставляются по прямой ссылке на файл изображения, размещенного на платформе Sponsr или на стороннем хостинге.
"text" : "<img src=\"example.com/image.webp\" alt=\"Описание изображения\">"
Видео встраивается через iframe с поддерживаемых сервисов, загружать его не требуется. Список поддерживаемых сервисов : Кинескоп, VK, RuTube, YouTube, Дзен.
"text": "<iframe src=\"rutube.ru/play/embed/123456\" allowfullscreen></iframe>"
Ограничения при публикации поста через API
- прикрепление аудиофайлов, опросов к посту не поддерживается;
- создание галереи изображений не поддерживается. Ссылки на изображения, переданные в поле «text» , выводятся последовательно друг за другом как отдельные элементы.
- тизерную картинку и текст тизера пока что не получится передать через API. Однако, действует правило — в тизерную картинку вставляется первое фото/видео из поста.
- прикрепленные файлы не создаются как отдельные вложения поста. Файл можно добавить только в виде ссылки на предварительно загруженный файл в поле «text» . В посте такой файл отображается как ссылка.
Пример ответа в случае успеха:
{
"data": {
"id": 189250,
"url": "sponsr.ru/projecttest/189250/Demopost_publikacii_cherez_API",
"editor": "sponsr.ru/projecttest/manage/post/189250"
}
Описание ответа:
- id— ID созданного поста;
- url— публичная ссылка на пост;
- editor— ссылка на редактирование поста через UI.
Примеры ответов в случае ошибки:
Указанный уровень подписки не найден:
{
"message" : "Level Not Found" ,
"error" : "Not Found" ,
"statusCode" : 404
}
Слишком короткий заголовок
{
"message" : [
"title must be longer than or equal to 4 characters"
] ,
"error" : "Bad Request" ,
"statusCode" : 400
}
Слишком длинный заголовок
{
"message" : [
"title must be shorter than or equal to 256 characters"
] ,
"error" : "Bad Request" ,
"statusCode" : 400
}
Невалидное значение или отсутствие поля title или text
{
"message" : [
"title must be shorter than or equal to 256 characters" ,
"title must be longer than or equal to 4 characters" ,
"title must be a string" ,
"text must be shorter than or equal to 16777200 characters" ,
"text must be longer than or equal to 0 characters" ,
"text must be a string"
] ,
"error" : "Bad Request" ,
"statusCode" : 400
}
Неверный формат даты
{
"message" : [
"Дата публикации должна быть корректной датой в формате ISO 8601"
] ,
"error" : "Bad Request" ,
"statusCode" : 400
}
Превышена длина поля meta_title
{
"message" : [
"meta_title must be shorter than or equal to 1000 characters"
] ,
"error" : "Bad Request" ,
"statusCode" : 400
}
Превышена длина поля meta_description
{
"message" : [
"meta_description must be shorter than or equal to 1000 characters"
] ,
"error" : "Bad Request" ,
"statusCode" : 400
}
Отправка личного сообщения подписчику
Вы можете отправить личное сообщение конкретному подписчику вашего проекта
POST sponsr.ru/api/v2/external-api/projects/subscribers/message
Headers:
accept: application/json Content-Type: application/json X-API-KEY
Тело запроса:
{
"user_id": 0,
"content": "string"
}
Параметры тела запроса:
- user_id — ID получателя. Получатель должен быть активным подписчиком вашего проекта;
- content — Текст сообщения до 5000 символов.
Пример ответа в случае успеха:
{
"success": true
}
Примеры ответов в случае неудачи:
{
"message": "User is not an active subscriber of the project",
"statusCode": 403
}
{
"message": "content should not be empty",
"error": "Bad Request",
"statusCode": 400
}
{
"message": "Unauthorized",
"statusCode": 401
}