50% de thalamh de do chéad mhí leis an gcód LAUNCH50 Pleananna míosúla amháin. Tosaigh anois

Tosaigh triail saor in aisce

Tarraing do chuid alt.
Foilsigh iad ar do bhealach féin.

Is féidir gach alt a scríobhaimid duit a léamh thar HTTP: an teideal, na meiteashonraí, an Markdown, an HTML, an phríomhíomhá agus an FAQ. Tóg isteach iad i do shuíomh Next.js, Astro nó saincheaptha nuair a ritheann do thógáil, cuir beo iad, agus inis dúinn an seoladh ar chríochnaigh gach ceann acu ann.

Comhartha iompróra amháin. JSON isteach, JSON amach. Níl aon SDK le suiteáil agus níl aon rud le cumrú seachas eochair.

Déanann an webhook brú. Ligeann an API daoibh tarraingt.

Iompraíonn siad an t-alt céanna san fhoirm chéanna, mar sin léann parsálaí a scríobhtar do cheann amháin an ceann eile gan athrú. Is é an difríocht cé a thosaíonn an comhrá.

An webhook, nuair is féidir le bhur suíomh postáil a ghlacadh ag aon uair

Glaoimid ar bhur gcríochphointe an nóiméad a bhíonn alt réidh, agus arís nuair a athraíonn sé. Níl aon rud le polláil, níl aon rud le sceidealú. WordPress, Shopify, Ghost, truicear Zapier, nó bealach a scríobh sibh féin.

An API, nuair a thógtar agus a imlonnaítear bhur suíomh mar aonad amháin

Ní féidir le suíomh statach postáil a ghlacadh ag leath i ndiaidh a sé ar maidin; caithfear rud éigin a atógáil ar dtús. Mar sin fiafraíonn do thógáil cad atá ag fanacht, tógann sí é, agus insíonn sí dúinn an seoladh ina dhiaidh sin. Is tusa a roghnaíonn cathain.

An dá cheann, más mian leat iad

Is naisc ar leith iad agus ní chuireann ceachtar acu an ceann eile as an áireamh. Is gnáthshocrú é webhook a chothaíonn nuachtlitir agus API a chothaíonn an suíomh gréasáin.

Eochair amháin, seolta mar chomhartha iompróra.

Déan eochair sa deais faoi Settings, ansin Connections. Taispeántar í uair amháin, nuair a chruthaítear í, mar ní stóráiltear ach a hash: má chailleann tú í, cúlghair í agus déan ceann eile. Léann eochair gach suíomh ar an gcuntas agus cúlghairtear í ón scáileán céanna.

Gach iarratas

Authorization: Bearer sns_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/json

Seiceáil go n-oibríonn sé

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
}

Teorainn ráta

120 iarratas sa nóiméad, á gcomhaireamh in aghaidh na heochrach seachas an seoladh as a dtagann siad, mar roinneann reathaithe tógála seoltaí. Os cionn sin gheobhaidh tú 429 leis na ceanntásca caighdeánacha Retry-After agus X-RateLimit. Níl i gceist le hailt a tharraingt do thógáil ach dornán iarratas, mar sin ní teorainn í seo ar cheart duit bualadh léi de thaisme.

Coinnigh an eochair amach as do stór

Léann sé gach rud atá scríofa againn do do chuntas, lena n-áirítear ailt nach bhfuil foilsithe fós. Cuir i do thimpeallacht tógála é, ní i do fhoinse. Cúlghair anseo é an nóiméad a bhíonn sé áit ar bith nár cheart dó a bheith, agus gheobhaidh aon rud atá á úsáid 401 láithreach.

Cúig cinn díobh, agus ní dhéanann ceithre cinn ach léamh.

Tá gach rud faoi /api/v1/. Tá an leagan sa chonair ón gcéad lá, ionas gur féidir le v2 a bheith ann lá éigin gan an méid a scríobhann tú inniu a bhriseadh.

GET /api/v1/me

