GET
/api/v1/me
Konto, do którego należy klucz, oraz jego nazwa i prefiks. Przydaje się przede wszystkim do jednego: informuje Państwa, że klucz w tym środowisku jest tym kluczem, za który go Państwo uważają.
Przykład
curl https://seonis.ai/api/v1/me \
-H "Authorization: Bearer $SEONIS_API_KEY"
GET
/api/v1/sites
Każda witryna na koncie. id służy do filtrowania listy artykułów, a domena jest po to, aby skrypt buildu mógł dopasować coś, co już zna, zamiast przenosić id.
Przykład
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
Strona artykułów, od najnowszej zmiany, bez treści. Kolejność według czasu ostatniej zmiany każdego artykułu, a nie czasu jego napisania, dlatego updated_since ma sens: artykuł, który jest już opublikowany, może zostać później edytowany, gdy link zostanie do niego dodany albo z niego usunięty.
Parametry zapytania
| Nazwa |
Co robi |
| site_id |
Jedna witryna, z /sites. id, którego nie ma na Państwa koncie, zwraca 404. |
| status |
Jedna z wartości: draft, qa, needs_repair, review, ready, published, failed. Cokolwiek innego zwraca 422 zamiast pustej strony. "ready" to to, czego chce build: napisane, sprawdzone i jeszcze nigdzie nieopublikowane. |
| updated_since |
ISO 8601, na przykład 2026-09-06T00:00:00Z. Proszę zapamiętać znacznik czasu ostatniego uruchomienia i przekazać go przy następnym. |
| per_page |
Do 100. Domyślnie 25. |
| page |
Od 1. meta.has_more mówi, czy pytać o następną. |
Przykład
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 artykuł, ze wszystkim, co lista pomija: content_markdown, content_html, FAQ jako schema.org JSON-LD gotowe do wstawienia na stronę oraz wszystkie linki wymienne, które artykuł zawiera.
Nazwy pól są celowo takie same jak te wysyłane przez nasz webhook. Jeśli mają już Państwo odbiornik webhooków, ten sam parser odczyta także to.
Przykład
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
Publikują Państwo artykuł; tutaj podają nam Państwo jego adres. To jedyny endpoint, który cokolwiek zmienia.
Działa dokładnie tak samo jak publikacja wykonana przez nas: artykuł zostaje oznaczony jako opublikowany, wlicza się do Państwa miesięcznego limitu, pozycja planu zostaje zamknięta, wszystkie linki wymienne w nim dostają adres, na który czekał weryfikator, a Państwa Strona na Facebook jest powiadamiana, jeśli została podłączona. Bez tego wywołania artykuł pozostaje gotowy na zawsze i nic z tego się nie dzieje.
Przykład
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"}'
Odpowiedzi
| 200 |
Zapisano. Artykuł wraca z nowym statusem, published_at i published_url. |
| 422 |
Brakuje adresu URL albo nie jest to pełny adres http:// lub https://. |
| 409 |
Artykuł nie jest gotowy do publikacji albo jest już zapisany jako opublikowany. Artykuł wraca z odmową, aby mogli Państwo zobaczyć, który to przypadek. |