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
- Sign in to
https://admin.canverly.comwith an account that owns the target site. - Switch to the target site using the site picker in the top bar.
- Navigate to Configurações → Integrações API → API Keys.
- Click Criar (Create).
- Give the key a recognizable name, e.g.
chimpee-autopost. - Select the scopes:
posts:write(required to publish)post_types:read(recommended, so Chimpee can validate the payload shape)
- Click Gerar chave (Generate key).
- Copy the key now — it starts with
ck_live_(orck_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:
| Field | Value |
|---|---|
| URL | https://api.canverly.com/v1/posts |
| Method | POST |
| Content-Type | application/json |
Header: Authorization | Bearer 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_typemust match aslugreturned byGET /v1/post-types.statuscan bedraft,published, orscheduled. Whenscheduled,published_atmust be in the future.slugis optional; if omitted Canverly derives one fromtitle.content_htmlis sanitized server-side —<script>and event handlers are stripped.
4. Mapping Chimpee fields to Canverly post fields
| Chimpee field | Canverly field | Notes |
|---|---|---|
item.title | title | Plain text, max 240 chars. |
item.slug | slug | Lowercased, hyphenated. Optional. |
item.summary | excerpt | Plain text, max 500 chars. |
item.content_html | content_html | Sanitized HTML. |
item.image | cover_image_url | Must be HTTPS. Canverly will mirror it to its CDN. |
item.category | tags[] | Tags are auto-created if missing. |
item.published_at | published_at | ISO 8601 UTC. Defaults to now if omitted. |
item.id | Idempotency-Key header | Used 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:
- Check Chimpee’s delivery log — a successful publish returns HTTP
201 Createdwith a JSON body containingid,slug, andurl. - Open the
urlfrom the response in a browser. It will behttps://<your-site-domain>/<slug>(orhttps://<your-site-domain>/<post-type-slug>/<slug>for custom post types). - 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 theBearerprefix.403 Forbidden— the key is valid but lacksposts:write. Re-mint with the right scope.422 Unprocessable Entity— payload failed validation. The response body’serrorsarray lists each field. Most common cause:post_typeslug typo.429 Too Many Requests— Chimpee is exceeding 60 req/min. Respect theRetry-Afterheader (Chimpee does this by default).