GET
/api/v1/me
Das Konto, zu dem der Schlüssel gehört, sowie der Name und das Präfix des Schlüssels. Vor allem für eines nützlich: um Ihnen zu zeigen, dass der Schlüssel in dieser Umgebung der Schlüssel ist, für den Sie ihn halten.
Beispiel
curl https://seonis.ai/api/v1/me \
-H "Authorization: Bearer $SEONIS_API_KEY"
GET
/api/v1/sites
Jede Website im Konto. Die id ist das, worauf die Artikelliste filtert, und die Domain ist da, damit ein Build-Skript auf etwas abgleichen kann, das es bereits kennt, statt eine id mitzuführen.
Beispiel
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
Eine Seite mit Artikeln, neueste Änderung zuerst, ohne den Inhalt. Sortiert danach, wann jeder Artikel zuletzt geändert wurde, nicht danach, wann er geschrieben wurde. Genau deshalb ist updated_since nützlich: Ein Artikel, der bereits live ist, kann später noch bearbeitet werden, wenn ein Link eingefügt oder wieder entfernt wird.
Abfrageparameter
| Name |
Was es macht |
| site_id |
Eine Website, aus /sites. Eine id, die nicht zu Ihrem Konto gehört, antwortet mit 404. |
| status |
Einer von draft, qa, needs_repair, review, ready, published, failed. Alles andere ist eine 422 statt einer leeren Seite. "ready" ist das, was ein Build will: geschrieben, geprüft und noch nirgends. |
| updated_since |
ISO 8601, zum Beispiel 2026-09-06T00:00:00Z. Merken Sie sich den Zeitstempel Ihres letzten Laufs und geben Sie ihn beim nächsten wieder mit. |
| per_page |
Bis zu 100. Standard ist 25. |
| page |
Ab 1. meta.has_more sagt, ob Sie eine weitere anfordern sollen. |
Beispiel
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}
Ein Artikel, mit allem, was die Liste weglässt: content_markdown, content_html, die FAQ als schema.org-JSON-LD, bereit zum Einfügen in die Seite, und alle Austausch-Links, die der Artikel enthält.
Die Feldnamen sind absichtlich dieselben, die unser Webhook sendet. Wenn Sie bereits einen Webhook-Empfänger haben, liest derselbe Parser auch dies.
Beispiel
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
Sie schalten den Artikel live, hier teilen Sie uns die Adresse mit. Dies ist der einzige Endpunkt, der etwas ändert.
Es macht genau das, was auch eine Auslieferung durch uns selbst macht: Der Artikel wird als veröffentlicht markiert, Ihr monatliches Kontingent zählt ihn, der Planpunkt wird abgeschlossen, alle Austausch-Links darin erhalten die Adresse, auf die der Verifier gewartet hat, und Ihre Facebook Page wird informiert, wenn Sie eine verbunden haben. Ohne diesen Aufruf bleibt der Artikel für immer bereit, und nichts davon passiert.
Beispiel
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"}'
Antworten
| 200 |
Erfasst. Der Artikel kommt mit seinem neuen Status, published_at und published_url zurück. |
| 422 |
Die URL fehlt oder ist keine vollständige http://- oder https://-Adresse. |
| 409 |
Der Artikel ist nicht bereit zur Veröffentlichung oder bereits als veröffentlicht erfasst. Der Artikel wird mit der Ablehnung zurückgegeben, damit Sie sehen können, was davon zutrifft. |