Prijavite se Začnite brezplačni preizkus

Pridobite svoje članke.
Objavite jih po svoje.

Vsak članek, ki ga napišemo za Vas, lahko preberete prek HTTP: naslov, metapodatke, Markdown, HTML, glavno sliko in FAQ. Ko se Vaša gradnja zažene, jih prenesite v svoje spletno mesto Next.js, Astro ali spletno mesto po meri, jih objavite in nam sporočite naslov, na katerem je bil vsak objavljen.

En bearer token. JSON noter, JSON ven. Ni SDK za namestitev in ničesar za nastaviti razen ključa.

Webhook pošilja. API vam omogoča prevzem.

Prenašata isti članek v isti obliki, zato razčlenjevalnik, napisan za enega, drugega prebere brez sprememb. Razlika je v tem, kdo začne komunikacijo.

Webhook, ko lahko vaše spletno mesto kadar koli sprejme objavo

Vašo končno točko pokličemo v trenutku, ko je članek pripravljen, in znova, ko se spremeni. Ničesar ni treba preverjati, ničesar načrtovati. WordPress, Shopify, Ghost, sprožilec Zapier ali pot, ki ste jo napisali sami.

API, ko je vaše spletno mesto zgrajeno in nameščeno kot celota

Statično spletno mesto ne more sprejeti objave ob pol sedmih zjutraj, najprej se mora nekaj znova zgraditi. Zato Vaša gradnja vpraša, kaj čaka, to prevzame in nam nato sporoči naslov. Vi izberete, kdaj.

Oboje, če želite

To sta ločeni povezavi in nobena ne izključuje druge. Webhook, ki napaja e-novice, in API, ki napaja spletno mesto, sta običajna ureditev.

En ključ, poslan kot bearer token.

Ključ ustvarite na nadzorni plošči v Settings, nato Connections. Prikaže se enkrat, ob ustvarjanju, ker je shranjen samo njegov hash: če ga izgubite, ga prekličite in ustvarite novega. Ključ bere vsa spletna mesta v računu in se prekliče na istem zaslonu.

Vsak zahtevek

Authorization: Bearer sns_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/json

Preverite, da deluje

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
}

Omejitev hitrosti

120 zahtevkov na minuto, štetih glede na ključ in ne glede na naslov, s katerega prihajajo, ker izvajalniki gradnje delijo naslove. Nad tem dobite 429 s standardnima glavama Retry-After in X-RateLimit. Pridobivanje člankov za gradnjo je le nekaj zahtevkov, zato te omejitve ne bi smeli doseči po naključju.

Ključa ne hranite v svojem repozitoriju

Prebere vse, kar smo napisali za Vaš račun, vključno s članki, ki še niso objavljeni. Dajte ga v svoje okolje za gradnjo, ne v izvorno kodo. Tukaj ga prekličite takoj, ko je kjer koli, kjer ne bi smel biti, in vse, kar ga uporablja, takoj dobi 401.

Pet jih je, štiri pa so samo za branje.

Vse je pod /api/v1/. Različica je v poti od prvega dne, zato lahko nekoč obstaja v2, ne da bi pokvarila to, kar napišete danes.

GET /api/v1/me

Račun, ki mu ključ pripada, ter ime in predpona samega ključa. Predvsem uporabno za eno stvar: pove vam, da je ključ v tem okolju tisti ključ, za katerega mislite, da je.

Primer

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

Vsako spletno mesto v računu. id je tisto, po čemer seznam člankov filtrira, domena pa je tam zato, da se lahko skript za gradnjo ujema z nečim, kar že pozna, namesto da nosi id.

Primer

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

Stran člankov, najnovejša sprememba najprej, brez besedila. Razvrščeno po času zadnje spremembe posameznega članka in ne po času nastanka, zato je updated_since uporaben: članek, ki je že objavljen, je lahko pozneje urejen, ko je vanj dodana povezava ali odstranjena iz njega.

