Prihlásiť sa Začať bezplatnú skúšobnú verziu

Stiahnite si svoje články.
Zverejnite ich po svojom.

Každý článok, ktorý pre Vás napíšeme, možno čítať cez HTTP: nadpis, metadáta, Markdown, HTML, hlavný obrázok aj FAQ. Pri spustení buildu ich vezmite do svojho webu v Next.js, Astro alebo vlastného webu, zverejnite ich a oznámte nám adresu, na ktorej každý z nich skončil.

Jeden bearer token. JSON vstup, JSON výstup. Žiadne SDK na inštaláciu a nič na nastavovanie okrem kľúča.

Webhook odosiela. API Vám umožňuje načítavať.

Nesú ten istý článok v rovnakom formáte, takže parser napísaný pre jedno prečíta aj druhé bez zmien. Rozdiel je v tom, kto začína komunikáciu.

Webhook, keď Váš web môže prijať príspevok kedykoľvek

Váš endpoint zavoláme v momente, keď je článok pripravený, a znova, keď sa zmení. Netreba nič kontrolovať ani plánovať. WordPress, Shopify, Ghost, spúšťač v Zapieri alebo trasa, ktorú ste si napísali sami.

API, keď sa Váš web zostavuje a nasadzuje ako celok

Statický web nemôže prijať príspevok o pol siedmej ráno, najprv sa musí niečo znovu zostaviť. Váš build sa preto spýta, čo čaká, prevezme to a potom nám oznámi adresu. Vy určíte, kedy.

Oboje, ak ich chcete

Sú to samostatné prepojenia a ani jedno nevylučuje druhé. Webhook, ktorý napája newsletter, a API, ktoré napája web, je bežné usporiadanie.

Jeden kľúč, odoslaný ako bearer token.

Vytvorte kľúč v prehľade v časti Settings, potom Connections. Zobrazí sa iba raz, pri vytvorení, pretože sa ukladá len jeho hash: ak ho stratíte, zrušte ho a vytvorte ďalší. Kľúč číta každý web v účte a ruší sa na tej istej obrazovke.

Každá požiadavka

Authorization: Bearer sns_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/json

Skontrolujte, ž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žiadaviek

120 požiadaviek za minútu, počítaných podľa kľúča, nie podľa adresy, z ktorej prichádzajú, pretože build runnery zdieľajú adresy. Nad tento limit dostanete 429 so štandardnými hlavičkami Retry-After a X-RateLimit. Na stiahnutie článkov pre build stačí niekoľko požiadaviek, takže na tento limit by ste nemali naraziť omylom.

Nedávajte kľúč do svojho repozitára

Číta všetko, čo sme napísali pre Váš účet, vrátane článkov, ktoré ešte nie sú zverejnené. Dajte ho do svojho build prostredia, nie do zdrojového kódu. Zrušte ho tu hneď, ako sa objaví niekde, kde nemá byť, a všetko, čo ho používa, okamžite dostane 401.

Je ich päť a štyri sú len na čítanie.

Všetko je pod /api/v1/. Verzia je v ceste od prvého dňa, takže raz môže existovať v2 bez toho, aby pokazila to, čo napíšete dnes.

GET /api/v1/me

Účet, ku ktorému kľúč patrí, a vlastný názov a prefix kľúča. Užitočné najmä na jednu vec: aby ste vedeli, že kľúč v tomto prostredí je ten, za ktorý ho považujete.

Príklad

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

Každý web v účte. id je to, podľa čoho sa filtruje zoznam článkov, a doména je tam preto, aby build skript mohol porovnávať podľa niečoho, čo už pozná, namiesto toho, aby niesol id.

Prí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ánkov, najnovšia zmena ako prvá, bez obsahu. Zoradené podľa toho, kedy sa ktorý článok naposledy zmenil, nie podľa toho, kedy bol napísaný, a práve preto má updated_since zmysel: článok, ktorý už je zverejnený, možno neskôr upraviť, keď sa doň vloží odkaz alebo sa z neho odstráni.

