Разработка и API 6 мин чтения

REST API - обзор и быстрый старт

Аутентификация, лимиты, формат ошибок и быстрое начало работы с API

Taipy предоставляет полноценный REST API для интеграции сгенерированного контента в ваши системы: сайты, CMS, мобильные приложения, аналитику и любые внешние сервисы.

Через API вы можете получать проекты и кампании, читать посты со всеми медиа, управлять одобрением публикаций, просматривать расписания и аналитику вовлечённости.

Для работы с API необходим тариф с доступом к Developer API. Создайте ключ на странице Разработчикам / API в личном кабинете.

Аутентификация

Передайте API-ключ в заголовке Authorization каждого запроса:

Authorization: Bearer taipy_ваш_ключ_здесь

Ключ показывается один раз при создании - сохраните его сразу. Если потеряли - отзовите старый и создайте новый.

Никогда не передавайте API-ключ в URL, query-параметрах или клиентском JavaScript. Храните его только на сервере.

Базовый 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

Вернёт только посты, обновлённые после указанного времени.

Коды ответов

200

Успешный запрос

401

Недействительный или отсутствующий API-ключ

403

Подписка не активна или функция недоступна на тарифе

404

Ресурс не найден (кампания, пост, проект)

409

Конфликт состояния (например, одобрение уже опубликованного поста)

429

Превышен лимит запросов (Rate Limit)