Content API

The Content API manages both content feed records and website-generation projects.

It stores article and content feed records, website projects, generation status and events, Make.com dispatch and callbacks, and completed website packages. Make coordinates generation and returns the resulting package; the Content API does not write or render website HTML.

Total Items

0

Loading feed...

Website Projects

Recent website-generation projects stored by this Content API

Total website projects

0

Generation controls are disabled because this application has no browser administration authentication. Use the protected API from a trusted server or Make.com.

This browser view exposes safe summaries only: delivery emails are masked, and complete submissions require protected server access.

API Reference

Two resource groups are implemented in this same Content API application. Public access below means a response is safe to request from a browser; it does not replace deployment rate limiting or abuse protection.

Content Feed API

GET/api/feed

List content feed records.

Authentication
Public; rate limited.
Public browser access
Yes.
Request
Optional limit query (maximum 100).
Response
Feed items and total count.
Common errors
429 rate limit; 500 configuration; 503 database unavailable.

POST/api/feed

Create a feed record, or update a matching source URL or slug.

Authentication
X-API-Key when FEED_API_KEY is configured.
Public browser access
Only when no API key is configured; trusted server use is recommended.
Request
Validated feed fields; article_source_url or article_slug is required.
Response
Created or updated records.
Common errors
400 invalid JSON/database; 401 API key; 422 validation; 429 rate limit; 500 server.

PATCH/api/feed/:id

Update allowed content, card, social, or site_config fields.

Authentication
X-API-Key when FEED_API_KEY is configured.
Public browser access
Only when no API key is configured; do not put API keys in browser code.
Request
UUID path and at least one allowed field.
Response
The updated feed record.
Common errors
400 invalid ID/body; 401 API key; 404 not found; 429 rate limit; 500 server.

DELETE/api/feed/:id

Delete one feed record.

Authentication
X-API-Key when FEED_API_KEY is configured.
Public browser access
Only when no API key is configured; trusted administration is recommended.
Request
Feed-record UUID in the path.
Response
Deleted record ID and display title.
Common errors
400 invalid ID/database; 401 API key; 404 not found; 429 rate limit; 500 server.

Website Creation API

GET/api/websites

List safe website-project summaries.

Authentication
Public.
Public browser access
Yes; designed for safe summaries.
Request
Optional limit query (1–100).
Response
Summaries with masked delivery emails and total count.
Common errors
500/503 read or service failure.

POST/api/websites

Store a complete Website Builder submission.

Authentication
Public submission endpoint; deploy with appropriate edge controls.
Public browser access
Yes; intended for the future Builder connection. Never include server secrets.
Request
A non-empty complete website-project JSON object.
Response
Internal UUID, external ID, submitted status, and creation time.
Common errors
400 invalid request; 409 conflicting external ID; 500/503 storage failure.

GET/api/websites/:projectId

Retrieve a project.

Authentication
Public returns redacted data; configured Bearer token returns the full stored submission.
Public browser access
Yes for the redacted response only.
Request
Internal project UUID in the path.
Response
Safe project by default; protected server access can include submission and delivery data.
Common errors
404 not found; 500/503 read or configuration failure.

PATCH/api/websites/:projectId

Record Make progress and an optional event.

Authentication
Bearer server-configured token required.
Public browser access
No; a trusted server or Make callback only.
Request
Supported status plus optional event object.
Response
Updated protected project representation.
Common errors
400 invalid status/body; 401 token; 404 not found; 409 transition; 503 configuration.

POST/api/websites/:projectId/generate

Dispatch the stored project to the configured Make webhook.

Authentication
Bearer server-configured token required.
Public browser access
No; browser generation remains disabled.
Request
Project UUID; no submission body is needed.
Response
Queued project status and dispatched confirmation.
Common errors
401 token; 404 not found; 409 transition; 502 dispatch; 503 configuration.

POST/api/websites/:projectId/result

Store a completed package or a safe failure returned by Make.

Authentication
Bearer server-configured token required.
Public browser access
No; Make callback only.
Request
completed with generated_site, or failed with an error object; optional delivery data.
Response
Stored protected project and idempotency indicator.
Common errors
400 invalid result; 401 token; 404 not found; 409 transition; 413 over 5 MiB; 503 configuration.

Website Creation Workflow

  1. The Website Builder submits the complete website project to POST /api/websites.
  2. The Content API stores the project in Supabase.
  3. The Content API returns an internal project UUID.
  4. A protected POST /api/websites/:projectId/generate request dispatches the stored project to Make.
  5. Make reports progress through protected PATCH /api/websites/:projectId callbacks.
  6. Make returns a completed or failed package through POST /api/websites/:projectId/result.
  7. The Content API remains the system of record for status, events, generated files, and delivery information.

The Website Builder connection and live Make scenario are the next integration phase; production website generation has not yet been verified.

Project Statuses

draft · submitted · queued · generating_content · generating_site · packaging · delivering · completed · failed

Standard path: submitted → queued → generating_content → generating_site → packaging → delivering → completed. Failed projects may be retried according to the API's permitted transition rules.

Make Dispatch Contract

The Content API sends the complete stored submission to Make using this shape:

{
  "project_id": "internal-uuid",
  "external_project_id": "builder-project-id-or-null",
  "status_callback_url": "https://content-api.example/api/websites/internal-uuid",
  "result_callback_url": "https://content-api.example/api/websites/internal-uuid/result",
  "submission": { "...complete stored website submission...": true },
  "site_config": {}
}

Make must authenticate PATCH and result callbacks with Authorization: Bearer <server-configured-token>. The token belongs only in server configuration and is never exposed here or in browser code.

Completed Website Package

{
  "site_title": "Example Business",
  "site_config": {},
  "pages": [{
    "slug": "home",
    "filename": "index.html",
    "title": "Home",
    "html": "<!doctype html>..."
  }],
  "assets": [{
    "type": "image",
    "filename": "example.jpg",
    "url": "https://example.com/example.jpg"
  }],
  "publishing_guide": "Deployment instructions..."
}

The Content API validates and stores this package as data. It does not execute or render the submitted HTML.

Implementation Status

Implemented

  • Website-project persistence
  • Safe project listing and retrieval
  • Lifecycle updates and event tracking
  • Protected generation dispatch
  • Make callback endpoints
  • Completed and failed package storage
  • Supabase database tables

Still to be connected and verified

  • Website Builder submission flow
  • Live Make website-generation scenario
  • Full production dispatch and callback smoke test
  • Authenticated browser administration controls

site_config Example

The site_config field accepts a JSON object for custom display settings, scheduling, and metadata:

{
  "site_config": {
    "display": {
      "featured": true,
      "priority": 1,
      "theme": "highlight"
    },
    "scheduling": {
      "publish_at": "2026-04-11T12:00:00Z",
      "expires_at": null
    },
    "metadata": {
      "source": "make_automation",
      "version": "1.0"
    }
  }
}

Max size: 1MB. Stored as JSONB in the database for flexible querying.