Parametre dotazu

Názov Čo robí
site_id Jeden web, z /sites. id, ktoré nie je vo Vašom účte, vráti 404.
status Jedna z hodnôt draft, qa, needs_repair, review, ready, published, failed. Čokoľvek iné vráti 422 namiesto prázdnej stránky. "ready" je to, čo build potrebuje: napísané, skontrolované a ešte nikde nezverejnené.
updated_since ISO 8601, napríklad 2026-09-06T00:00:00Z. Zapamätajte si časovú značku posledného spustenia a pri ďalšom ju odošlite späť.
per_page Najviac 100. Predvolená hodnota je 25.
page Od 1. meta.has_more určuje, či sa má žiadať ďalšia.

Prí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ánok so všetkým, čo zoznam vynecháva: content_markdown, content_html, FAQ ako schema.org JSON-LD pripravené na vloženie do stránky a všetky výmenné odkazy, ktoré článok obsahuje.

Názvy polí sú zámerne rovnaké ako tie, ktoré posiela náš webhook. Ak už máte prijímač webhookov, ten istý parser prečíta aj toto.

Prí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

Tu článok zverejníte; tu nám oznámite adresu. Je to jediný endpoint, ktorý niečo mení.

Urobí presne to isté ako doručenie, ktoré vykonáme sami: článok sa označí ako zverejnený, započíta sa do Vášho mesačného limitu, položka plánu sa uzavrie, všetky výmenné odkazy v ňom dostanú adresu, na ktorú čakal overovač, a Vaša Facebook Page dostane oznámenie, ak ste ju pripojili. Bez tohto volania zostane článok navždy pripravený a nič z toho sa nestane.

Prí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"}'

Odpovede

200 Zaznamenané. Článok sa vráti s novým stavom, published_at a published_url.
422 Chýba url alebo to nie je úplná adresa http:// alebo https://.
409 Článok nie je pripravený na publikovanie alebo je už evidovaný ako publikovaný. Článok sa vráti spolu s odmietnutím, takže vidíte, čo z toho platí.

Pripojte "REST API" ako svoj publikačný mechanizmus.

V časti Settings, potom Publishing, je modul s názvom "REST API: Vy načítate a publikujete". Nepýta si nič, pretože nemáme čo odosielať. Mení to to, čo sa deje každé ráno: hotový článok zostane pripravený bez adresy a obrazovka publikovania uvádza, že čaká, kým ho načítate, namiesto zobrazenia neúspešného doručenia.

API môžete používať aj bez jeho pripojenia: endpointy fungujú pre každý účet s kľúčom. Pripojenie je spôsob, ako zvyšok produktu zistí, že už nemá očakávať vlastnú adresu, a zároveň zabráni tomu, aby sa článok, ktorý publikujete sami, počítal ako zlyhanie.

Každé zlyhanie je JSON so správou.

Všade rovnaký formát, či odmietnutie prišlo z kontroly kľúča alebo z validátora, takže netreba spracúvať dva.

{ "message": "That API key is not valid, or it has been revoked." }
Stav Čo to znamená
401 Žiadny kľúč, kľúč, ktorý nie je náš, alebo kľúč, ktorý bol zrušený.
404 V tomto účte taký článok ani web neexistuje. Článok iného účtu vracia 404 namiesto 403: API, ktoré povie "to nie je Vaše", potvrdilo, že tá vec existuje.
409 Požiadavka bola v poriadku, ale článok nie je v stave, ktorý to umožňuje.
422 Parameter chýba alebo je nesprávny. Odpoveď obsahuje objekt errors s názvom poľa aj správou.
429 Prekročený limit požiadaviek. Retry-After určuje, ako dlho čakať.

Čo krok zostavenia skutočne robí.

#!/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

Vytvorte kľúč a vyskúšajte to.

Skúšobná verzia stačí na čítanie API: články vytvorené počas nej sú skutočné články a vracajú sa cez tieto endpointy ako všetky ostatné.

Začať bezplatnú skúšobnú verziu