Skip to content

CMS

Structured content with content types, entries, and assets.

Project-scoped schema definitions.

{
"slug": "blog-post",
"name": "Blog Post",
"fields": [
{
"key": "title",
"name": "Title",
"field_type": "text",
"required": true
},
{
"key": "body",
"name": "Body",
"field_type": "richtext",
"required": true
},
{
"key": "published_date",
"name": "Published Date",
"field_type": "date",
"required": false
}
]
}

Field types: text, richtext, number, boolean, date, reference, json, image, file

Environment-scoped instances of content types.

{
"slug": "getting-started",
"data": {
"title": "Getting Started with Soup",
"body": "<p>Welcome...</p>",
"published_date": "2025-02-01"
},
"status": "published"
}

Status: draft, published

Metadata for files stored in S3-compatible bucket (Tigris):

{
"id": "uuid",
"filename": "hero.jpg",
"content_type": "image/jpeg",
"size": 245678,
"url": "https://assets.getsoup.dev/...",
"width": 1920,
"height": 1080
}

Upload assets via dashboard, reference in entries.

Read-only API for fetching published content:

GET /deliver/{project}/{env}/types
GET /deliver/{project}/{env}/{type}?page=1&limit=20&status=published
GET /deliver/{project}/{env}/{type}/{entry}

No authentication required. Use in frontend apps.

TipTap-based editor in dashboard. Stores HTML in richtext fields.

Content Types (project-scoped):

GET /api/v1/projects/{slug}/content-types
POST /api/v1/projects/{slug}/content-types
GET /api/v1/projects/{slug}/content-types/{typeSlug}
PATCH /api/v1/projects/{slug}/content-types/{typeSlug}
DELETE /api/v1/projects/{slug}/content-types/{typeSlug}

Content Entries (environment-scoped):

GET /api/v1/projects/{slug}/environments/{env}/content/{type}
POST /api/v1/projects/{slug}/environments/{env}/content/{type}
GET /api/v1/projects/{slug}/environments/{env}/content/{type}/{entry}
PATCH /api/v1/projects/{slug}/environments/{env}/content/{type}/{entry}
DELETE /api/v1/projects/{slug}/environments/{env}/content/{type}/{entry}
PUT /api/v1/projects/{slug}/environments/{env}/content/{type}/{entry}/publish
  • Personal (Free): 100 entries per environment
  • Starter ($5/user): Unlimited entries