An cuntas lena mbaineann an eochair, agus ainm agus réimír na heochrach féin. Úsáideach thar aon ní eile do rud amháin: a insint daoibh gurb í an eochair sa timpeallacht seo an eochair a shíleann sibh atá inti.

Sampla

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

Gach suíomh ar an gcuntas. Is é an id a úsáideann liosta na n-alt le scagadh, agus tá an fearann ann ionas gur féidir le script tógála meaitseáil le rud atá ar eolas aici cheana seachas id a iompar.

Sampla

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

Leathanach alt, an t-athrú is nuaí ar dtús, gan an scríbhneoireacht. Ordaítear iad de réir an uair dheireanaigh ar athraíodh gach alt seachas de réir an uair a scríobhadh é, agus is é sin a fhágann go bhfuil updated_since úsáideach: is féidir alt atá beo cheana a chur in eagar níos déanaí, nuair a chuirtear nasc isteach ann nó nuair a bhaintear amach arís é.

Paraiméadair iarratais

Ainm A ndéanann sé
site_id Suíomh amháin, ó /sites. Freagraíonn id nach bhfuil ar do chuntas le 404.
status Ceann de draft, qa, needs_repair, review, ready, published, failed. Is 422 é aon rud eile seachas leathanach folamh. Is é "ready" atá ag teastáil ó thógáil: scríofa, seiceáilte, agus gan a bheith áit ar bith fós.
updated_since ISO 8601, mar shampla 2026-09-06T00:00:00Z. Cuimhnigh stampa ama do rithe dheireanaigh agus cuir ar ais é ar an gcéad cheann eile.
per_page Suas go 100. Is é 25 an réamhshocrú.
page Ó 1. Deir meta.has_more ar cheart ceann eile a iarraidh.

Sampla

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}

Alt amháin, leis gach rud a fhágann an liosta ar lár: content_markdown, content_html, an FAQ mar schema.org JSON-LD réidh le cur isteach sa leathanach, agus aon naisc mhalartaithe atá san alt.

Is iad ainmneacha na réimsí na cinn a sheolann ár webhook, d'aon ghnó. Má tá glacadóir webhook agaibh cheana, léann an parsálaí céanna é seo.

Sampla

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

Cuireann sibh an t-alt beo; seo an áit a n-insíonn sibh dúinn an seoladh. Is é seo an t-aon chríochphointe a athraíonn aon rud.

Déanann sé go díreach an rud a dhéanann seachadadh a rinneamar féin: marcáiltear an t-alt mar fhoilsithe, comhaireann do liúntas míosúil é, dúnann mír an phlean, faigheann aon naisc mhalartaithe ann an seoladh a bhfuil an fíoraitheoir ag fanacht leis, agus cuirtear do Facebook Page ar an eolas má tá ceann ceangailte agat. Gan an glao seo fanann an t-alt réidh go deo agus ní tharlaíonn aon cheann de sin.

Sampla

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

Freagraí

200 Taifeadta. Tagann an t-alt ar ais lena stádas nua, published_at agus published_url.
422 Tá an url ar iarraidh nó ní seoladh iomlán http:// nó https:// é.
409 Níl an t-alt réidh le foilsiú, nó tá sé taifeadta mar alt foilsithe cheana. Tagann an t-alt ar ais leis an diúltú, ionas gur féidir libh a fheiceáil cé acu é.

Ceangail "REST API" mar d'inneall foilsitheoireachta.

Faoi Settings, ansin Publishing, tá inneall darb ainm "REST API: fetchálann agus foilsíonn sibh". Ní iarrann sé tada, mar níl aon rud le seoladh againn. Is é an t-athrú a dhéanann sé ná an méid a tharlaíonn gach maidin: fanann alt críochnaithe réidh gan seoladh, agus deir an scáileán foilsithe go bhfuil sé ag fanacht libh é a fetcháil seachas seachadadh ar theip air a thaispeáint.

