ChirpieDocs
Guides

Post to Social Media from n8n

Use the n8n HTTP Request node to publish to X, Bluesky, LinkedIn, and more through the Chirpie API — with an importable workflow.

Updated September 2026

How do you post to social media from n8n?

Use n8n's built-in HTTP Request node to POST to https://chirpie.ai/api/v1/posts with an Authorization: Bearer header and a JSON body containing account_id and text. One node covers X, Bluesky, LinkedIn, Threads, Mastodon, Instagram, Facebook, and Telegram — you change the account_id, not the integration.

There is an importable workflow at the end of this guide.

Step 1 — Get your key and account ID

  1. Create an API key at chirpie.ai/dashboard/keys.
  2. Connect the social account you want to post to at chirpie.ai/dashboard/accounts.
  3. Fetch the account UUID:
curl https://chirpie.ai/api/v1/accounts \
  -H "Authorization: Bearer chirpie_sk_YOUR_KEY"

Copy the id of the account you want. That UUID is what n8n will send.

Step 2 — Store the key as an n8n credential

Do not paste the key into the node. In n8n, create a Header Auth credential:

  • Name: Authorization
  • Value: Bearer chirpie_sk_YOUR_KEY

Then in the HTTP Request node set Authentication to Generic Credential Type → Header Auth and select it. The rest of this guide shows the header inline for clarity, but the credential is the right way to ship it.

Step 3 — Configure the HTTP Request node

FieldValue
MethodPOST
URLhttps://chirpie.ai/api/v1/posts
Send Headerson (or use the Header Auth credential)
Header — Name / ValueAuthorization / Bearer chirpie_sk_YOUR_KEY
Send Bodyon
Body Content TypeJSON
Specify BodyUsing Fields Below
Body field — account_idyour account UUID
Body field — textthe post content

n8n sets Content-Type: application/json for you when Body Content Type is JSON — do not add it again as a header.

A successful call returns 201 with the created post:

{
  "data": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "platform": "x",
    "status": "published",
    "platform_post_id": "1234567890",
    "published_at": "2026-09-05T10:01:00.000Z"
  }
}

Step 4 — Feed it from upstream nodes

Switch Specify Body to Using JSON when the content comes from earlier nodes, and build the payload with an expression:

={{ JSON.stringify({ account_id: $json.account_id, text: $json.text }) }}

Typical shapes:

  • RSS Feed Read → HTTP Request — announce new blog posts.
  • Schedule Trigger → Google Sheets → HTTP Request — drain a content calendar row by row.
  • Webhook → HTTP Request — post when your CI finishes a deploy.

How do you schedule instead of posting immediately?

Add a schedule_at body field with a future ISO 8601 timestamp in UTC:

FieldValue
schedule_at2026-10-01T14:00:00Z

Chirpie stores the post as scheduled and publishes it within about five minutes of that time. This is useful when n8n runs on a cron that does not line up with when you want the post to appear. Scheduled posts on the same account must be at least five minutes apart.

How do you attach images?

Add a media_urls body field holding an array of public URLs. With Using JSON body mode:

={{ JSON.stringify({ account_id: $json.account_id, text: $json.text, media_urls: [$json.image_url] }) }}

Chirpie downloads each URL server-side and uploads it to the platform. Instagram requires at least one image; the other platforms treat media as optional.

How do you post a thread?

Point the node at https://chirpie.ai/api/v1/threads and send a posts array of 2–25 items:

={{ JSON.stringify({ account_id: $json.account_id, posts: [{ text: "Part one" }, { text: "Part two" }] }) }}

X, Bluesky, Threads, Mastodon, and Telegram thread natively. LinkedIn, Instagram, and Facebook publish each item as a standalone post.

Importable workflow

Save this as chirpie-post-workflow.json and use Import from File in n8n. It ships a manual trigger and a daily schedule trigger, both wired to one Chirpie HTTP Request node. Replace chirpie_sk_YOUR_KEY and YOUR_ACCOUNT_ID.

{
  "name": "Chirpie — Post to Social",
  "nodes": [
    {
      "parameters": {},
      "id": "c1000000-0000-4000-8000-000000000001",
      "name": "Run Manually",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "rule": { "interval": [{ "field": "hours", "hoursInterval": 24 }] }
      },
      "id": "c1000000-0000-4000-8000-000000000002",
      "name": "Daily Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.4,
      "position": [0, 220]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://chirpie.ai/api/v1/posts",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "Bearer chirpie_sk_YOUR_KEY" }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "specifyBody": "keypair",
        "bodyParameters": {
          "parameters": [
            { "name": "account_id", "value": "YOUR_ACCOUNT_ID" },
            { "name": "text", "value": "Hello from n8n, posted through Chirpie." }
          ]
        },
        "options": {}
      },
      "id": "c1000000-0000-4000-8000-000000000003",
      "name": "Chirpie: Create Post",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.5,
      "position": [260, 110]
    }
  ],
  "connections": {
    "Run Manually": {
      "main": [[{ "node": "Chirpie: Create Post", "type": "main", "index": 0 }]]
    },
    "Daily Schedule": {
      "main": [[{ "node": "Chirpie: Create Post", "type": "main", "index": 0 }]]
    }
  },
  "settings": { "executionOrder": "v1" },
  "pinData": {}
}

The same file is downloadable at chirpie.ai/n8n/chirpie-post-workflow.json.

Keys in connections are node names, not IDs — rename a node in the editor and n8n updates them for you, but hand-edited JSON has to match.

Error handling

StatusCodeWhat to do
400bad_requestText too long for the platform, or schedule_at in the past
401unauthorizedCheck the Authorization header and the key
404not_foundWrong account_id, or the account is inactive
429rate_limitedMonthly post limit, or more than 60 requests/minute
502upstream_errorThe platform's own API errored

Turn on Continue On Fail in the node if a single bad row should not stop the whole workflow, and branch on $json.error.code.

FAQ

Do I need a dedicated Chirpie node for n8n? No — the built-in HTTP Request node covers the whole API, and there is nothing to keep in sync when the API adds a platform.

Which n8n versions does this work with? Anything with HTTP Request node version 4.x. The exported workflow above pins typeVersion: 4.5.

Can I post to several networks from one workflow? Yes. Loop over a list of account UUIDs, or add one HTTP Request node per network.

Can I read analytics into n8n? Yes. GET https://chirpie.ai/api/v1/analytics/posts/{post_id} with the same header.

Does this work on self-hosted n8n? Yes. Chirpie is a plain HTTPS API — self-hosted and cloud both work.

How do I avoid rate limiting on a big batch? Stay under 60 requests per minute per key. Add a Wait node between iterations for large content calendars.

Next steps

On this page