Skip to content
scsiwyg
sign insign up
get startedhow it worksmcpscsiblogcommunityapiplaygroundswaggersign insign up
โ† all posts

API-First Publishing for the AI-IDE Era

apiaiide

API-first publishing for the AI-IDE era

The first wave of blogging platforms had web editors. The second wave had markdown files in git repos. The third wave โ€” the one we're in now โ€” has AI agents that can write, edit, and publish content autonomously.

scsiwyg is built for the third wave.

The API is the product

Every scsiwyg interaction goes through the REST API:

EndpointMethodWhat it does
/api/{username}/postsGETList published posts
/api/{username}/postsPOSTCreate a post
/api/{username}/posts/{slug}GETRead a post
/api/{username}/posts/{slug}PUTUpdate a post
/api/{username}/posts/{slug}DELETEDelete a post

Read endpoints are public. Write endpoints use Bearer token auth. That's the entire API surface for content operations.

There's no web editor that's secretly the "real" way to use the platform. There's no admin panel that has features the API doesn't. The API is the product. The web views are just rendering what the API serves.

Why this matters for AI IDEs

When you work in Cursor, Claude Code, or GitHub Copilot, your AI assistant can:

  1. Read the OpenAPI spec at /api/openapi.json and understand every endpoint, request format, and response schema
  2. Generate valid post JSON from a natural language prompt like "write a blog post about my experience at the conference"
  3. Publish directly via the API with your Bearer token
  4. Check the result by GETting the published post

The entire workflow โ€” from "I want to blog about X" to "the post is live" โ€” can happen inside your IDE without you ever opening a browser.

bash
# From Claude Code or any terminal:
curl -X POST https://scsiwyg.com/api/alice/posts \
  -H "Authorization: Bearer $SCSIWYG_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "conference-recap",
    "title": "Conference Recap",
    "body": "# What I learned\n\nThe keynote was about..."
  }'

The Node.js script pattern

For teams that want something more structured than curl but less complex than a full CMS client:

import { readFileSync } from 'fs';

const post = JSON.parse(readFileSync('post.json', 'utf-8'));

const res = await fetch(
  `https://scsiwyg.com/api/${process.env.SCSIWYG_USER}/posts`,
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.SCSIWYG_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(post),
  }
);

console.log(res.status, await res.json());

That's a complete publishing client. 15 lines. No dependencies.

Convention over configuration

Your blog URL is /username. Your post URL is /username/slug. There's nothing to configure, no custom domains to set up, no routing rules to define. The convention IS the configuration.

This means an AI agent can construct URLs without asking you. It knows where your blog is. It knows where each post will live. It can link between posts, preview URLs, and verify publication โ€” all from the URL convention alone.