Документация API
Подключите SiberMakale к вашему собственному приложению, сайту или средствам автоматизации (Zapier, Make, n8n): создавайте статьи, отслеживайте их статус, получайте контент в формате HTML / Markdown.
🚀 Быстрый старт
- Создать бесплатный аккаунт или войдите, затем создайте API-ключ на этой странице.
POST ?r=articlesи отправьте тему и ключевые слова.GET ?r=jobs&id=…и опрашивайте, пока статус не станет «done».GET ?r=article&id=…получите статью целиком с помощью
Базовый адрес: https://sibermakale.info/api/v1.php · Все ответы в JSON (UTF-8) · Для каждой статьи списывается 1 лимит(а) статей.
🔑 Ваши API-ключи
Войдите в систему, чтобы создать ключ API.
Войти Бесплатная регистрацияНи с кем не делитесь своим ключом и не размещайте его в общедоступном коде, выполняемом в браузере; храните его на стороне сервера. Ключ хранится только в виде хеша, мы тоже не имеем к нему доступа.
🛡 Аутентификация
Передавайте ключ в каждом запросе Authorization в заголовке:
Authorization: Bearer sm_ANAHTARINIZ
Альтернатива: X-API-Key: sm_ANAHTARINIZ
📡 Эндпоинты
?r=meИнформация об аккаунте и балансы (лимит статей, кредиты инструментов, окончание срока действия безлимитного пакета).
Пример ответа
{"ok":true,"user":{"id":12,"name":"Ayşe","email":"ayse@ornek.com","article_credits":18,"tool_credits":5,"unlimited_until":null}}?r=optionsСписок доступных значений языка, тональности, длины, типа контента, изображений и акцентов.
Пример ответа
{"ok":true,"options":{"language":["tr","en","de",…],"tone":["profesyonel",…],"length":[500,1000,1500,…],…}}?r=articlesЗапускает задачу создания статьи. Каждая статья использует 1 лимит статей; лимит за статьи с ошибкой возвращается автоматически. Сведения о параметрах тела запроса см. ниже.
Пример ответа
{"ok":true,"job":{"id":345,"status":"planning","total":1,"done":0,"articles":[{"id":901,"status":"pending","title":""}]}}?r=jobs&id=345Статус задачи. Каждый запрос продвигает задачу на один шаг; опрашивайте статус каждые 10–20 секунды, пока статус не станет «done» (или используйте webhook_url).
Пример ответа
{"ok":true,"job":{"id":345,"status":"done","total":1,"done":1,"articles":[{"id":901,"status":"done","title":"Kahve Makinesi Nasıl Seçilir?","word_count":1540,"originality":96.4}]}}?r=articles&limit=20Последние готовые статьи (до 100).
Пример ответа
{"ok":true,"articles":[{"id":901,"job_id":345,"title":"…","slug":"kahve-makinesi-nasil-secilir","word_count":1540}]}?r=article&id=901&format=htmlПолный текст статьи. format: html (по умолчанию), markdown или text.
Пример ответа
{"ok":true,"article":{"id":901,"title":"…","seo_title":"…","meta_description":"…","slug":"…","format":"html","content":"<h2>…</h2><p>…</p>"}}🧩 Параметры статьи (POST ?r=articles)
Тело JSON (Content-Type: application/json) или отправлены как форма.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
topic | текст | Да* | Тема статьи / идея заголовка (не менее 3 символов). |
topics | массив / строки | Нет | Массовое написание: каждый элемент — отдельная статья (макс. 10). Если указано, используется вместо topic. |
keywords | массив / текст через запятую | Да | Ключевые слова (1–10). |
language | текст | Нет | Код языка, напр. tr, en, de. По умолчанию tr. |
length | число | Нет | Целевой объём (options → length). По умолчанию 1000. |
tone | текст | Нет | Тон текста (options → tone). По умолчанию профессиональный. |
content_type | текст | Нет | Тип контента: блог, руководство, список, сравнение… (options → content_type). |
seo | bool | Нет | SEO-оптимизация. В API по умолчанию включено. |
highlight | сериал | Нет | Шаблоны выделения (options → highlight). |
faq / toc / takeaways / aeo / citations | bool | Нет | FAQ, оглавление, ключевые моменты, оптимизация под ИИ-поиск, источники. |
image_strategy | текст | Нет | none (по умолчанию), ai или web (options → image_strategy). |
images_per_article | число | Нет | 1–5 изображений. |
use_brand | bool | Нет | Писать по данным профиля бренда. |
link_url | текст | Нет | Ваш сайт для ссылок в статье. |
webhook_url | адрес https | Нет | После завершения результат отправляется на этот адрес методом POST в формате JSON. |
* Требуется topic или topics.
🔄 Типичный сценарий
В зависимости от настроек статья обычно готова за 1–4 мин. Статус задачи: planning, running, done, failed. Статус статьи: pending, running, done, failed.
🪝 Webhook
Вместо опроса webhook_url если укажете, по завершении задачи на ваш адрес будет отправлено следующее тело запроса: POST :
{"event":"job.done","job":{"id":345,"status":"done","total":1,"done":1,"articles":[…]}}
Проверка: X-SiberMakale-Signature заголовок, текста HMAC-SHA256 подпись; в качестве ключа используется хэш SHA-256 API-ключа, запустившего задачу:
hash_hmac('sha256', $govde, hash('sha256', $apiAnahtari)). Задача выполняется в фоновом режиме, даже если вы её не опрашиваете, и по завершении отправляется webhook (только https-адреса).
💻 Примеры кода
curl -X POST "https://sibermakale.info/api/v1.php?r=articles" \
-H "Authorization: Bearer sm_ANAHTARINIZ" \
-H "Content-Type: application/json" \
-d '{"topic":"Kahve makinesi nasıl seçilir","keywords":["kahve makinesi","espresso"],"language":"tr","length":1500,"faq":true}'
<?php
$key = 'sm_ANAHTARINIZ';
$api = 'https://sibermakale.info/api/v1.php';
$call = function (string $route, ?array $body = null) use ($key, $api) {
$ch = curl_init($api . '?r=' . $route);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 320,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $key, 'Content-Type: application/json']]);
if ($body) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body)); }
return json_decode(curl_exec($ch), true);
};
$job = $call('articles', ['topic' => 'Kahve makinesi nasıl seçilir', 'keywords' => ['kahve makinesi']])['job'];
do { sleep(15); $job = $call('jobs&id=' . $job['id'])['job']; } while (!in_array($job['status'], ['done', 'failed']));
foreach ($job['articles'] as $a) {
$art = $call('article&id=' . $a['id'])['article'];
echo $art['title'], "\n", $art['content'];
}
const KEY = 'sm_ANAHTARINIZ';
const API = 'https://sibermakale.info/api/v1.php';
const call = (route, body) => fetch(`${API}?r=${route}`, {
method: body ? 'POST' : 'GET',
headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
body: body ? JSON.stringify(body) : undefined,
}).then(r => r.json());
let { job } = await call('articles', { topic: 'Kahve makinesi nasıl seçilir', keywords: ['kahve makinesi'] });
while (!['done', 'failed'].includes(job.status)) {
await new Promise(r => setTimeout(r, 15000));
({ job } = await call(`jobs&id=${job.id}`));
}
console.log(job.articles);
import requests, time
KEY = 'sm_ANAHTARINIZ'
API = 'https://sibermakale.info/api/v1.php'
H = {'Authorization': f'Bearer {KEY}'}
job = requests.post(f'{API}?r=articles', headers=H, json={'topic': 'Kahve makinesi nasıl seçilir', 'keywords': ['kahve makinesi']}).json()['job']
while job['status'] not in ('done', 'failed'):
time.sleep(15)
job = requests.get(f"{API}?r=jobs&id={job['id']}", headers=H, timeout=320).json()['job']
for a in job['articles']:
art = requests.get(f"{API}?r=article&id={a['id']}&format=markdown", headers=H).json()['article']
print(art['title'], art['content'][:200])
⚠ Коды ошибок
{"ok":false,"error":{"type":"invalid_request","message":"En az bir anahtar kelime girin."}}
| HTTP | type | Значение |
|---|---|---|
| 401 | unauthorized | Ключ отсутствует или недействителен. |
| 402 | insufficient_credits | Недостаточно статей. |
| 404 | not_found | Задание / статья не найдены или нет эндпоинта. |
| 422 | invalid_request | Отсутствует или неверный параметр (подробности в сообщении). |
| 429 | rate_limited | Превышен лимит в 60 запросов в минуту (см. заголовок Retry-After). |
| 500 | server_error | Непредвиденная ошибка; попробуйте снова. |
📏 Лимиты и тарификация
- 60 запросов в минуту (на ключ).
- Не более 10 статей за один запрос; каждая статья расходует 1 квоту статей. Для безлимитных тарифов действует суточный лимит добросовестного использования.
- Сам API бесплатен; списываются только созданные статьи из квоты. О тарифах см. пакеты страницу.