Přihlásit se Začít bezplatné zkušební období

Načtěte si své články.
Publikujte je po svém.

Každý článek, který pro Vás napíšeme, lze číst přes HTTP: nadpis, metadata, Markdown, HTML, hlavní obrázek i FAQ. Při spuštění buildu je načtěte do svého webu v Next.js, Astro nebo vlastního webu, zveřejněte je a sdělte nám adresu, na které každý z nich skončil.

Jeden bearer token. JSON dovnitř, JSON ven. Žádné SDK k instalaci a nic k nastavování kromě klíče.

Webhook odesílá. API vám umožňuje načítat.

Nesou stejný článek ve stejné podobě, takže parser napsaný pro jedno beze změny přečte i druhé. Rozdíl je v tom, kdo zahajuje komunikaci.

Webhook, když váš web může kdykoli přijmout příspěvek

Zavoláme váš endpoint ve chvíli, kdy je článek připravený, a znovu, když se změní. Není co dotazovat, není co plánovat. WordPress, Shopify, Ghost, trigger v Zapieru nebo cesta, kterou jste si napsali sami.

API, když se váš web sestavuje a nasazuje jako celek

Statický web nemůže přijmout příspěvek v půl sedmé ráno, nejdřív se musí něco znovu sestavit. Váš build se tedy zeptá, co čeká, převezme to a potom nám sdělí adresu. Kdy se to stane, určujete Vy.

Obojí, pokud je chcete

Jsou to samostatná propojení a jedno nevylučuje druhé. Webhook, který plní newsletter, a API, které plní web, je běžné uspořádání.

Jeden klíč, posílaný jako bearer token.

Vytvořte klíč v dashboardu v části Settings, potom Connections. Zobrazí se jen jednou, při vytvoření, protože se ukládá jen jeho hash: pokud ho ztratíte, zneplatněte ho a vytvořte nový. Klíč čte všechny weby v účtu a zneplatňuje se na stejné obrazovce.

Každý požadavek

Authorization: Bearer sns_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/json

Ověřte, že to funguje

curl https://seonis.ai/api/v1/me \
  -H "Authorization: Bearer $SEONIS_API_KEY"
{
  "organisation": { "id": 12, "name": "Peppervale", "country": "GB" },
  "key": {
    "name": "Production build",
    "prefix": "sns_live_ab",
    "created_at": "2026-09-06T09:12:44+00:00",
    "last_used_at": "2026-09-06T09:31:02+00:00"
  },
  "sites": 2
}

Limit požadavků

120 požadavků za minutu, počítaných podle klíče, ne podle adresy, ze které přichází, protože build runnery sdílejí adresy. Nad tento limit dostanete 429 se standardními hlavičkami Retry-After a X-RateLimit. Načtení článků pro build je jen několik požadavků, takže na tento limit byste neměli narazit omylem.

Nedávejte klíč do svého repozitáře

Čte vše, co jsme pro Váš účet napsali, včetně článků, které ještě nejsou zveřejněné. Dejte ho do svého build prostředí, ne do zdrojového kódu. Jakmile se objeví někde, kde být nemá, tady ho zneplatněte a vše, co ho používá, okamžitě dostane 401.

Je jich pět a čtyři jsou jen pro čtení.

Vše je pod /api/v1/. Verze je v cestě od prvního dne, takže jednou může existovat v2, aniž by rozbila to, co napíšete dnes.

GET /api/v1/me

Účet, ke kterému klíč patří, a vlastní název a prefix klíče. Hodí se hlavně k jedné věci: řekne vám, že klíč v tomto prostředí je ten klíč, který si myslíte, že to je.

Příklad

curl https://seonis.ai/api/v1/me \
  -H "Authorization: Bearer $SEONIS_API_KEY"
GET /api/v1/sites

Každý web v účtu. id je to, podle čeho seznam článků filtruje, a doména je tu proto, aby build skript mohl párovat podle něčeho, co už zná, místo aby nesl id.

Příklad

