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.
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_URLandSYNDROO_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
-
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.
-
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"] }' -
Expected acceptance
{ "id": "post_...", "status": "queued" } -
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
externalUrlnext 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 see | What happened | What 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.