Prijavite se Pokrenite besplatno probno razdoblje

Dohvatite svoje članke.
Objavite ih na svoj način.

Svaki članak koji napišemo za Vas može se čitati preko HTTP-a: naslov, metapodaci, Markdown, HTML, glavna slika i FAQ. Preuzmite ih u svoj Next.js, Astro ili prilagođenu stranicu kada se Vaš build pokrene, objavite ih i recite nam na kojoj je adresi svaki završio.

Jedan bearer token. JSON ulazi, JSON izlazi. Nema SDK-a za instalaciju i nema ničega za podešavanje osim ključa.

Webhook šalje. API Vam omogućuje dohvat.

Prenose isti članak u istom obliku, pa parser napisan za jedno čita i drugo bez izmjena. Razlika je u tome tko započinje komunikaciju.

Webhook, kada Vaša stranica može primiti objavu u bilo koje vrijeme

Pozivamo Vašu krajnju točku čim je članak spreman, i ponovno kada se promijeni. Nema provjeravanja ni zakazivanja. WordPress, Shopify, Ghost, Zapier okidač ili ruta koju ste sami napisali.

API, kada se Vaša stranica gradi i postavlja kao cjelina

Statička stranica ne može prihvatiti objavu u šest i trideset ujutro, nešto se prvo mora ponovno izgraditi. Zato Vaš build pita što čeka, preuzima to i poslije nam kaže adresu. Vi birate kada.

Oboje, ako ih želite

To su odvojene veze i nijedna ne isključuje drugu. Webhook koji puni newsletter i API koji puni web-stranicu uobičajen su raspored.

Jedan ključ, poslan kao bearer token.

Izradite ključ na nadzornoj ploči pod Settings, zatim Connections. Prikazuje se samo jednom, kada se izradi, jer se sprema samo njegov hash: ako ga izgubite, opozovite ga i izradite drugi. Ključ čita svaku stranicu na računu i opoziva se na istom zaslonu.

Svaki zahtjev

Authorization: Bearer sns_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/json

Provjerite radi li

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
}

Ograničenje brzine

120 zahtjeva u minuti, broji se prema ključu, a ne prema adresi s koje dolazi, jer izvršitelji buildova dijele adrese. Iznad toga dobivate 429 sa standardnim zaglavljima Retry-After i X-RateLimit. Dohvaćanje članaka za build traži tek nekoliko zahtjeva, pa ovo nije ograničenje koje biste trebali dosegnuti slučajno.

Držite ključ izvan svojeg repozitorija

Čita sve što smo napisali za Vaš račun, uključujući članke koji još nisu objavljeni. Stavite ga u svoje build okruženje, ne u izvorni kod. Opozovite ga ovdje čim se nađe bilo gdje gdje ne bi smio biti, i sve što ga koristi odmah dobiva 401.

Ima ih pet, a četiri samo čitaju.

Sve se nalazi pod /api/v1/. Verzija je u putanji od prvog dana, tako da jednog dana može postojati v2 bez rušenja onoga što danas napišete.

GET /api/v1/me

Račun kojem ključ pripada te naziv i prefiks samog ključa. Najkorisnije za jedno: da Vam kaže da je ključ u ovom okruženju onaj za koji mislite da jest.

Primjer

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

Svaka stranica na računu. id je ono po čemu popis članaka filtrira, a domena je tu kako bi build skripta mogla uskladiti nešto što već zna umjesto da nosi id.

Primjer

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

Stranica članaka, najnovija promjena prva, bez sadržaja. Poredano prema tome kada je svaki članak zadnji put promijenjen, a ne kada je napisan, zbog čega updated_since ima smisla: članak koji je već objavljen može se kasnije urediti, kada se u njega doda poveznica ili se iz njega ukloni.

Parametri upita

Naziv Što radi
site_id Jedna stranica, iz /sites. id koji nije na Vašem računu vraća 404.
status Jedno od draft, qa, needs_repair, review, ready, published, failed. Sve drugo je 422, a ne prazna stranica. "ready" je ono što build želi: napisano, provjereno i još nigdje objavljeno.
updated_since ISO 8601, kao 2026-09-06T00:00:00Z. Zapamtite vremensku oznaku zadnjeg pokretanja i pošaljite je ponovno pri sljedećem.
per_page Do 100. Zadano je 25.
page Od 1. meta.has_more govori treba li tražiti još jednu.

Primjer

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}

Jedan članak, sa svime što popis izostavlja: content_markdown, content_html, FAQ kao schema.org JSON-LD spreman za umetanje na stranicu i sve exchange poveznice koje članak sadrži.

Nazivi polja namjerno su isti kao oni koje šalje naš webhook. Ako već imate primatelja webhooka, isti parser čita i ovo.

Primjer

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

Vi objavljujete članak; ovdje nam javljate adresu. To je jedina krajnja točka koja išta mijenja.

Radi to točno ono što radi i isporuka koju smo sami obavili: članak se označava kao objavljen, uračunava se u Vaš mjesečni limit, stavka plana se zatvara, sve exchange poveznice u njemu dobivaju adresu koju je provjera čekala, a Vaša Facebook stranica se obavještava ako ste je povezali. Bez ovog poziva članak zauvijek ostaje spreman i ništa od toga se ne događa.

Primjer

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 Zabilježeno. Članak se vraća sa svojim novim statusom, published_at i published_url.
422 Nedostaje URL ili nije puna adresa http:// ili https://.
409 Članak nije spreman za objavu ili je već zabilježen kao objavljen. Članak se vraća s odbijanjem kako biste mogli vidjeti o čemu je riječ.

Povežite "REST API" kao svoj mehanizam objave.

Pod Settings, zatim Publishing, nalazi se mehanizam pod nazivom "REST API: Vi dohvaćate i objavljujete". Ne traži ništa jer nemamo što slati. Mijenja ono što se događa svakog jutra: dovršen članak ostaje spreman bez adrese, a zaslon za objavu prikazuje da čeka da ga dohvatite umjesto da prikazuje neuspjelu isporuku.

API možete koristiti bez povezivanja: krajnje točke rade za svaki račun s ključem. Povezivanjem ostatak proizvoda zna da više ne treba očekivati vlastitu adresu, a time se i sprječava da se članak koji sami objavite računa kao neuspjeh.

Svaki neuspjeh je JSON s porukom.

Jedan oblik svugdje, bilo da je odbijanje došlo iz provjere ključa ili od validatora, tako da ništa ne mora parsirati dva.

{ "message": "That API key is not valid, or it has been revoked." }
Status Što znači
401 Nema ključa, ključ nije naš ili je ključ opozvan.
404 Na ovom računu nema takvog članka ni stranice. Članak drugog računa vraća 404 umjesto 403: API koji kaže "to nije Vaše" potvrdio je da ta stvar postoji.
409 Zahtjev je bio ispravan, ali članak nije u odgovarajućem stanju za to.
422 Parametar nedostaje ili je pogrešan. Odgovor sadrži objekt errors s nazivom polja, kao i poruku.
429 Preko ograničenja brzine. Retry-After govori koliko treba čekati.

Što korak izgradnje zapravo radi.

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

Izradite ključ i isprobajte ga.

Probno razdoblje dovoljno je za čitanje API-ja: članci napisani tijekom njega stvarni su članci i vraćaju se kroz ove krajnje točke kao i svi drugi.

Pokrenite besplatno probno razdoblje