n8n / Make: no-code OG automation

One flow covers every platform that has a trigger node, Webflow, Ghost, Notion, Airtable, classic WordPress, RSS, anything. The OGImagen side is just HTTP: one call to create, one webhook (or poll) to collect.

Template flow (recommended default)

Templates render synchronously, so the whole flow is two nodes:

1. Trigger        e.g. "Webflow → Collection item published"
2. HTTP Request   POST https://ogimagen.com/api/v1/templates
     Header: Authorization: Bearer {{$env.OGIMAGEN_API_KEY}}
     Body (JSON):
       {
         "template": "blog",
         "title": "{{ $json.name }}",
         "siteName": "yoursite.com",
         "brandKitId": "{{$env.OGIMAGEN_BRAND_KIT_ID}}"
       }
     → response: { "url": "https://cdn.ogimagen.com/templates/....png" }
3. (update node)  write {{ $json.url }} back to the CMS item's og-image field

The response URL is permanent, set it once in the item's SEO field and forget it.

AI flow (hero content)

AI generation is async. In n8n the clean shape is a Webhook node as the callback:

1. Trigger        CMS publish (filtered to items flagged "AI image")
2. HTTP Request   POST https://ogimagen.com/api/v1/generations
     Body (JSON):
       {
         "title": "{{ $json.title }}",
         "displayText": "{{ $json.title }}",
         "quality": "flash",
         "variants": 1,
         "idempotencyKey": "{{ $json.slug }}-{{ $json.title | hash }}",
         "webhookUrl": "https://your-n8n.com/webhook/og-done",
         "webhookSecret": "{{$env.OGIMAGEN_WEBHOOK_SECRET}}"
       }

--- second workflow ---
1. Webhook node   POST /webhook/og-done   (receives generation.completed)
2. IF             {{ $json.generation.status }} equals "done"
3. (update node)  write {{ $json.generation.urls.og }} to the CMS item

No inbound webhook available (Make free tier, locked-down n8n)? Replace the second workflow with Wait 15s → HTTP GET /api/v1/generations/{{id}} → IF done in a loop. Details on the event payload and HMAC signature are in the API docs.

Make (Integromat)

Identical shape: Watch events → HTTP "Make a request" → Update record. Use a Custom webhook module as the webhookUrl for the AI path.

Why the idempotencyKey matters here

Automation platforms re-deliver triggers on retries and re-runs. Keying the create on slug + title means a re-run returns the original image with deduplicated: true instead of spending another credit.

Platform notes

PlatformTriggerWrite-back
WebflowCollection item created/publishedUpdate item → SEO og:image field
Ghostpost.published webhookAdmin API: update og_image (native field)
NotionDatabase item → status = PublishedUpdate page property (your site reads it at build)
AirtableRecord matches viewUpdate record field
WordPressn8n WordPress node / RSS pollREST: update ogimagen_url post meta

Full parameter reference in the API docs. Prefer code? Sanity, Strapi and headless WordPress recipes.