Blog management and multi-channel publishing
Pressroom supports scraping existing blog content, importing content from files or text, and publishing across multiple channels including Medium, Slack, and...
Blog management and multi-channel publishing
Pressroom supports scraping existing blog content, importing content from files or text, and publishing across multiple channels including Medium, Slack, and Dev.to.
Blog scraping and import
Scrape an existing blog
Import posts from an existing blog into Pressroom’s content library:
POST /api/blog/scrape
{"url": "https://blog.example.com"}
The scraper crawls the blog, extracts posts (title, body, date, author), and stores them. Scraped posts serve as:
- Voice training data — Examples of your existing writing style
- Content library — Reference material for future generation
- Performance baselines — When combined with GSC data, shows what’s working
List blog posts
GET /api/blog/posts?limit=50
Delete a blog post
DELETE /api/blog/posts/{post_id}
Content import
Import content from text or files without scraping a live blog.
Paste import
POST /api/import/paste
{
"text": "Your article content here...",
"title": "Article Title",
"channel": "blog"
}
File import
POST /api/import/file
Upload a file via multipart form data. Supported formats: .txt, .md, .html, .docx.
Import templates
GET /api/import/templates
Returns structured templates for bulk content import.
Medium publishing
Publish content items to Medium as drafts:
POST /api/medium/publish
{"content_id": 42, "publish_status": "draft"}
Content is published as a Medium draft, giving you a chance to review formatting before going live. Requires a Medium integration token configured in Settings > Integrations.
Slack notifications
Push content updates to Slack channels for team visibility.
Test connection
POST /api/slack/test
Sends a test message to verify the Slack webhook is working.
Notify for a specific item
POST /api/slack/notify/{content_id}
Sends a Slack message with the content item’s headline, channel, and status.
Notify the queue
POST /api/slack/notify-queue
Pushes a summary of the current content queue to Slack — useful as a daily digest or after a pipeline run.
Multi-channel publishing workflow
Pressroom generates content for multiple channels simultaneously. A typical multi-channel workflow:
1. Generate across channels
POST /api/pipeline/generate
{"channels": ["linkedin", "blog", "devto", "newsletter", "x_thread", "release_email", "yt_script", "github_gist"]}
2. Review in the queue
Each channel gets its own content item with format-appropriate output. Review, edit, and approve per channel.
3. Publish to connected platforms
POST /api/publish
Content routes to the correct platform based on channel:
| Channel | Destination |
|---|---|
linkedin | LinkedIn (via OAuth) |
devto | Dev.to (via API) |
blog | Connected blog platform / HubSpot CMS |
facebook | Facebook page (via OAuth) |
release_email | Email draft for sending |
newsletter | Email draft (digest format) |
yt_script | YouTube (via video studio) |
github_gist | GitHub Gist (via team member’s account) |
4. Notify the team
POST /api/slack/notify-queue
5. Publish to Medium
POST /api/medium/publish
{"content_id": 42, "publish_status": "draft"}
Medium publishing is separate from the main publish flow since it creates drafts for manual review.
Channel skills
Pressroom includes 8 channel-specific generation templates in skills/channels/. These templates define the format, length, tone, and structure for each output channel:
| Skill | Channel | Output |
|---|---|---|
channel_linkedin | Professional post with hook (200-300 words) | |
channel_devto | Dev.to | Technical article with frontmatter |
channel_blog | Blog | Long-form article with headers (800-1500 words) |
channel_newsletter | Newsletter | Digest format (500-800 words) |
channel_x_thread | X/Twitter | Thread of short posts (3-5 tweets) |
channel_github_gist | GitHub Gist | Technical gist with explanation |
channel_release_email | Email template with subject line (300-500 words) | |
channel_yt_script | YouTube | Script with hook, sections, lower thirds |
Channel skills are wired into the generation pipeline and invoked automatically based on the requested channels.
Content performance tracking
After publishing, track how content performs on LinkedIn and Dev.to:
List all published performance
GET /api/content/published/performance
Get performance for a specific item
GET /api/content/{content_id}/performance
Fetch fresh metrics
POST /api/content/{content_id}/fetch-performance
Triggers a fresh pull of metrics (views, likes, comments, shares) from the publishing platform.
Performance data helps identify what resonates with your audience and feeds back into content generation decisions.
Brand scraping
Auto-discover brand assets from a domain crawl:
POST /api/brand/scrape
{"domain": "example.com"}
Returns discovered logos, brand colors, fonts, and social links. Brand assets are used in video rendering (chyrons, overlays) and content formatting.
Crawl a specific brand page
POST /api/brand/crawl-target
{"url": "https://example.com/brand", "type": "brand_page"}
View brand data
GET /api/brand/{org_id}