curl https://seonis.ai/api/v1/sites \
  -H "Authorization: Bearer $SEONIS_API_KEY"
{
  "sites": [
    {
      "id": 5,
      "name": "Peppervale",
      "domain": "peppervale.co.uk",
      "url": "https://peppervale.co.uk",
      "language": "en",
      "country": "GB",
      "market": "en-GB",
      "status": "active",
      "articles_published": 34,
      "created_at": "2026-06-02T11:04:19+00:00"
    }
  ]
}
GET /api/v1/articles

Stránka článků, nejnovější změna jako první, bez obsahu. Řazeno podle toho, kdy se který článek naposledy změnil, ne kdy byl napsán, a právě proto má updated_since smysl: článek, který už je zveřejněný, lze později upravit, když se do něj vloží odkaz nebo se z něj zase odebere.

Parametry dotazu

Název Co dělá
site_id Jeden web, z /sites. id, které není ve Vašem účtu, vrací 404.
status Jedna z hodnot draft, qa, needs_repair, review, ready, published, failed. Cokoli jiného vrátí 422 místo prázdné stránky. "ready" je to, co build chce: napsáno, zkontrolováno a ještě nikde.
updated_since ISO 8601, například 2026-09-06T00:00:00Z. Zapamatujte si časové razítko posledního běhu a při dalším ho pošlete zpět.
per_page Až do 100. Výchozí hodnota je 25.
page Od 1. meta.has_more říká, zda si vyžádat další.

Příklad

curl -G https://seonis.ai/api/v1/articles \
  -H "Authorization: Bearer $SEONIS_API_KEY" \
  -d site_id=5 \
  -d status=ready \
  -d updated_since=2026-09-01T00:00:00Z \
  -d per_page=50
{
  "articles": [
    {
      "id": 918,
      "site_id": 5,
      "language": "en",
      "status": "ready",
      "title": "How to choose a pepper grinder",
      "slug": "how-to-choose-a-pepper-grinder",
      "meta_title": "How to choose a pepper grinder | Peppervale",
      "meta_description": "Burr or blade, ceramic or steel: what matters in a grinder.",
      "meta_keywords": ["pepper grinder", "burr grinder"],
      "tags": ["Kitchen"],
      "excerpt": "A burr grinder gives an even grind; a blade one does not.",
      "key_takeaways": ["A burr grinder gives an even grind; a blade one does not."],
      "faq": [{ "question": "Ceramic or steel?", "answer": "Steel for pepper, ceramic for salt." }],
      "hero_image": { "url": "https://seonis.ai/storage/images/5/918.jpg", "alt": "A pepper grinder" },
      "infographic_url": null,
      "word_count": 1812,
      "published_url": null,
      "published_at": null,
      "updated_at": "2026-09-06T06:31:12+00:00",
      "created_at": "2026-09-05T02:14:55+00:00",
      "quality": { "seo_score": 88, "language_score": 96, "language_findings": [] }
    }
  ],
  "meta": { "page": 1, "per_page": 50, "total": 1, "last_page": 1, "has_more": false }
}
GET /api/v1/articles/{id}

Jeden článek se vším, co seznam vynechává: content_markdown, content_html, FAQ jako schema.org JSON-LD připravené k vložení do stránky a všechny výměnné odkazy, které článek obsahuje.

Názvy polí jsou záměrně stejné jako ty, které posílá náš webhook. Pokud už máte přijímač webhooku, stejný parser přečte i toto.

Příklad

curl https://seonis.ai/api/v1/articles/918 \
  -H "Authorization: Bearer $SEONIS_API_KEY"
{
  "article": {
    "id": 918,
    "site_id": 5,
    "language": "en",
    "status": "ready",
    "title": "How to choose a pepper grinder",
    "slug": "how-to-choose-a-pepper-grinder",
    "meta_description": "Burr or blade, ceramic or steel: what matters in a grinder.",
    "content_markdown": "Grinders differ.\n\n## Burr or blade\n\nA **burr** grinder ...",
    "content_html": "<p>Grinders differ.</p>\n<h2>Burr or blade</h2> ...",
    "faq_schema": { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [] },
    "hero_image": { "url": "https://seonis.ai/storage/images/5/918.jpg", "alt": "A pepper grinder" },
    "word_count": 1812,
    "published_url": null,
    "updated_at": "2026-09-06T06:31:12+00:00",
    "quality": { "seo_score": 88, "language_score": 96, "language_findings": [] },
    "exchange_links": []
  }
}
POST /api/v1/articles/{id}/published