Is féidir libh an API a úsáid gan é a cheangal: oibríonn na críochphointí d'aon chuntas a bhfuil eochair aige. Trína cheangal a thuigeann an chuid eile den táirge gur cheart stop a chur le bheith ag súil lena sheoladh féin, agus is é sin a choisceann alt a fhoilsíonn sibh féin ó bheith á chomhaireamh mar theip.

Is JSON le teachtaireacht é gach teip.

Cruth amháin i ngach áit, cibé acu ón seiceáil eochrach nó ón mbailíochtóir a tháinig an diúltú, ionas nach gá do rud ar bith dhá cheann a pharsáil.

{ "message": "That API key is not valid, or it has been revoked." }
Stádas A chiallaíonn sé
401 Gan eochair, eochair nach linne í, nó eochair atá cúlghairthe.
404 Níl alt ná suíomh den sórt sin ar an gcuntas seo. Freagraíonn alt ó chuntas eile le 404 seachas 403: dheimhnigh API a deir "ní leatsa é sin" go bhfuil an rud ann.
409 Bhí an t-iarratas ceart go leor ach níl an t-alt sa staid chuige sin.
422 Tá paraiméadar in easnamh nó mícheart. Tá oibiacht errors sa fhreagra a ainmníonn an réimse, chomh maith leis an teachtaireacht.
429 Thar an teorainn ráta. Deir Retry-After cá fhad le fanacht.

An rud a dhéanann céim tógála i ndáiríre.

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

Deimhnigh gur uainn a tháinig seachadadh.

Iompraíonn gach seachadadh webhook inár bhformáid féin trí cheanntásc ó shonraíocht Standard Webhooks. Seiceáil iad leis an eochair shínithe ó na socruithe Foilsitheoireachta, agus diúltaigh d'aon rud nach meaitseálann nó atá níos mó ná cúig nóiméad d'aois.

webhook-id: 7c1e2f0a-3b5d-4e8f-9a61-2d4c8b0e5f13
webhook-timestamp: 1790490600
webhook-signature: v1,s0RzLJ1d7Cxd9nwe8pqER9DWy/stEIB+uT9MlGVLlM0=
Ceanntásc Cad é atá ann
webhook-id An seachadadh, an luach céanna le delivery_id sa chorp. Coinnigh i gcuimhne na cinn a láimhseáil tú, agus freagair athsheoladh le 200 gan an obair a dhéanamh arís.
webhook-timestamp An t-am ar shínigh muid é, i soicindí iomlána ó 1970 i leith. Diúltaigh d'aon rud atá níos mó ná cúig nóiméad ó do chlog féin, ionas nach féidir seanseachadadh a sheoladh chugat arís.
webhook-signature v1, ansin base64 HMAC-SHA256 den aitheantas, den stampa ama agus den chorp amh ceangailte le lánstadanna, déanta le d'eochair shínithe. Is féidir níos mó ná ceann amháin a bheith ann, scartha le spásanna. Glac leis an seachadadh má mheaitseálann aon cheann acu.

An eochair shínithe

Tosaíonn sé le whsec_. Bain é sin de agus díchódaigh an chuid eile le base64: is iad na bearta sin an eochair HMAC, ní an téacs a chóipeáil tú. Taispeántar é uair amháin, nuair a nascann tú an webhook nó a bhrúnn tú "New signing key" ar an leathanach Foilsitheoireachta, agus ní sheolaimid riamh é.

Seiceáil an corp amh

Ríomh an síniú ó na bearta díreach mar a tháinig siad, sula ndéanann aon rud iad a pharsáil. Ní hiad na bearta céanna iad JSON a díchódaíodh agus a ionchódaíodh arís, agus ní mheaitseálfaidh a shíniú.

PHP

<?php
$raw = getenv('SEONIS_SIGNING_KEY'); // whsec_...

// No key, no deliveries. A missing or empty variable would otherwise become
// an empty HMAC key, and anybody can sign with that.
$secret = is_string($raw) && str_starts_with($raw, 'whsec_')
    ? base64_decode(substr($raw, strlen('whsec_')), true)
    : false;

