Skip to content

Autoposting with Chimpee

Chimpee is a content-relay tool that can POST a JSON payload to any webhook URL whenever it detects a new item in a source feed. This guide shows how to point Chimpee at the Canverly Public API so every new item flows directly into a Canverly site as a published post.

1. Create an API Key in the admin

  1. Sign in to https://admin.canverly.com with an account that owns the target site.
  2. Switch to the target site using the site picker in the top bar.
  3. Navigate to Configurações → Integrações API → API Keys.
  4. Click Criar (Create).
  5. Give the key a recognizable name, e.g. chimpee-autopost.
  6. Select the scopes:
    • posts:write (required to publish)
    • post_types:read (recommended, so Chimpee can validate the payload shape)
  7. Click Gerar chave (Generate key).
  8. Copy the key now — it starts with ck_live_ (or ck_test_ in staging) and is shown exactly once. If you lose it, revoke it and create a new one.

2. Configure Chimpee’s webhook publisher

In the Chimpee dashboard, open the source you want to autopost from and add a publisher of type Webhook:

FieldValue
URLhttps://api.canverly.com/v1/posts
MethodPOST
Content-Typeapplication/json
Header: AuthorizationBearer ck_live_xxxxxxxxxxxx
Header: Idempotency-Key{{item.id}} (Chimpee template — guarantees deduplication)

The Idempotency-Key is optional but strongly recommended: if Chimpee retries a delivery, Canverly will return the same 201 response without creating a duplicate post.

3. JSON payload Chimpee should POST

Configure the webhook body as a JSON template. The minimal shape Canverly accepts is:

{
"post_type": "post",
"status": "published",
"title": "{{item.title}}",
"slug": "{{item.slug}}",
"excerpt": "{{item.summary}}",
"content_html": "{{item.content_html}}",
"cover_image_url": "{{item.image}}",
"tags": ["{{item.category}}"],
"published_at": "{{item.published_at}}"
}
  • post_type must match a slug returned by GET /v1/post-types.
  • status can be draft, published, or scheduled. When scheduled, published_at must be in the future.
  • slug is optional; if omitted Canverly derives one from title.
  • content_html is sanitized server-side — <script> and event handlers are stripped.

4. Mapping Chimpee fields to Canverly post fields

Chimpee fieldCanverly fieldNotes
item.titletitlePlain text, max 240 chars.
item.slugslugLowercased, hyphenated. Optional.
item.summaryexcerptPlain text, max 500 chars.
item.content_htmlcontent_htmlSanitized HTML.
item.imagecover_image_urlMust be HTTPS. Canverly will mirror it to its CDN.
item.categorytags[]Tags are auto-created if missing.
item.published_atpublished_atISO 8601 UTC. Defaults to now if omitted.
item.idIdempotency-Key headerUsed for retry-safety, not stored as a field.

If your source has fields that don’t map cleanly (e.g. structured author_bio, custom taxonomies), expose them as a custom post type in the admin first and POST against that post_type slug — the response from GET /v1/post-types will tell Chimpee exactly which fields are allowed.

5. Verifying that the post landed

After Chimpee fires its first delivery, confirm the post is live:

  1. Check Chimpee’s delivery log — a successful publish returns HTTP 201 Created with a JSON body containing id, slug, and url.
  2. Open the url from the response in a browser. It will be https://<your-site-domain>/<slug> (or https://<your-site-domain>/<post-type-slug>/<slug> for custom post types).
  3. If something looks wrong, hit GET https://api.canverly.com/v1/posts/{id} with the same API key to inspect the stored record.

Troubleshooting

  • 401 Unauthorized — the key was revoked, never existed, or was sent without the Bearer prefix.
  • 403 Forbidden — the key is valid but lacks posts:write. Re-mint with the right scope.
  • 422 Unprocessable Entity — payload failed validation. The response body’s errors array lists each field. Most common cause: post_type slug typo.
  • 429 Too Many Requests — Chimpee is exceeding 60 req/min. Respect the Retry-After header (Chimpee does this by default).