Zveřejníte článek; tady nám sdělíte adresu. Je to jediný endpoint, který něco mění.

Udělá přesně to, co doručení provedené námi: článek se označí jako published, započítá se do Vašeho měsíčního limitu, položka plánu se uzavře, všechny výměnné odkazy v něm dostanou adresu, na kterou ověřovač čekal, a Vaše Facebook Page dostane informaci, pokud jste ji připojili. Bez tohoto volání zůstane článek navždy ve stavu ready a nic z toho se nestane.

Příklad

curl -X POST https://seonis.ai/api/v1/articles/918/published \
  -H "Authorization: Bearer $SEONIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://peppervale.co.uk/blog/how-to-choose-a-pepper-grinder"}'

Odpovědi

200 Zaznamenáno. Článek se vrátí se svým novým stavem, published_at a published_url.
422 URL chybí nebo není úplná adresa http:// nebo https://.
409 Článek není připravený k publikování nebo už je vedený jako publikovaný. Článek se vrátí spolu s odmítnutím, takže vidíte, který to je.

Připojte "REST API" jako svůj publikační engine.

V Nastavení, potom v Publikování, je modul s názvem "REST API: vy načtete a publikujete". Neptá se na nic, protože od nás není co posílat. Mění to, co se děje každé ráno: hotový článek zůstane připravený bez adresy a obrazovka publikování říká, že čeká, až si ho načtete, místo aby ukazovala neúspěšné doručení.

API můžete používat i bez jeho připojení: endpointy fungují pro jakýkoli účet s klíčem. Připojení je způsob, jak zbytek produktu pozná, že už nemá očekávat vlastní adresu, a právě to zabrání tomu, aby se článek, který publikujete sami, počítal jako selhání.

Každé selhání je JSON se zprávou.

Všude stejný tvar, ať odmítnutí přišlo z kontroly klíče nebo z validátoru, takže není třeba parsovat dva.

{ "message": "That API key is not valid, or it has been revoked." }
Stav Co to znamená
401 Žádný klíč, klíč, který není náš, nebo klíč, který byl zneplatněn.
404 V tomto účtu takový článek ani web není. Článek jiného účtu vrací 404 místo 403: API, které říká "to není Vaše", tím potvrzuje, že ta věc existuje.
409 Požadavek byl v pořádku, ale článek pro to není ve správném stavu.
422 Parametr chybí nebo je chybný. Odpověď obsahuje objekt errors s názvem pole i zprávou.
429 Překročen limit požadavků. Retry-After říká, jak dlouho čekat.

Co krok sestavení skutečně dělá.

#!/usr/bin/env bash
set -euo pipefail

# 1. What is finished and not yet on the site?
ready=$(curl -sG https://seonis.ai/api/v1/articles \
  -H "Authorization: Bearer $SEONIS_API_KEY" \
  -d site_id=5 -d status=ready -d per_page=100)

for id in $(echo "$ready" | jq -r '.articles[].id'); do
  # 2. Take the article, body and all.
  curl -s https://seonis.ai/api/v1/articles/$id \
    -H "Authorization: Bearer $SEONIS_API_KEY" \
    | jq -r '.article.content_markdown' > "content/posts/$id.md"

  # 3. Your build puts it live, and you know where it landed.
  slug=$(echo "$ready" | jq -r ".articles[] | select(.id==$id) | .slug")

  curl -s -X POST https://seonis.ai/api/v1/articles/$id/published \
    -H "Authorization: Bearer $SEONIS_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"url\": \"https://peppervale.co.uk/blog/$slug\"}"
done

Vytvořte klíč a vyzkoušejte to.

Zkušební verze stačí k používání API: články napsané během ní jsou skutečné články a vracejí se přes tyto endpointy jako všechny ostatní.

Začít bezplatné zkušební období