A webhook, amikor a webhelye bármikor tud fogadni bejegyzést
Meghívjuk a végpontját, amint egy cikk elkészül, majd újra, amikor változik. Nincs mit lekérdezni, nincs mit ütemezni. WordPress, Shopify, Ghost, egy Zapier trigger vagy egy saját útvonal.
Minden Önnek írt cikkünk elérhető HTTP-n keresztül: a cím, a metaadatok, a Markdown, a HTML, a kiemelt kép és a GYIK. Vegye át őket a Next.js, Astro vagy egyedi oldalába, amikor a build fut, tegye őket élesbe, és mondja meg nekünk, melyik végül milyen címen jelent meg.
Egy bearer token. JSON be, JSON ki. Nincs telepítendő SDK, és egy kulcson kívül semmit nem kell beállítani.
Ugyanazt a cikket ugyanabban a formában viszik, ezért az egyikhez írt parser a másikat is változtatás nélkül beolvassa. A különbség az, hogy ki kezdi a kommunikációt.
Meghívjuk a végpontját, amint egy cikk elkészül, majd újra, amikor változik. Nincs mit lekérdezni, nincs mit ütemezni. WordPress, Shopify, Ghost, egy Zapier trigger vagy egy saját útvonal.
Egy statikus oldal nem tud reggel fél hétkor fogadni egy bejegyzést, előbb valaminek újra kell buildelnie. Ezért a buildje megkérdezi, mi várakozik, átveszi, majd utána megadja nekünk a címet. Ön dönti el, mikor.
Ezek külön kapcsolatok, és egyik sem zárja ki a másikat. Teljesen megszokott felállás, hogy egy webhook a hírlevelet, egy API pedig a webhelyet látja el.
Hozzon létre egy kulcsot a vezérlőpulton a Beállítások, majd a Kapcsolatok alatt. Csak egyszer jelenik meg, létrehozáskor, mert csak a hashét tároljuk: ha elveszíti, vonja vissza, és hozzon létre egy másikat. Egy kulcs a fiók összes oldalát olvassa, és ugyanerről a képernyőről vonható vissza.
Minden kérés
Authorization: Bearer sns_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Accept: application/json
Ellenőrizze, hogy működik
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
}
Sebességkorlát
Percenként 120 kérés, a kulcshoz számolva, nem ahhoz a címhez, ahonnan érkezik, mert a build futtatók megosztják a címeket. E fölött 429 választ kap a szabványos Retry-After és X-RateLimit fejlécekkel. A cikkek lekérése egy buildhez csak néhány kérés, ezért ezt a korlátot nem kellene véletlenül elérnie.
Tartsa a kulcsot távol a repositoryjától
Elolvassa mindazt, amit a fiókjához írtunk, beleértve a még nem közzétett cikkeket is. Tegye a build környezetébe, ne a forráskódba. Itt azonnal vonja vissza, amint olyan helyre kerül, ahol nem szabadna lennie, és minden, ami használja, rögtön 401-et kap.
Minden a /api/v1/ alatt található. A verzió az első naptól az útvonal része, így egy v2 később létezhet anélkül, hogy megtörné azt, amit ma ír.
Az a fiók, amelyhez a kulcs tartozik, valamint a kulcs saját neve és előtagja. Erre mindenekelőtt azért hasznos, hogy jelezze Önnek: ebben a környezetben valóban az a kulcs van, amelyre gondol.
Példa
curl https://seonis.ai/api/v1/me \ -H "Authorization: Bearer $SEONIS_API_KEY"
A fiók összes oldala. Az id alapján szűr a cikklista, a domain pedig azért van ott, hogy egy build script olyasmire illeszthessen, amit már ismer, ne kelljen id-t vinnie magával.
Példa
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"
}
]
}
Egy oldalnyi cikk, a legfrissebb módosítással kezdve, a szöveg nélkül. A sorrend az utolsó módosítás ideje szerint van, nem az írás ideje szerint, ezért hasznos az updated_since: egy már élő cikk később is szerkeszthető, ha egy link bekerül vagy kikerül belőle.
Lekérdezési paraméterek
| Név | Mit csinál |
|---|---|
| site_id | Egy oldal, a /sites alól. Egy olyan id, amely nincs a fiókján, 404-et ad. |
| status | A következők egyike: draft, qa, needs_repair, review, ready, published, failed. Bármi más 422-t ad, nem üres oldalt. A "ready" az, amit egy build szeretne: megírva, ellenőrizve, és még sehol sincs kint. |
| updated_since | ISO 8601, például 2026-09-06T00:00:00Z. Jegyezze meg az utolsó futás időbélyegét, és adja vissza a következőnél. |
| per_page | Legfeljebb 100. Az alapértelmezett érték 25. |
| page | 1-től. A meta.has_more jelzi, hogy kell-e újabbat kérni. |
Példa
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 }
}
Egy cikk, mindazzal, amit a lista kihagy: content_markdown, content_html, a GYIK schema.org JSON-LD formában, készen az oldalba illesztésre, valamint a cikkben lévő összes cserehivatkozás.
A mezőnevek szándékosan ugyanazok, mint amelyeket a webhookunk küld. Ha már van webhookfogadója, ugyanaz a parser ezt is beolvassa.
Példa
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": []
}
}
Ön teszi közzé a cikket, itt adja meg nekünk a címet. Ez az egyetlen végpont, amely bármit megváltoztat.
Pontosan azt teszi, mint egy általunk végzett kézbesítés: a cikk published jelölést kap, beleszámít a havi keretébe, a csomagtétel lezárul, a benne lévő cserehivatkozások megkapják azt a címet, amire az ellenőrző várt, és a Facebook Page is értesítést kap, ha csatlakoztatta. E hívás nélkül a cikk örökre ready állapotban marad, és ebből semmi nem történik meg.
Példa
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"}'
Válaszok
| 200 | Rögzítve. A cikk az új állapotával, a published_at és a published_url értékével tér vissza. |
| 422 | Az URL hiányzik, vagy nem teljes http:// vagy https:// cím. |
| 409 | A cikk még nem áll készen a közzétételre, vagy már közzétettként van nyilvántartva. A cikk az elutasítással együtt visszakerül, így láthatja, melyikről van szó. |
A Beállítások, majd a Közzététel alatt van egy "REST API: Ön lekéri és közzéteszi" nevű motor. Nem kér semmit, mert nincs mit elküldenünk. Azt változtatja meg, ami minden reggel történik: a kész cikk cím nélkül marad készen, és a közzétételi képernyő azt jelzi, hogy arra vár, hogy Ön lekérje, ahelyett hogy sikertelen kézbesítést mutatna.
Az API-t csatlakoztatás nélkül is használhatja: a végpontok minden olyan fióknál működnek, amelyhez tartozik kulcs. A csatlakoztatásból tudja a termék többi része, hogy ne várjon saját címet, és ez akadályozza meg azt is, hogy az Ön által közzétett cikk hibának legyen számítva.
Mindenhol ugyanaz a forma, akár a kulcsellenőrzés, akár a validátor utasította el, így semminek nem kell kettőt feldolgoznia.
{ "message": "That API key is not valid, or it has been revoked." }
| Állapot | Mit jelent |
|---|---|
| 401 | Nincs kulcs, nem a mi kulcsunk, vagy a kulcs vissza lett vonva. |
| 404 | Nincs ilyen cikk vagy oldal ezen a fiókon. Egy másik fiók cikke 404-et ad, nem 403-at: egy API, amely azt mondja, "az nem az Öné", megerősítette, hogy a dolog létezik. |
| 409 | A kérés rendben volt, de a cikk nincs ehhez megfelelő állapotban. |
| 422 | Egy paraméter hiányzik vagy hibás. A válasz tartalmaz egy errors objektumot a mező nevével és az üzenettel. |
| 429 | Túllépte a sebességkorlátot. A Retry-After megmondja, mennyit kell várni. |
#!/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
A próbaidőszak elég az API olvasásához: az ezalatt írt cikkek valódi cikkek, és ezeken a végpontokon ugyanúgy visszajönnek, mint bármely másik.
Ingyenes próbaidőszak indítása