# Contentrain API

**Canonical:** https://apis.io/apis/contentrain-io/contentrain-io-api/  
**Provider:** Contentrain — https://apis.io/providers/contentrain-io/  
**Documentation:** https://docs.contentrain.io/developer/api-reference

Contentrain API is one of 2 APIs that [Contentrain](https://apis.io/providers/contentrain-io/) publishes on the [APIs.io](https://apis.io/) network, described by a machine-readable OpenAPI specification. This API exposes 6 JSON Schema definitions. The published artifact set on APIs.io includes an OpenAPI specification and 6 JSON Schemas.

Contentrain API as documented publicly: 51 operations. Contract generated from the documentation by API Evangelist (2026-11-04); not the provider's own document.

## Operations (51)

| Method | Path | Summary |
|---|---|---|
| POST | `/api/auth/login` | Get OAuth redirect URL |
| POST | `/api/auth/magic-link` | Send magic link email |
| GET | `/api/auth/magic/verify` | Magic-link landing (managed pair) |
| GET | `/api/auth/oauth/{provider}` | OAuth sign-in legs (managed pair) |
| POST | `/api/auth/refresh` | Exchange a refresh token (CLI) |
| POST | `/api/auth/review-login` | Directory-review password login (managed pair, opt-in) |
| POST | `/api/auth/verify` | Exchange code/token for session |
| POST | `/api/billing/webhook/{provider}` | Billing webhook receiver (per provider) |
| GET | `/api/cdn/v1/{projectid}` | CDN content delivery (API key auth; media binaries also support a keyless public-media mode gated by cdn_public_media) |
| GET | `/api/cdn/v1/{projectid}/{path}` | Fetch content through the CDN |
| POST | `/api/comments/v1/{projectid}/{modelid}/{entryid}` | Read and post comments (public) |
| GET | `/api/conversation/v1/{projectid}/history` | Conversation history (Bearer conversation key) |
| POST | `/api/conversation/v1/{projectid}/message` | Conversation API (Bearer conversation key) |
| POST | `/api/forms/v1/{projectid}/{modelid}/submit` | Form submission (public) |
| GET | `/api/health` | Health check |
| GET | `/api/media/v1/{projectid}/assets` | List assets. |
| POST | `/api/media/v1/{projectid}/assets` | Upload asset. |
| DELETE | `/api/media/v1/{projectid}/assets/{assetid}` | Delete asset. |
| GET | `/api/media/v1/{projectid}/assets/{assetid}` | Get asset. |
| PATCH | `/api/media/v1/{projectid}/assets/{assetid}` | Update asset metadata. |
| POST | `/api/media/v1/{projectid}/assets/bulk` | Bulk operations on assets. |
| POST | `/api/webhooks/github` | GitHub webhook receiver |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/attachments` | Pre‑upload files or pasted links before sending a chat message. |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/builds` | List Builds |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/builds/trigger` | Trigger Build |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/keys` | List CDN Keys |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/keys` | Create CDN Key |
| DELETE | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/keys/{keyid}` | Revoke CDN Key |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/settings` | Get CDN Settings |
| PATCH | `/api/workspaces/{workspaceid}/projects/{projectid}/cdn/settings` | Update CDN Settings |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/conversations` | Returns the caller's conversations in this project, most recent first, with title and timestamps. |
| DELETE | `/api/workspaces/{workspaceid}/projects/{projectid}/conversations/{conversationid}` | Deletes the conversation and all its messages. |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/conversations/{conversationid}/messages` | Returns up to 300 messages in chronological order, each with id, role, content, content_blocks, tool_calls, model, created_at, and turn_id. |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/forms/{modelid}/submissions` | List Submissions |
| DELETE | `/api/workspaces/{workspaceid}/projects/{projectid}/forms/{modelid}/submissions/{submissionid}` | Delete Submission |
| PATCH | `/api/workspaces/{workspaceid}/projects/{projectid}/forms/{modelid}/submissions/{submissionid}` | Update Submission Status |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/forms/{modelid}/submissions/bulk` | Bulk Update |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/media` | List media assets with filtering and pagination. |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/media` | POST /api/workspaces/{workspaceid}/projects/{projectid}/media |
| DELETE | `/api/workspaces/{workspaceid}/projects/{projectid}/media/{assetid}` | Delete an asset and all its variants from storage and database. |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/media/{assetid}` | Get full metadata for a specific media asset. |
| PATCH | `/api/workspaces/{workspaceid}/projects/{projectid}/media/{assetid}` | Update alt text, tags, or focal point for an asset. |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/media/{assetid}/preview` | Get a binary preview of a media asset (serves the file). |
| GET | `/api/workspaces/{workspaceid}/projects/{projectid}/media/{assetid}/source` | Download the file exactly as it was uploaded (the delivery master may have had metadata stripped). |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/media/bulk` | Perform bulk operations on multiple assets. |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/media/bulk-ingest` | Import many remote images in one call and get back a map from each source URL to its new delivery URL. |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/media/rehost` | Rewrite the media URLs committed in a project's content so they point at this project's delivery URLs. |
| POST | `/api/workspaces/{workspaceid}/projects/{projectid}/media/upload-url` | Import a media asset from an external URL. |
| GET | `/assets` | List assets (public). |
| POST | `/assets` | Upload (multipart or URL) a media asset via the public Media API. |
| POST | `/assets/bulk` | Bulk operations on assets (public). |

## Machine-readable artifacts (7)

- **OpenAPI** — https://artifacts.apis.io/contentrain-io/openapi/_ae-authored/contentrain-io-openapi-generated.yml
- **JSONSchema** — https://artifacts.apis.io/contentrain-io/json-schema/contentrain-io-post-api-media-v1-projectid-assets-response-schema.json
- **JSONSchema** — https://artifacts.apis.io/contentrain-io/json-schema/contentrain-io-get-api-media-v1-projectid-assets-assetid-response-schema.json
- **JSONSchema** — https://artifacts.apis.io/contentrain-io/json-schema/contentrain-io-post-api-media-v1-projectid-assets-request-schema.json
- **JSONSchema** — https://artifacts.apis.io/contentrain-io/json-schema/contentrain-io-get-api-workspaces-workspaceid-projects-projectid-cdn-builds-respons-schema.json
- **JSONSchema** — https://artifacts.apis.io/contentrain-io/json-schema/contentrain-io-get-api-workspaces-workspaceid-projects-projectid-media-assetid-resp-schema.json
- **JSONSchema** — https://artifacts.apis.io/contentrain-io/json-schema/contentrain-io-patch-api-workspaces-workspaceid-projects-projectid-media-assetid-re2-schema.json

## Other Contentrain APIs (1)

- [Contentrain Studio API](https://apis.io/apis/contentrain-io/contentrain-studio-api/)

---

Profiled by [API Evangelist](https://apievangelist.com) and published on [APIs.io](https://apis.io/apis/contentrain-io/contentrain-io-api/). The API's provider profile, Kin Score and agent-readiness rating are at https://apis.io/providers/contentrain-io/.
