API Reference

Webhooks Reference

Blogree delivers content to your sites via HTTPS webhooks. This reference covers all webhook events, headers, payload schemas, retry behavior, and the delivery confirmation endpoint.

Delivery Headers

Every Blogree webhook request includes these HTTP headers:

HeaderExample ValueDescription
Content-Typeapplication/jsonPayload encoding
X-Blogree-Signaturesha256=abc123...HMAC-SHA256 of raw body
X-Blogree-Timestamp1680432000Unix timestamp of delivery
X-Blogree-Eventpost.publishedEvent type
X-Blogree-Deliverydel_xyz789Unique delivery ID
X-Blogree-Version2026-04-01API version

Webhook Events

post.published

Fired when a post is published immediately (Publish Now) or when a scheduled post's delivery time arrives.

{ "event": "post.published", "post": { "id": "post_xyz789", "version": 3, "slug": "my-blog-post-title", "title": "My Blog Post Title", "excerpt": "Short summary of the post...", "body": { "html": "<h1>Title</h1><p>Content here...</p>", "markdown": "# Title\n\nContent here...", "json": { "type": "doc", "content": [...] } }, "meta": { "title": "SEO Title | My Site", "description": "Meta description (max 160 chars)", "og_image": "https://cdn.example.com/og-image.jpg", "canonical_url": "https://primarysite.com/blog/my-post" }, "tags": ["AI", "blogging", "automation"], "status": "published", "published_at": "2026-04-02T09:00:00Z" }, "site": { "id": "site_abc123", "name": "My Tech Blog" }, "delivered_at": "2026-04-02T09:00:03Z" }

post.updated

Fired when a published post is edited and re-published. Your handler should update the existing post content by slug.

{ "event": "post.updated", "post": { "id": "post_xyz789", "version": 4, // incremented from 3 "slug": "my-blog-post-title", "title": "Updated Title", // ... full post object with updated content }, "previous_version": 3, "site": { "id": "site_abc123", "name": "My Tech Blog" } }

post.deleted

Fired when a post is deleted from Blogree. Use this to remove the post from your site.

{ "event": "post.deleted", "post": { "id": "post_xyz789", "slug": "my-blog-post-title" }, "site": { "id": "site_abc123" }, "deleted_at": "2026-04-05T14:30:00Z" }

site.test

Fired when you click Test Delivery in the dashboard. Use to verify your endpoint is working.

{ "event": "site.test", "test": true, "post": { ...sample post object with fake data }, "site": { "id": "site_abc123", "name": "My Tech Blog" } }

Retry Behavior

If your endpoint doesn't return 200 OK, Blogree retries delivery on this schedule:

Attempt 1
Immediate
On publish/schedule time
Attempt 2
+30 seconds
If attempt 1 fails
Attempt 3
+5 minutes
If attempt 2 fails
Attempt 4 (final)
+30 minutes
If attempt 3 fails
⚠️
After all 4 attempts fail, the delivery is marked 'failed'. You can trigger a manual retry from the Analytics dashboard or via the Analytics API.

Pull API — Delivery Confirmation

After successfully processing a webhook, your site can call the Pull API to explicitly confirm delivery. This gives Blogree accurate delivery metrics and allows you to report errors back.

POST /api/pull/confirm X-API-Key: bk_live_xxxxxxxxxxxx Content-Type: application/json { "post_id": "post_xyz789", "site_id": "site_abc123", "status": "delivered", // or "failed" "error_message": null, // error description if status is "failed" "metadata": { "your_post_id": 12345 // optional: any data to store with delivery record } }

Pull API — Fetch Posts

Your site can also pull posts on-demand rather than waiting for webhook delivery:

// Fetch all published posts GET /api/pull/posts?limit=20&page=1 X-API-Key: bk_live_xxxxxxxxxxxx // Fetch single post by slug GET /api/pull/posts/my-blog-post-slug X-API-Key: bk_live_xxxxxxxxxxxx // Fetch posts by tag GET /api/pull/posts?tag=AI+blogging&limit=10 X-API-Key: bk_live_xxxxxxxxxxxx