Syndroo docs
Version 0.2.0-rc.1 unpublished release candidate Website GitHub

Recipe: publish a blog summary

Turn a finished article into one short post per platform. The summarizing and the article reading happen in your client; Syndroo receives finished text and publishes it.

Syndroo does not read your feed or write summaries.

There is no RSS reader, no crawler, no model call and no content generation inside the Worker. Your script, agent or CMS prepares the text; the API publishes exactly what the request contains.

Inputs

  • Article title and canonical URL. The URL is part of the text, not a separate field.
  • A summary you wrote or accepted. Keep it inside each platform's limit, and confirm it before sending.
  • A stable key. The article slug plus a revision works well: republishing an edited article is a different post, so give it a different key.
  • A Worker URL and API key in the environment your client reads: SYNDROO_URL and SYNDROO_API_KEY. The key can publish, so keep it out of prompts, logs, commits and issues.
  • A configured platform. The example below targets Bluesky only, so the run stays small; configure it with the Bluesky guide first.

Steps

  1. Prepare the text outside Syndroo

    Read the article, write the summary, and paste both into the request. For Bluesky, HTTP(S) URLs receive link facets, so the link becomes a real link without extra work.

  2. Send the request

    curl -X POST "$SYNDROO_URL/v1/posts" \
      -H "Authorization: Bearer $SYNDROO_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: blog-safe-cross-posting-v1" \
      --data '{
        "content": "New post: building retry-safe cross-posting with one idempotency key per logical post. https://syndroo.com/blog/safe-cross-posting-with-idempotency/",
        "platforms": ["bluesky"]
      }'
  3. Expected acceptance

    {
      "id": "post_...",
      "status": "queued"
    }
  4. Read the result and keep the link

    curl \
      -H "Authorization: Bearer $SYNDROO_API_KEY" \
      "$SYNDROO_URL/v1/posts/post_..."
    {
      "id": "post_...",
      "status": "published",
      "publications": [
        {
          "platform": "bluesky",
          "status": "published",
          "attempts": 1,
          "externalId": "at://...",
          "externalUrl": "https://bsky.app/profile/.../post/...",
          "errorAmbiguous": false
        }
      ]
    }

    Store the platform's externalUrl next to the article if you want to show where the post landed. The marketing demo shows an example link and labels it as one, because a simulated run has no real post behind it.

Failure handling

What you seeWhat happenedWhat to do
INVALID_CONTENT The summary is longer than the platform allows. Shorten it and send a new request with a new key, or use an override for that platform.
errorAmbiguous: true The post may exist on the platform even though the call failed. Look at the account before publishing again. An automatic resend can create a duplicate.
Repeating the same request Same key and same body were sent twice. Expect HTTP 200 with replayed: true and the original post: the identical request is answered from the stored result instead of being published again.
Editing the summary, keeping the key The key is already bound to the original text. Expect HTTP 409 IDEMPOTENCY_CONFLICT. Use a new key for the edited summary.

Applies to

Syndroo 0.2.0-rc.1 (unpublished candidate). Text only: media, article cards and automatic feed ingestion are outside this version.