Developers
Content Ingestion API
A small, key-authenticated REST API for programmatically publishing posts, profiles and images to the Activepieces blog. Every entity created through this API is flagged as AI-generated.
Authentication
All requests use a bearer token. Generate keys in the CMS admin under API Keys; a key is shown once at creation. Send it as:
Authorization: Bearer hype_live_xxxxxxxx…
Keys are secrets — use them server-side only. Base URL: https://www.activepieces.com.
Create a profile POST /api/v1/profiles
A profile is a post's author (name, bio, avatar). Pass an avatarUrl and we fetch + resize it, or an avatarAssetId from /media. Pass your own externalId to make the call idempotent.
curl -X POST https://www.activepieces.com/api/v1/profiles \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "hype_author_42",
"name": "Dana Rivers",
"bio": "Writes about automation and AI.",
"avatarUrl": "https://cdn.hype.example/avatars/dana.png"
}'Publish a post POST /api/v1/posts
content is Markdown. categories are matched by name and created if missing. Attach an author via profileExternalId, profileId, or an inline profile object (auto-created). status defaults to published — the post is live immediately.
curl -X POST https://www.activepieces.com/api/v1/posts \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "hype_post_1001",
"title": "5 automations every startup needs",
"content": "# Intro\n\nMarkdown body of the post…",
"excerpt": "A quick tour of high-leverage automations.",
"categories": ["AI", "Productivity"],
"imageUrl": "https://cdn.hype.example/covers/1001.png",
"profileExternalId": "hype_author_42",
"status": "published"
}'Response
{ "id": 412, "slug": "5-automations-every-startup-needs",
"url": "/blog/5-automations-every-startup-needs",
"status": "published", "aiGenerated": true }Upload an image POST /api/v1/media
Returns an asset { id, url, thumbnail, small, medium }. Use the id as imageAssetId / avatarAssetId, or skip this and pass imageUrl/avatarUrl directly when creating a post/profile.
# By URL (we download + resize):
curl -X POST https://www.activepieces.com/api/v1/media \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://cdn.hype.example/img.png", "alt": "A robot" }'
# Or upload bytes:
curl -X POST https://www.activepieces.com/api/v1/media \
-H "Authorization: Bearer $API_KEY" \
-F file=@./cover.png -F alt="A robot"Idempotency
Pass your own externalId on posts and profiles. Re-sending the same externalId updates the existing record instead of creating a duplicate — safe to retry.
Reading & dedupe
GET /api/v1/posts, GET /api/v1/profiles (both accept ?externalId= or ?limit=), and GET /api/v1/categories let you check what already exists.




