REST API - обзор и быстрый старт
Аутентификация, лимиты, формат ошибок и быстрое начало работы с API
Taipy предоставляет полноценный REST API для интеграции сгенерированного контента в ваши системы: сайты, CMS, мобильные приложения, аналитику и любые внешние сервисы.
Через API вы можете получать проекты и кампании, читать посты со всеми медиа, управлять одобрением публикаций, просматривать расписания и аналитику вовлечённости.
Аутентификация
Передайте API-ключ в заголовке Authorization каждого запроса:
Authorization: Bearer taipy_ваш_ключ_здесьКлюч показывается один раз при создании - сохраните его сразу. Если потеряли - отзовите старый и создайте новый.
Базовый URL
Все эндпоинты расположены по пути:
https://ваш-домен/api/v1/ext/Лимиты запросов
- 60 запросов в минуту на один ключ (чтение)
- 30 запросов в минуту на один ключ (запись: одобрение, отмена)
- 1 000 запросов в час (burst-защита)
- При превышении API вернёт
429 Too Many Requests
Формат ошибок
Все ошибки возвращаются в едином формате:
{{
"error": {{
"code": "not_found",
"message": "Кампания не найдена."
}}
}}Поле code - машиночитаемый идентификатор. Поле message - описание на русском языке, подходящее для показа пользователю.
Группы эндпоинтов
API организован по логическим группам:
- Аккаунт - текущий тариф, квоты, лимиты
- Проекты - список проектов, подключённые каналы
- Кампании - настройки кампаний, расписания
- Посты - контент, версии текста, одобрение/отмена
- Аналитика - метрики вовлечённости (просмотры, лайки, комментарии)
Полный перечень с примерами запросов и ответов - в справочнике эндпоинтов.
Быстрый старт на Python
import requests
API_KEY = "taipy_ВАШ_КЛЮЧ"
BASE = "https://ваш-домен"
headers = {{"Authorization": f"Bearer {{API_KEY}}"}}
# 1. Проверяем аккаунт и квоты
account = requests.get(f"{{BASE}}/api/v1/ext/account/", headers=headers).json()
print(f"Тариф: {{account['plan']['name']}}, постов осталось: {{account['quota']['posts']['remaining']}}")
# 2. Получаем список кампаний
campaigns = requests.get(f"{{BASE}}/api/v1/ext/campaigns/", headers=headers).json()
cid = campaigns["campaigns"][0]["id"]
# 3. Последний пост кампании
post = requests.get(f"{{BASE}}/api/v1/ext/campaigns/{{cid}}/posts/latest", headers=headers).json()
print(post["text"])
# 4. Полные данные поста (версии, аналитика, публикации)
detail = requests.get(f"{{BASE}}/api/v1/ext/posts/{{post['task_id']}}/", headers=headers).json()
print(f"Просмотры: {{detail['engagement'].get('VIEWS', {{}})}}")
# 5. Скачиваем медиа (ссылки временные - 24 часа)
if post.get("media"):
for img in post["media"].get("images", []):
r = requests.get(img["url"], timeout=30)
# Сохраните r.content на свой серверБыстрый старт на JavaScript
const API_KEY = "taipy_ВАШ_КЛЮЧ";
const BASE = "https://ваш-домен";
const headers = {{ "Authorization": `Bearer ${{API_KEY}}` }};
// 1. Аккаунт и квоты
const account = await fetch(`${{BASE}}/api/v1/ext/account/`, {{ headers }}).then(r => r.json());
console.log(`Тариф: ${{account.plan.name}}`);
// 2. Кампании
const {{ campaigns }} = await fetch(`${{BASE}}/api/v1/ext/campaigns/`, {{ headers }}).then(r => r.json());
// 3. Последний пост
const post = await fetch(
`${{BASE}}/api/v1/ext/campaigns/${{campaigns[0].id}}/posts/latest`,
{{ headers }}
).then(r => r.json());
console.log(post.text);
// 4. Одобрение поста (для постов в статусе WAITING_APPROVAL)
const result = await fetch(`${{BASE}}/api/v1/ext/posts/${{post.task_id}}/approve`, {{
method: "POST", headers
}}).then(r => r.json());
console.log(result.status); // "APPROVED"Пагинация
Списки постов поддерживают пагинацию через limit и offset:
GET /api/v1/ext/campaigns/42/posts/?limit=10&offset=20Ответ содержит поле total - общее количество записей, удовлетворяющих фильтру. Это позволяет рассчитать количество страниц.
Инкрементальный синк
Для получения только обновлённых данных используйте параметр since (ISO 8601):
GET /api/v1/ext/campaigns/42/posts/?since=2026-04-10T00:00:00%2B05:00Вернёт только посты, обновлённые после указанного времени.
Коды ответов
Успешный запрос
Недействительный или отсутствующий API-ключ
Подписка не активна или функция недоступна на тарифе
Ресурс не найден (кампания, пост, проект)
Конфликт состояния (например, одобрение уже опубликованного поста)
Превышен лимит запросов (Rate Limit)
Была ли эта статья полезной?
Спасибо за обратную связь!