Parametri poizvedbe

Ime Kaj naredi
site_id Eno spletno mesto iz /sites. id, ki ni v Vašem računu, vrne 404.
status Ena od vrednosti draft, qa, needs_repair, review, ready, published, failed. Karkoli drugega vrne 422 in ne prazne strani. "ready" je tisto, kar želi gradnja: napisano, preverjeno in še nikjer objavljeno.
updated_since ISO 8601, na primer 2026-09-06T00:00:00Z. Zapomnite si časovni žig zadnjega zagona in ga pošljite nazaj pri naslednjem.
per_page Do 100. Privzeta vrednost je 25.
page Od 1. meta.has_more pove, ali morate zahtevati še eno.

Primer

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}

En članek z vsem, kar seznam izpusti: content_markdown, content_html, FAQ kot schema.org JSON-LD, pripravljen za vstavitev na stran, in vse izmenjalne povezave, ki jih članek vsebuje.

Imena polj so namenoma enaka tistim, ki jih pošilja naš webhook. Če že imate sprejemnik za webhook, bo isti razčlenjevalnik prebral tudi to.

Primer

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

Članek objavite; tukaj nam sporočite naslov. To je edina končna točka, ki karkoli spremeni.

Naredi točno to, kar naredi objava, ki jo izvedemo sami: članek je označen kot objavljen, všteje se v Vašo mesečno kvoto, postavka načrta se zapre, vse izmenjalne povezave v njem dobijo naslov, na katerega je čakal preverjevalnik, in Vaša Facebook Page je obveščena, če ste jo povezali. Brez tega klica članek za vedno ostane pripravljen in nič od tega se ne zgodi.

Primer

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

Odgovori

200 Zabeleženo. Članek se vrne z novim statusom, published_at in published_url.
422 URL manjka ali pa ni poln naslov http:// ali https://.
409 Članek ni pripravljen za objavo ali pa je že zabeležen kot objavljen. Članek se vrne z zavrnitvijo, da lahko vidite, kaj od tega velja.

Povežite "REST API" kot svoj mehanizem za objavo.

Pod Settings in nato Publishing je mehanizem z imenom "REST API: vi prevzamete in objavite". Ne zahteva ničesar, ker nimamo ničesar za poslati. Spremeni pa to, kaj se zgodi vsako jutro: dokončan članek ostane pripravljen brez naslova, zaslon za objavo pa pravi, da čaka, da ga prevzamete, namesto da bi prikazal neuspešno dostavo.

API lahko uporabljate, ne da bi ga povezali: končne točke delujejo za vsak račun s ključem. S povezavo preostali del izdelka izve, da ne sme več pričakovati lastnega naslova, in to prepreči, da bi bil članek, ki ga objavite sami, štet kot neuspeh.

Vsaka napaka je JSON s sporočilom.

Povsod ena oblika, ne glede na to, ali je zavrnitev prišla iz preverjanja ključa ali od validatorja, zato ni treba razčlenjevati dveh.

{ "message": "That API key is not valid, or it has been revoked." }
Stanje Kaj pomeni
401 Ni ključa, ključ ni naš ali pa je bil preklican.
404 V tem računu ni takega članka ali spletnega mesta. Članek drugega računa vrne 404 in ne 403: API, ki reče "to ni vaše", je potrdil, da stvar obstaja.
409 Zahteva je bila v redu, vendar članek ni v ustreznem stanju za to.
422 Parameter manjka ali je napačen. Odgovor vsebuje objekt errors z imenom polja in sporočilom.
429 Prekoračena omejitev hitrosti. Retry-After pove, kako dolgo morate čakati.

Kaj korak gradnje dejansko naredi.

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

Ustvarite ključ in ga preizkusite.

Preizkus zadostuje za branje API-ja: članki, napisani med njim, so pravi članki in se prek teh končnih točk vračajo enako kot vsi drugi.

Začnite brezplačni preizkus