Suiko

Publish automatically to any site

Suiko does not connect to your CMS yet? It notifies your tool at every approved update, with the content ready to publish. A Make or n8n scenario, or your own code, publishes to Webflow, Shopify, HubSpot, Drupal, a custom CMS, then tells Suiko the page is live. No connector to wait for.

How it works, end to end

  1. 01You approve

    In Suiko, as usual: the proposal reread, the facts checked, one click.

  2. 02Suiko notifies

    A POST call goes to the address of your choice, with the title, the HTML, the tags and the FAQ of the page.

  3. 03Your tool publishes

    Make, n8n or your code updates the page on your site, its own way.

  4. 04It confirms

    An API call marks the page as published in Suiko; it counts in your pack and shows up in Performance.

Webhook events

Suiko calls your address at every change of state of a proposal. On the first three, the JSON carries the full content.

  • proposition.deposeeThe machine filed a proposal, to review.
  • proposition.approuveeA reviewer approved it: time to publish.
  • proposition.publieeThe page is live (through a connector, or your API call).
  • proposition.rejeteeThe proposal was rejected.
  • proposition.correction_demandeeA reviewer asked for a correction; a new version will follow.
  • proposition.conflitThe page changed on the site in the meantime; the proposal awaits a decision.
  • proposition.echec_publicationA connector failed to publish.

The JSON sent

Same shape for every event; the content block is only present on filed, approved and published. The X-Suiko-Event header repeats the event name.

{
  "event": "proposition.approuvee",
  "proposal_id": "3f1c…",
  "version": 1,
  "status": "approuvee",
  "page_slug": "blog/japan-rail-pass",
  "page_url": "https://www.kankou.example/blog/japan-rail-pass",
  "page_title": "Japan Rail Pass : prix, fonctionnement et rentabilité",
  "content": {
    "title": "Japan Rail Pass : prix, fonctionnement et rentabilité",
    "html": "<h2>Prix du pass en 2026</h2><p>29 650 ¥ pour 7 jours…</p>",
    "meta_title": "Japan Rail Pass 2026 : prix et rentabilité | Kankou",
    "meta_description": "Prix, fonctionnement et rentabilité du Japan Rail Pass…",
    "faq": [{ "question": "Le pass est-il rentable pour 7 jours ?", "answer": "Dès un aller-retour Tokyo-Kyoto…" }]
  },
  "url": "https://app.getsuiko.com/updates/3f1c…",
  "at": "2026-10-31T09:12:00.000Z"
}

The signature

Every call carries the X-Suiko-Signature header: “sha256=” followed by the HMAC SHA-256 of the raw body, computed with the secret shown in Settings > API. Check it if your address is public; Make and n8n usually skip it. On failure, Suiko retries after 5 seconds, then 20 seconds.

// Node.js : vérifier X-Suiko-Signature avec le secret de Paramètres > API
import { createHmac, timingSafeEqual } from 'node:crypto';
const expected = 'sha256=' + createHmac('sha256', process.env.SUIKO_WEBHOOK_SECRET).update(rawBody).digest('hex');
const ok = timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-suiko-signature'] ?? ''));

With Make

  1. 1.In Make, add a Webhooks > Custom webhook module and copy its address.
  2. 2.In Suiko, Settings > API, paste the address, save, then Send a test: Make receives a sample and recognises the fields.
  3. 3.Add a filter on event equal to proposition.approuvee.
  4. 4.Add your site’s module (Webflow, Shopify, HubSpot, WordPress…) and map content.title, content.html, content.meta_title, content.meta_description.
  5. 5.Finish with an HTTP > Make a request module: POST to /api/mises-a-jour/{{proposal_id}}/publiee, header Authorization: Bearer followed by your API key.

With n8n

  1. 1.Add a Webhook node (POST method) and copy its production address.
  2. 2.In Suiko, Settings > API, paste the address, save, then Send a test to see the fields in n8n.
  3. 3.An IF node on {{ $json.event }} equal to proposition.approuvee.
  4. 4.Your site’s node (Webflow, Shopify, HubSpot, WordPress, or HTTP Request to your CMS) with the fields of content.
  5. 5.An HTTP Request node: POST to /api/mises-a-jour/{{ $json.proposal_id }}/publiee with your API key. To check the signature, a Crypto node (HMAC SHA-256, secret from Settings > API) compared with the header.

The API

Base: https://app.getsuiko.com. Every call carries the Authorization: Bearer chk_… header. Responses are JSON.

  • GET/api/mises-a-jour?statut=approuveeYour organisation’s proposals, filtered by state (several states separated by commas) and by date (depuis=…).
  • GET/api/mises-a-jour/{id}One proposal with its content ready to publish, the same content block as the webhook.
  • POST/api/mises-a-jour/{id}/publieeMarks an approved proposal as published, optionally with { "url": "…" } of the live page.
curl -H "Authorization: Bearer chk_…" \
  https://app.getsuiko.com/api/mises-a-jour?statut=approuvee

Keys

An API key is created in Settings > API by an administrator; it is shown once. It is valid for the whole organisation and revoked in one click. The webhook secret is in the same place.

Good to know

  • The webhook requires an https address. A failed call is retried twice, then logged; the application never waits for your server.
  • The HTML in the content block is the one connectors publish: headings, paragraphs, lists, tables, FAQ, without layout.
  • An approved page is deducted from your pack at approval, whether it is published by a connector, by your tool or by copying the text.
  • Webflow, Shopify, Drupal, Prismic, a custom CMS: if you prefer a native connector, we build it on request, at no extra cost.

Try it on three of your pages

The webhook and the API are included in the free trial: plug in Make or n8n from the first proposal.

Try for free

Your old pages can bring in more than your new ones

Suiko updates three pages of your site for free: every fact checked against its source, an up-to-date version for you to approve.

No credit card.