if ($secret === false || strlen($secret) < 24) {
    http_response_code(500);
    exit('Signing key not configured.');
}

$id        = $_SERVER['HTTP_WEBHOOK_ID'] ?? '';
$timestamp = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'] ?? '';
$header    = $_SERVER['HTTP_WEBHOOK_SIGNATURE'] ?? '';
$body      = file_get_contents('php://input');

if (! ctype_digit($timestamp) || abs(time() - (int) $timestamp) > 300) {
    http_response_code(401);
    exit('Too old.');
}

$expected = base64_encode(hash_hmac('sha256', "$id.$timestamp.$body", $secret, true));

$valid = false;
foreach (explode(' ', $header) as $signature) {
    [$version, $value] = array_pad(explode(',', $signature, 2), 2, '');
    $valid = $valid || ($version === 'v1' && hash_equals($expected, $value));
}

if (! $valid) {
    http_response_code(401);
    exit('Bad signature.');
}

$delivery = json_decode($body, true);

Node.js

import crypto from 'node:crypto';
import express from 'express';

const app = express();

// No key, no server. An empty variable would otherwise become an empty HMAC
// key, and anybody can sign with that.
const raw = process.env.SEONIS_SIGNING_KEY ?? '';
if (!raw.startsWith('whsec_')) throw new Error('SEONIS_SIGNING_KEY is not set.');
const key = Buffer.from(raw.slice('whsec_'.length), 'base64');
if (key.length < 24) throw new Error('SEONIS_SIGNING_KEY is not a valid key.');

// express.raw keeps the body as the bytes we signed.
app.post('/hooks/seonis', express.raw({ type: 'application/json' }), (req, res) => {
  const id = req.get('webhook-id') ?? '';
  const timestamp = req.get('webhook-timestamp') ?? '';
  const header = req.get('webhook-signature') ?? '';

  if (!/^\d+$/.test(timestamp) || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) {
    return res.status(401).send('Too old.');
  }

  const expected = crypto.createHmac('sha256', key)
    .update(`${id}.${timestamp}.`)
    .update(req.body)
    .digest();

  const valid = header.split(' ').some((signature) => {
    const [version, value = ''] = signature.split(',');
    const given = Buffer.from(value, 'base64');
    return version === 'v1' && given.length === expected.length && crypto.timingSafeEqual(given, expected);
  });

  if (!valid) return res.status(401).send('Bad signature.');

  const delivery = JSON.parse(req.body);
  res.json({ ok: true });
});

Nó úsáid leabharlann

Déanann leabharlanna oifigiúla Standard Webhooks, do PHP, JavaScript, Python, Go, Ruby agus eile, é seo ar fad in aon ghlao amháin. Tabhair an eochair shínithe dóibh mar a taispeánadh duit í, whsec_ san áireamh. github.com/standard-webhooks

Na ceanntásca níos sine

Iompraíonn seachadtaí an rún sínithe mar thócan iompróra freisin, agus X-AutoSEO-LT-Signature, HMAC den chorp amháin a dhéantar leis an rún sin. Seoltar iad fós ionas go leanfaidh críochphointí a tógadh orthu ag obair. Ba chóir do chríochphointe nua webhook-signature a sheiceáil ina ionad: ní chlúdaíonn an seanshíniú aon am ná aon aitheantas, agus téann a eochair i ngach iarratas.

Seolann na formáidí AutoSEO, Outrank agus BabyLoveGrowth go díreach an méid a sheol na seirbhísí sin, mar sin ní iompraíonn siad na ceanntásca seo.

Déan eochair agus bain triail aisti.

Is leor an triail chun an API a léamh: is fíor-ailt iad na hailt a scríobhtar lena linn, agus tagann siad ar ais trí na críochphointí seo cosúil le cinn ar bith eile.

Tosaigh triail saor in aisce