The Content API manages your video library. Use it to create content records, update metadata, and control availability.
Endpoints
| Method | Endpoint | Description |
|---|
POST | /v1/content | Create content from URL |
GET | /v1/content | List all content |
GET | /v1/content/{id} | Get content by ID |
PATCH | /v1/content/{id} | Update content |
DELETE | /v1/content/{id} | Delete content |
Create content
Creates a new content record and starts processing.
Request body
URL to the source video file. Must be publicly accessible or a signed URL.
Display title (max 200 characters).
Optional description (max 2000 characters).
Tags for categorization and filtering.
Custom metadata key-value pairs.
Initial visibility: private, unlisted, or public.
ISO 8601 timestamp for scheduled publishing.
Example request
curl -X POST https://api.shortkit.dev/v1/content \
-H "Authorization: Bearer sk_live_your_secret_key" \
-H "Content-Type: application/json" \
-d '{
"sourceUrl": "https://storage.example.com/videos/my-video.mp4",
"title": "Product Launch Announcement",
"description": "Exciting news about our latest product",
"tags": ["announcement", "product"],
"metadata": {
"campaign": "spring-2024",
"creator": "marketing-team"
},
"visibility": "private"
}'
Response
{
"data": {
"id": "cnt_abc123",
"title": "Product Launch Announcement",
"description": "Exciting news about our latest product",
"status": "processing",
"visibility": "private",
"duration": null,
"aspectRatio": null,
"tags": ["announcement", "product"],
"metadata": {
"campaign": "spring-2024",
"creator": "marketing-team"
},
"thumbnails": null,
"createdAt": "2024-02-04T12:00:00Z",
"updatedAt": "2024-02-04T12:00:00Z",
"publishedAt": null
},
"meta": {
"requestId": "req_xyz789"
}
}
List content
Retrieves a paginated list of content.
Query parameters
Pagination cursor from previous response.
Filter by status: processing, ready, failed.
Filter by visibility: private, unlisted, public.
Comma-separated tags to filter by.
Filter by creation date (ISO 8601).
Filter by creation date (ISO 8601).
Search titles and descriptions.
Example request
curl "https://api.shortkit.dev/v1/content?limit=20&status=ready&tags=product" \
-H "Authorization: Bearer sk_live_your_secret_key"
Response
{
"data": [
{
"id": "cnt_abc123",
"title": "Product Launch Announcement",
"status": "ready",
"visibility": "public",
"duration": 45.2,
"aspectRatio": "9:16",
"thumbnails": {
"default": "https://cdn.shortkit.dev/thumbnails/cnt_abc123/default.jpg",
"small": "https://cdn.shortkit.dev/thumbnails/cnt_abc123/small.jpg"
},
"createdAt": "2024-02-04T12:00:00Z",
"publishedAt": "2024-02-04T14:00:00Z"
}
],
"meta": {
"total": 150,
"nextCursor": "eyJvZmZzZXQiOjIwfQ=="
}
}
Get content
Retrieves a single content item by ID.
Path parameters
Content ID (e.g., cnt_abc123).
Example request
curl https://api.shortkit.dev/v1/content/cnt_abc123 \
-H "Authorization: Bearer sk_live_your_secret_key"
Response
{
"data": {
"id": "cnt_abc123",
"title": "Product Launch Announcement",
"description": "Exciting news about our latest product",
"status": "ready",
"visibility": "public",
"duration": 45.2,
"aspectRatio": "9:16",
"resolution": {
"width": 1080,
"height": 1920
},
"codecs": ["h264", "av1"],
"tags": ["announcement", "product"],
"metadata": {
"campaign": "spring-2024",
"creator": "marketing-team"
},
"thumbnails": {
"default": "https://cdn.shortkit.dev/thumbnails/cnt_abc123/default.jpg",
"small": "https://cdn.shortkit.dev/thumbnails/cnt_abc123/small.jpg",
"animated": "https://cdn.shortkit.dev/thumbnails/cnt_abc123/preview.webp"
},
"streamingUrls": {
"hls": "https://video.shortkit.dev/v1/streams/cnt_abc123/manifest.m3u8",
"dash": "https://video.shortkit.dev/v1/streams/cnt_abc123/manifest.mpd"
},
"analytics": {
"impressions": 12500,
"plays": 8200,
"completions": 4100,
"averageWatchTime": 32.5
},
"createdAt": "2024-02-04T12:00:00Z",
"updatedAt": "2024-02-04T14:30:00Z",
"publishedAt": "2024-02-04T14:00:00Z"
},
"meta": {
"requestId": "req_xyz789"
}
}
Content status
| Status | Description |
|---|
processing | Video is being transcoded |
ready | Video is ready for playback |
failed | Processing failed |
Update content
Updates content metadata. Cannot update source video after creation.
Request body
Merge with existing metadata (use null to remove keys).
Update visibility: private, unlisted, public.
Schedule publishing (ISO 8601) or null to cancel.
Example request
curl -X PATCH https://api.shortkit.dev/v1/content/cnt_abc123 \
-H "Authorization: Bearer sk_live_your_secret_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated Title",
"visibility": "public",
"tags": ["featured", "product"],
"metadata": {
"featured": true,
"campaign": null
}
}'
Response
Returns the updated content object.
Delete content
Permanently deletes content and all associated data.
Path parameters
Example request
curl -X DELETE https://api.shortkit.dev/v1/content/cnt_abc123 \
-H "Authorization: Bearer sk_live_your_secret_key"
Response
{
"data": {
"id": "cnt_abc123",
"deleted": true
},
"meta": {
"requestId": "req_xyz789"
}
}
Deletion is permanent. All video files, thumbnails, and analytics data are removed within 24 hours.
Content object
Unique identifier (prefix: cnt_).
Processing status: processing, ready, failed.
Visibility: private, unlisted, public.
Video duration in seconds (available when ready).
Aspect ratio (e.g., 9:16, 16:9).
Source resolution with width and height.
Available codecs (e.g., ["h264", "av1"]).
HLS and DASH streaming URLs (signed, time-limited).
Engagement metrics summary.
Creation timestamp (ISO 8601).
Last update timestamp (ISO 8601).
Publication timestamp (ISO 8601).
Webhooks
Subscribe to content lifecycle events:
| Event | Trigger |
|---|
content.ready | Processing completed |
content.errored | Processing failed |
See Webhooks for setup instructions.
Next steps