API keys are team-scoped. Rotate keys regularly and delete unused keys immediately.
Base URL & Authentication
All requests target the versioned API base URL and must include a Bearer token.
Base URL: https://contentrabbitai.com/api/public/v1
Authorization: Bearer YOUR_API_KEY
Getting an API Key
- Open Settings > Team.
- Choose the team you want to automate.
- Go to the API & Integrations tab and press Generate API key.
- Copy the value immediately — you can always rotate to get a fresh key.
Rate Limiting
Every API key is rate-limited per minute. Limits vary by plan tier. Inspect the response headers to track usage:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per window |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Exceeding limits returns 429 Too Many Requests. Retry with exponential backoff.
Pagination
The API supports two pagination modes (do not combine them).
Cursor-based (default)
Pass the nextCursor value from the previous response as the cursor query parameter. This mode requires the default sort (createdAt desc).
{
"paging": {
"nextCursor": "clx9abc123",
"page": null,
"total": null
}
}
Page-based
Pass page=N (1-indexed). The response includes total, pages, and limit in the paging object.
{
"paging": {
"nextCursor": null,
"page": 2,
"limit": 25,
"total": 142,
"pages": 6
}
}
Error Format
All errors return a JSON body with a requestId for tracing:
{
"requestId": "key_abc123",
"error": "Post not found",
"details": null
}
Common HTTP status codes:
| Status | Meaning |
|---|---|
400 | Invalid request parameters or body |
401 | Missing or invalid API key |
402 | Plan limit reached |
403 | Insufficient permissions |
404 | Resource not found |
409 | Conflict (concurrent modification) |
429 | Rate limit exceeded |
Quick Start
List recent posts
curl -X GET \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://contentrabbitai.com/api/public/v1/posts?limit=10&status=draft"
Create and schedule a post
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platformType": "twitter",
"content": "Hello from the API!",
"title": "My first API post",
"status": "draft"
}' \
"https://contentrabbitai.com/api/public/v1/posts"
Then schedule it:
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scheduledAt": "2025-06-01T10:00:00Z",
"selectedPlatforms": ["twitter", "linkedin"]
}' \
"https://contentrabbitai.com/api/public/v1/posts/POST_ID/schedule"
Publish immediately
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platforms": ["twitter", "linkedin"]
}' \
"https://contentrabbitai.com/api/public/v1/posts/POST_ID/publish"
Posts
/postsList posts with cursor-based or page-based pagination and filters.
| Name | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Maximum number of posts to return. |
| cursor | string | No | Cursor from the previous page. |
| page | integer | No | 1-indexed page number. |
| status | string | No | Filter by post status. |
| platform | string | No | Filter by platform type. |
| search | string | No | Search post titles. |
| startDate | date-time | No | Earliest post creation date. |
| endDate | date-time | No | Latest post creation date. |
| sortBy | string | No | Field to sort by. |
| sortOrder | string | No | Sort direction. |
| include | string | No | Comma-separated optional fields. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"platformType": "linkedin",
"title": "Weekly update",
"content": null,
"tags": [
"update",
"product"
],
"mediaIds": [],
"category": null,
"scheduledAt": "2025-06-01T10:00:00.000Z",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "post_p3k9m2x7q4t1w8z6c5v0b3n"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"totalReturned": 1
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"platformType": "linkedin",
"title": "Weekly update",
"content": null,
"tags": [
"update",
"product"
],
"mediaIds": [],
"category": null,
"scheduledAt": "2025-06-01T10:00:00.000Z",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "post_p3k9m2x7q4t1w8z6c5v0b3n"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"totalReturned": 1
}
}/postsCreate a new draft or scheduled post.
| Name | Type | Required | Description |
|---|---|---|---|
| platformType | string | Yes | Primary platform. |
| content | string | No | Post content. |
| title | string | No | Post title. |
| status | string | No | Post status. |
| scheduledAt | date-time | No | Optional scheduled time. |
| tags | string[] | No | Post tags. |
| category | string | No | Post category. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "draft",
"platformType": "linkedin",
"scheduledAt": null,
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "draft",
"platformType": "linkedin",
"scheduledAt": null,
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/posts/{postId}Fetch a single post by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| include | string | No | Comma-separated optional fields. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"platformType": "linkedin",
"title": "Weekly update",
"content": null,
"tags": [
"update",
"product"
],
"mediaIds": [],
"category": "announcements",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z",
"platformSettings": {
"selectedPlatforms": [
"twitter",
"linkedin"
],
"linkedin": {
"content": "Here is what we shipped this week..."
}
},
"publishedPlatforms": [],
"platformResults": {
"twitter": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
},
"linkedin": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
}
}
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"platformType": "linkedin",
"title": "Weekly update",
"content": null,
"tags": [
"update",
"product"
],
"mediaIds": [],
"category": "announcements",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z",
"platformSettings": {
"selectedPlatforms": [
"twitter",
"linkedin"
],
"linkedin": {
"content": "Here is what we shipped this week..."
}
},
"publishedPlatforms": [],
"platformResults": {
"twitter": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
},
"linkedin": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
}
}
}
}/posts/{postId}Partially update a post. Only provided fields change.
| Name | Type | Required | Description |
|---|---|---|---|
| content | string | No | Updated post content. |
| title | string | No | Updated post title. |
| status | string | No | Updated post status. |
| tags | string[] | No | Updated post tags. |
| scheduledAt | date-time | No | Updated scheduled time. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"platformType": "linkedin",
"title": "Updated title",
"content": null,
"tags": [
"update",
"product"
],
"mediaIds": [],
"category": "announcements",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z",
"platformSettings": {
"selectedPlatforms": [
"twitter",
"linkedin"
],
"linkedin": {
"content": "Here is what we shipped this week..."
}
},
"publishedPlatforms": [],
"platformResults": {
"twitter": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
},
"linkedin": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
}
}
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"platformType": "linkedin",
"title": "Updated title",
"content": null,
"tags": [
"update",
"product"
],
"mediaIds": [],
"category": "announcements",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z",
"platformSettings": {
"selectedPlatforms": [
"twitter",
"linkedin"
],
"linkedin": {
"content": "Here is what we shipped this week..."
}
},
"publishedPlatforms": [],
"platformResults": {
"twitter": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
},
"linkedin": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
}
}
}
}/posts/{postId}Delete a post.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"deleted": true
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"deleted": true
}
}/posts/{postId}/publishPublish a post immediately to selected platforms.
| Name | Type | Required | Description |
|---|---|---|---|
| platforms | string[] | No | Optional platform overrides. |
| firstComment | string | No | Optional first comment. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"results": [
{
"platform": "twitter",
"success": true,
"status": "published",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543",
"externalId": "1798765432109876543",
"publishedAt": "2025-05-30T14:00:00.000Z"
}
]
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"results": [
{
"platform": "twitter",
"success": true,
"status": "published",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543",
"externalId": "1798765432109876543",
"publishedAt": "2025-05-30T14:00:00.000Z"
}
]
}
}/posts/{postId}/retryRetry publishing for platforms that previously failed.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"results": [
{
"platform": "twitter",
"success": true,
"status": "published",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543",
"publishedAt": "2025-05-30T14:00:00.000Z"
},
{
"platform": "linkedin",
"success": false,
"status": "failed",
"error": "Platform API returned HTTP 429"
}
]
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"results": [
{
"platform": "twitter",
"success": true,
"status": "published",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543",
"publishedAt": "2025-05-30T14:00:00.000Z"
},
{
"platform": "linkedin",
"success": false,
"status": "failed",
"error": "Platform API returned HTTP 429"
}
]
}
}/posts/{postId}/statusGet the current publish status and per-platform results.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "error",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"platformResults": {
"twitter": {
"status": "published",
"publishedAt": "2025-06-01T10:00:04.000Z",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543",
"externalId": "1798765432109876543"
},
"linkedin": {
"status": "failed",
"error": "Platform API returned HTTP 429"
}
},
"publishedPlatforms": [
"twitter"
],
"updatedAt": "2025-06-01T10:00:04.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "error",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"platformResults": {
"twitter": {
"status": "published",
"publishedAt": "2025-06-01T10:00:04.000Z",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543",
"externalId": "1798765432109876543"
},
"linkedin": {
"status": "failed",
"error": "Platform API returned HTTP 429"
}
},
"publishedPlatforms": [
"twitter"
],
"updatedAt": "2025-06-01T10:00:04.000Z"
}
}/posts/{postId}/scheduleSet or update the scheduled time for a post.
| Name | Type | Required | Description |
|---|---|---|---|
| scheduledAt | date-time | Yes | When to publish. |
| selectedPlatforms | string[] | No | Optional platform overrides. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"platformResults": {
"twitter": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
},
"linkedin": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
}
},
"platformSettings": {
"selectedPlatforms": [
"twitter",
"linkedin"
]
},
"updatedAt": "2025-05-28T16:41:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z",
"platformResults": {
"twitter": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
},
"linkedin": {
"status": "scheduled",
"scheduledAt": "2025-06-01T10:00:00.000Z"
}
},
"platformSettings": {
"selectedPlatforms": [
"twitter",
"linkedin"
]
},
"updatedAt": "2025-05-28T16:41:00.000Z"
}
}/posts/{postId}/scheduleRemove the scheduled time and return the post to draft status.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "draft",
"scheduledAt": null,
"platformResults": {},
"updatedAt": "2025-05-28T16:42:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "draft",
"scheduledAt": null,
"platformResults": {},
"updatedAt": "2025-05-28T16:42:00.000Z"
}
}Teams
/teamsList teams available to the API key.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Marketing team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
}
]
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Marketing team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
}
]
}/teamsCreate a new team.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Team name. |
| avatarUrl | string | No | Team avatar URL. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Marketing team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Marketing team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}Fetch a single team by ID.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Marketing team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Marketing team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}Update a team name or avatar. Only provided fields change.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | No | Updated team name. |
| avatarUrl | string | No | Updated avatar URL, or null to clear. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Growth team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"name": "Growth team",
"avatarUrl": "https://example.com/avatar.png",
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
],
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}Delete a team.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"deleted": true
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"deleted": true
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/settingsUpdate default platforms and team settings.
| Name | Type | Required | Description |
|---|---|---|---|
| defaultPlatforms | string[] | No | Default platforms for new posts. Each platform must be attached to the team. |
| primaryPlatform | string | No | Primary platform. Must be present in defaultPlatforms. |
| settings | object | No | Team settings object. Merged with existing settings. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"defaultPlatforms": [
"twitter",
"linkedin"
],
"primaryPlatform": "twitter",
"settings": {}
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/scheduleUpdate the posting schedule for a team.
| Name | Type | Required | Description |
|---|---|---|---|
| scheduleTimezone | string | No | Timezone for the posting schedule. |
| scheduleSlots | object[] | No | Posting slots. Each slot must include id, day, and time. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
]
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"scheduleTimezone": "America/New_York",
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
]
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/accountsList accounts attached to a team.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"name": "@contentrabbit",
"status": "active",
"profileImageUrl": "https://cdn.example.com/avatars/contentrabbit.png"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"name": "@contentrabbit",
"status": "active",
"profileImageUrl": "https://cdn.example.com/avatars/contentrabbit.png"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/accountsAttach an integration to a team. Team owner only.
| Name | Type | Required | Description |
|---|---|---|---|
| integrationId | string | Yes | ID of the integration to attach. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"integrationId": "int_123"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"integrationId": "int_123"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/accountsDetach an integration from a team. Team owner only.
| Name | Type | Required | Description |
|---|---|---|---|
| integrationId | string | Yes | ID of the integration to detach. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"integrationId": "int_123",
"detached": true
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"integrationId": "int_123",
"detached": true
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/membersList members of a team.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"userId": "user_123",
"roleId": "member",
"email": "jane@example.com",
"name": "Jane Doe"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"userId": "user_123",
"roleId": "member",
"email": "jane@example.com",
"name": "Jane Doe"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/membersAdd a member to a team. Team owner only.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | string | Yes | ID of the user to add. |
| roleId | string | No | Member role. Defaults to member. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"userId": "user_123",
"roleId": "member"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"userId": "user_123",
"roleId": "member"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/teams/{teamId}/members/{userId}Remove a member from a team. Team owner only.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"userId": "user_123",
"deleted": true
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"userId": "user_123",
"deleted": true
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}Accounts
/accountsList social accounts connected to the team.
| Name | Type | Required | Description |
|---|---|---|---|
| platform | string | No | Filter by platform type, for example twitter or linkedin. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"name": "@contentrabbit",
"status": "active",
"profileImageUrl": "https://cdn.example.com/avatars/contentrabbit.png"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"name": "@contentrabbit",
"status": "active",
"profileImageUrl": "https://cdn.example.com/avatars/contentrabbit.png"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/accounts/{accountId}Fetch a single connected account by ID.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"name": "@contentrabbit",
"status": "active",
"profileImageUrl": "https://cdn.example.com/avatars/contentrabbit.png",
"accessTokenExpiresAt": "2025-09-01T00:00:00.000Z",
"createdAt": "2025-01-15T09:24:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"name": "@contentrabbit",
"status": "active",
"profileImageUrl": "https://cdn.example.com/avatars/contentrabbit.png",
"accessTokenExpiresAt": "2025-09-01T00:00:00.000Z",
"createdAt": "2025-01-15T09:24:00.000Z"
}
}/accounts/{accountId}Disconnect an account from the team. Team owner only.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"disconnected": true
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"disconnected": true
}
}/accounts/{accountId}/healthGet connection health, token validity, and recommendations for an account.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"status": "active",
"tokenValid": true,
"tokenExpiresAt": "2025-09-01T00:00:00.000Z",
"recommendations": []
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "int_h8w2q5t9m4x7z1c6v3b0n5k2",
"platformType": "twitter",
"status": "active",
"tokenValid": true,
"tokenExpiresAt": "2025-09-01T00:00:00.000Z",
"recommendations": []
}
}Queue
/queue/slotsList the schedule slots configured for the team.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"day": "monday",
"time": "09:30"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"day": "monday",
"time": "09:30"
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/queue/slotsAdd a schedule slot. Returns 409 when a slot with the same day and time exists.
| Name | Type | Required | Description |
|---|---|---|---|
| day | string | Yes | Day of the week: monday, tuesday, wednesday, thursday, friday, saturday, or sunday. |
| time | string | Yes | Time of day in HH:MM format (00:00-23:59). |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"day": "monday",
"time": "09:30"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"day": "monday",
"time": "09:30"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/queue/slots/{slotId}Update a schedule slot. Only provided fields change.
| Name | Type | Required | Description |
|---|---|---|---|
| day | string | No | New day of the week. |
| time | string | No | New time in HH:MM format (00:00-23:59). |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"day": "tuesday",
"time": "15:00"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"day": "tuesday",
"time": "15:00"
},
"meta": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/queue/slots/{slotId}Delete a schedule slot.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"deleted": true
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"deleted": true
}
}/queue/next-slotGet the next free schedule slot within the next 30 days.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"day": "monday",
"time": "09:30",
"scheduledAt": "2025-06-02T13:30:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"day": "monday",
"time": "09:30",
"scheduledAt": "2025-06-02T13:30:00.000Z"
}
}Calendar
/calendarGet calendar entries grouped by day for a date range, with optional status filters.
| Name | Type | Required | Description |
|---|---|---|---|
| start | date-time | No | Range start. Defaults to 30 days before end. |
| end | date-time | No | Range end. Defaults to now. |
| timezone | string | No | IANA timezone. Defaults to the team timezone. |
| status | string | No | Filter by status: scheduled, publishing, published, or error. Repeat the parameter for multiple values. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"timezone": "America/New_York",
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"days": [
{
"date": "2025-06-01",
"timezone": "America/New_York",
"entries": [
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"primaryPlatform": "twitter",
"platforms": [
"twitter",
"linkedin"
],
"scheduledAt": "2025-06-01T10:00:00.000Z",
"publishedAt": null,
"contentPreview": "Here is what we shipped this week...",
"mediaCount": 1
}
],
"totals": {
"scheduled": 1,
"publishing": 0,
"published": 0,
"error": 0
}
}
],
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
]
},
"meta": {
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"timezone": "America/New_York",
"count": 1
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"timezone": "America/New_York",
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"days": [
{
"date": "2025-06-01",
"timezone": "America/New_York",
"entries": [
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"status": "scheduled",
"primaryPlatform": "twitter",
"platforms": [
"twitter",
"linkedin"
],
"scheduledAt": "2025-06-01T10:00:00.000Z",
"publishedAt": null,
"contentPreview": "Here is what we shipped this week...",
"mediaCount": 1
}
],
"totals": {
"scheduled": 1,
"publishing": 0,
"published": 0,
"error": 0
}
}
],
"scheduleSlots": [
{
"id": "slot-1",
"day": "monday",
"time": "09:00"
}
]
},
"meta": {
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"timezone": "America/New_York",
"count": 1
}
}Webhooks
/webhooksList webhook subscriptions for the team.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"targetUrl": "https://example.com/webhooks/content-rabbit",
"description": "Production webhook",
"eventTypes": [
"post.published",
"post.failed"
],
"isActive": true,
"createdAt": "2025-05-20T11:30:00.000Z",
"updatedAt": "2025-05-20T11:30:00.000Z",
"lastDeliveredAt": "2025-05-30T14:00:04.000Z",
"secretPreview": "a1b2c3"
}
],
"meta": {
"count": 1,
"eventTypes": [
"post.published",
"post.failed",
"scheduled.published",
"scheduled.failed",
"draft.updated",
"media.uploaded",
"credits.low",
"account.connected",
"account.disconnected"
]
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"targetUrl": "https://example.com/webhooks/content-rabbit",
"description": "Production webhook",
"eventTypes": [
"post.published",
"post.failed"
],
"isActive": true,
"createdAt": "2025-05-20T11:30:00.000Z",
"updatedAt": "2025-05-20T11:30:00.000Z",
"lastDeliveredAt": "2025-05-30T14:00:04.000Z",
"secretPreview": "a1b2c3"
}
],
"meta": {
"count": 1,
"eventTypes": [
"post.published",
"post.failed",
"scheduled.published",
"scheduled.failed",
"draft.updated",
"media.uploaded",
"credits.low",
"account.connected",
"account.disconnected"
]
}
}/webhooksCreate a webhook subscription.
| Name | Type | Required | Description |
|---|---|---|---|
| targetUrl | string | Yes | URL that receives webhook deliveries. |
| description | string | No | Optional label for the subscription, up to 255 characters. |
| eventTypes | string[] | No | Event types to subscribe to. Defaults to all event types. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"subscription": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"targetUrl": "https://example.com/webhooks/content-rabbit",
"description": "Production webhook",
"eventTypes": [
"post.published",
"post.failed"
],
"isActive": true,
"createdAt": "2025-05-20T11:30:00.000Z",
"updatedAt": "2025-05-20T11:30:00.000Z",
"lastDeliveredAt": null,
"secretPreview": "a1b2c3"
},
"secret": "3d9f2c7a1b8e4f6d0c5a9b3e7f1d4c8a2b6e0f5d9c3a7b1e4f8d2c6a0b5e9f3d"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"subscription": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"targetUrl": "https://example.com/webhooks/content-rabbit",
"description": "Production webhook",
"eventTypes": [
"post.published",
"post.failed"
],
"isActive": true,
"createdAt": "2025-05-20T11:30:00.000Z",
"updatedAt": "2025-05-20T11:30:00.000Z",
"lastDeliveredAt": null,
"secretPreview": "a1b2c3"
},
"secret": "3d9f2c7a1b8e4f6d0c5a9b3e7f1d4c8a2b6e0f5d9c3a7b1e4f8d2c6a0b5e9f3d"
}
}/webhooksDelete a webhook subscription by query parameter.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Query parameter. ID of the subscription to delete. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"deleted": true
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"deleted": true
}
}/webhooks/{webhookId}Fetch a single webhook subscription by ID.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"targetUrl": "https://example.com/webhooks/content-rabbit",
"description": "Production webhook",
"eventTypes": [
"post.published",
"post.failed"
],
"isActive": true,
"createdAt": "2025-05-20T11:30:00.000Z",
"updatedAt": "2025-05-20T11:30:00.000Z",
"lastDeliveredAt": "2025-05-30T14:00:04.000Z",
"secretPreview": "a1b2c3"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"targetUrl": "https://example.com/webhooks/content-rabbit",
"description": "Production webhook",
"eventTypes": [
"post.published",
"post.failed"
],
"isActive": true,
"createdAt": "2025-05-20T11:30:00.000Z",
"updatedAt": "2025-05-20T11:30:00.000Z",
"lastDeliveredAt": "2025-05-30T14:00:04.000Z",
"secretPreview": "a1b2c3"
}
}/webhooks/{webhookId}Delete a webhook subscription by ID.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"deleted": true
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"deleted": true
}
}/webhooks/deliveriesList webhook deliveries with optional filters.
| Name | Type | Required | Description |
|---|---|---|---|
| subscriptionId | string | No | Filter by subscription ID. |
| status | string | No | Filter by delivery status. |
| start | date-time | No | Earliest delivery time. |
| end | date-time | No | Latest delivery time. |
| limit | integer | No | Maximum deliveries to return (up to 200). |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"items": [
{
"id": "whd_c6v3b5n0k2j6t9q2w8m4x7z1",
"subscriptionId": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"eventId": "x9k2m7v4q1t8w6z3c5b0n2j4",
"eventType": "post.published",
"status": "success",
"attempts": 1,
"nextAttemptAt": null,
"occurredAt": "2025-05-30T14:00:04.000Z",
"payload": {
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"platform": "twitter",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543"
},
"targetUrl": "https://example.com/webhooks/content-rabbit",
"lastError": null,
"signaturePreview": "a1b2c3"
}
],
"range": {
"start": "2025-05-30T13:45:00.000Z",
"end": "2025-05-30T14:00:00.000Z"
}
},
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"items": [
{
"id": "whd_c6v3b5n0k2j6t9q2w8m4x7z1",
"subscriptionId": "wh_t9q2w8m4x7z1c6v3b5n0k2j6",
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"eventId": "x9k2m7v4q1t8w6z3c5b0n2j4",
"eventType": "post.published",
"status": "success",
"attempts": 1,
"nextAttemptAt": null,
"occurredAt": "2025-05-30T14:00:04.000Z",
"payload": {
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"platform": "twitter",
"postUrl": "https://twitter.com/contentrabbit/status/1798765432109876543"
},
"targetUrl": "https://example.com/webhooks/content-rabbit",
"lastError": null,
"signaturePreview": "a1b2c3"
}
],
"range": {
"start": "2025-05-30T13:45:00.000Z",
"end": "2025-05-30T14:00:00.000Z"
}
},
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}/webhooks/testSend a test delivery to a webhook subscription.
| Name | Type | Required | Description |
|---|---|---|---|
| webhookId | string | Yes | ID of the subscription to send a test delivery to. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"delivered": true,
"statusCode": 200
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"delivered": true,
"statusCode": 200
}
}Generate
/generate/textList available text models with provider, capabilities, and pricing.
Response
{
"data": [
{
"id": "openai/gpt-4.1-mini",
"provider": "OpenAI",
"capabilities": [
"chat",
"copywriting"
],
"pricing": {
"credits": 1,
"usd": 0.01
}
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"teamName": "Content Rabbit"
}
}{
"data": [
{
"id": "openai/gpt-4.1-mini",
"provider": "OpenAI",
"capabilities": [
"chat",
"copywriting"
],
"pricing": {
"credits": 1,
"usd": 0.01
}
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"teamName": "Content Rabbit"
}
}/generate/textGenerate text with a selected model. Extra body fields are forwarded to the model.
| Name | Type | Required | Description |
|---|---|---|---|
| model | string | Yes | Text model ID. List valid IDs with GET /generate/text. |
| prompt | string | No | Prompt forwarded to the model. |
| preview | boolean | No | When true, runs without charging credits. |
Response
{
"data": {
"text": "Big launch day: our public API is live. Generate, schedule, and publish everywhere from one place."
},
"pricing": {
"creditCost": 1,
"usdValue": 0.01
}
}{
"data": {
"text": "Big launch day: our public API is live. Generate, schedule, and publish everywhere from one place."
},
"pricing": {
"creditCost": 1,
"usdValue": 0.01
}
}/generate/imageList available image models with provider, capabilities, and pricing.
| Name | Type | Required | Description |
|---|---|---|---|
| mediaType | string | No | Model type to list: "image", "video", or "text". Defaults to "image". |
Response
{
"data": [
{
"id": "replicate/black-forest-labs/flux-kontext-pro",
"provider": "Replicate",
"mediaType": "image",
"capabilities": [
"text-to-image"
],
"pricing": {
"credits": 9,
"usd": 0.09
}
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"teamName": "Content Rabbit"
}
}{
"data": [
{
"id": "replicate/black-forest-labs/flux-kontext-pro",
"provider": "Replicate",
"mediaType": "image",
"capabilities": [
"text-to-image"
],
"pricing": {
"credits": 9,
"usd": 0.09
}
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"teamName": "Content Rabbit"
}
}/generate/imageGenerate images with a selected model. Charges credits unless preview is true.
| Name | Type | Required | Description |
|---|---|---|---|
| model | string | Yes | Image model ID. List valid IDs with GET /generate/image. |
| prompt | string | Yes | Text prompt that describes the image. |
| aspect | string | No | Aspect ratio such as "9:16" or "1:1". Use "auto" to derive one. |
| images | integer | No | Number of images to generate. |
| characterImageUrl | string | No | Reference image URL for character-consistent models. |
| preview | boolean | No | When true, runs without charging credits. |
Response
{
"data": {
"success": true,
"image": {
"id": null,
"url": "https://replicate.delivery/xezq/abc123/out-0.png",
"thumbnailUrl": "https://replicate.delivery/xezq/abc123/out-0.png",
"originalUrl": "https://replicate.delivery/xezq/abc123/out-0.png",
"model": "replicate/black-forest-labs/flux-kontext-pro",
"prompt": "Studio photo of a ceramic rabbit on a desk",
"aspect": "1:1",
"createdAt": "2025-05-28T16:50:00.000Z"
}
},
"pricing": {
"creditCost": 9,
"usdValue": 0.09
}
}{
"data": {
"success": true,
"image": {
"id": null,
"url": "https://replicate.delivery/xezq/abc123/out-0.png",
"thumbnailUrl": "https://replicate.delivery/xezq/abc123/out-0.png",
"originalUrl": "https://replicate.delivery/xezq/abc123/out-0.png",
"model": "replicate/black-forest-labs/flux-kontext-pro",
"prompt": "Studio photo of a ceramic rabbit on a desk",
"aspect": "1:1",
"createdAt": "2025-05-28T16:50:00.000Z"
}
},
"pricing": {
"creditCost": 9,
"usdValue": 0.09
}
}/generate/videoList available video models with provider, capabilities, and pricing.
Response
{
"data": [
{
"id": "minimax/hailuo-02/t2v-standard",
"provider": "Minimax",
"capabilities": [
"text-to-video"
],
"pricing": {
"credits": 55,
"usd": 0.55
}
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"teamName": "Content Rabbit"
}
}{
"data": [
{
"id": "minimax/hailuo-02/t2v-standard",
"provider": "Minimax",
"capabilities": [
"text-to-video"
],
"pricing": {
"credits": 55,
"usd": 0.55
}
}
],
"meta": {
"count": 1,
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"teamName": "Content Rabbit"
}
}/generate/videoGenerate a video with a selected model. Charges credits unless preview is true.
| Name | Type | Required | Description |
|---|---|---|---|
| model | string | Yes | Video model ID. List valid IDs with GET /generate/video. |
| prompt | string | No | Text prompt that describes the video. |
| duration | number | No | Clip length in seconds. Billed per second on duration-priced models. |
| preview | boolean | No | When true, runs without charging credits. |
Response
{
"data": {
"code": 200,
"message": "success",
"data": {
"id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
"model": "minimax/hailuo-02",
"status": "created"
}
},
"pricing": {
"creditCost": 55,
"usdValue": 0.55
}
}{
"data": {
"code": 200,
"message": "success",
"data": {
"id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
"model": "minimax/hailuo-02",
"status": "created"
}
},
"pricing": {
"creditCost": 55,
"usdValue": 0.55
}
}/generate/jobs/{jobId}Poll a generation job for its status, result, or error.
Response
{
"data": {
"id": "gen_x7z1c6v3b5n0k2j6t4w9q8m2",
"status": "completed",
"result": {
"url": "https://cdn.example.com/generated/out-0.png"
},
"error": null,
"createdAt": "2025-05-28T16:50:00.000Z",
"updatedAt": "2025-05-28T16:50:09.000Z"
}
}{
"data": {
"id": "gen_x7z1c6v3b5n0k2j6t4w9q8m2",
"status": "completed",
"result": {
"url": "https://cdn.example.com/generated/out-0.png"
},
"error": null,
"createdAt": "2025-05-28T16:50:00.000Z",
"updatedAt": "2025-05-28T16:50:09.000Z"
}
}Media
/media/imagesList images in the team with cursor-based pagination.
| Name | Type | Required | Description |
|---|---|---|---|
| search | string | No | Search by title or filename. |
| limit | integer | No | Maximum number of items to return (1-100). Defaults to 25. |
| cursor | string | No | Cursor from the previous page. |
| status | string | No | Filter by status: "active" or "deleted". |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "img_k2j6n0b5v3c6z1x7m4t9q2w8",
"title": "Launch hero image",
"description": null,
"altText": "Ceramic rabbit on a desk",
"tags": [
"launch",
"hero"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": "User Upload",
"width": 1024,
"height": 1024,
"fileSize": 482113,
"mimeType": "image/png",
"url": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=public",
"thumbnailUrl": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=thumbnail",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "img_k2j6n0b5v3c6z1x7m4t9q2w8"
},
"filters": {}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "img_k2j6n0b5v3c6z1x7m4t9q2w8",
"title": "Launch hero image",
"description": null,
"altText": "Ceramic rabbit on a desk",
"tags": [
"launch",
"hero"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": "User Upload",
"width": 1024,
"height": 1024,
"fileSize": 482113,
"mimeType": "image/png",
"url": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=public",
"thumbnailUrl": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=thumbnail",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "img_k2j6n0b5v3c6z1x7m4t9q2w8"
},
"filters": {}
}/media/imagesRegister an uploaded Cloudflare image in the team media library.
| Name | Type | Required | Description |
|---|---|---|---|
| cloudflareImageId | string | Yes | ID returned by the upload-url flow after the file is uploaded. |
| title | string | No | Image title (max 200 characters). |
| description | string | No | Image description (max 2000 characters). |
| altText | string | No | Alt text for accessibility (max 500 characters). |
| tags | string[] | No | Up to 50 tags (max 50 characters each). |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "img_k2j6n0b5v3c6z1x7m4t9q2w8",
"title": "Launch hero image",
"description": null,
"altText": "Ceramic rabbit on a desk",
"tags": [
"launch",
"hero"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": "User Upload",
"width": 1024,
"height": 1024,
"fileSize": 482113,
"mimeType": "image/png",
"url": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=public",
"thumbnailUrl": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=thumbnail",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "img_k2j6n0b5v3c6z1x7m4t9q2w8",
"title": "Launch hero image",
"description": null,
"altText": "Ceramic rabbit on a desk",
"tags": [
"launch",
"hero"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": "User Upload",
"width": 1024,
"height": 1024,
"fileSize": 482113,
"mimeType": "image/png",
"url": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=public",
"thumbnailUrl": "https://contentrabbitai.com/api/v1/images/serve?id=img_k2j6n0b5v3c6z1x7m4t9q2w8&variant=thumbnail",
"createdAt": "2025-05-28T16:40:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
}/media/images/{imageId}Delete an image from the team and from Cloudflare Images.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "img_k2j6n0b5v3c6z1x7m4t9q2w8",
"deleted": true
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "img_k2j6n0b5v3c6z1x7m4t9q2w8",
"deleted": true
}
}/media/videosList videos in the team with cursor-based pagination.
| Name | Type | Required | Description |
|---|---|---|---|
| search | string | No | Search by title or filename. |
| limit | integer | No | Maximum number of items to return (1-100). Defaults to 25. |
| cursor | string | No | Cursor from the previous page. |
| status | string | No | Filter by status: "active" or "deleted". |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "vid_t2w8q4m9x7z1c6v3b5n0k2j6",
"title": "Product teaser",
"description": null,
"tags": [
"teaser",
"launch"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": null,
"width": 1080,
"height": 1920,
"duration": 12,
"fileSize": 8451200,
"mimeType": "video/mp4",
"streamStatus": "ready",
"playbackUrl": "https://contentrabbitai.com/api/v1/videos/vid_t2w8q4m9x7z1c6v3b5n0k2j6/public",
"createdAt": "2025-05-28T16:45:00.000Z",
"updatedAt": "2025-05-28T16:45:00.000Z"
}
],
"paging": {
"nextCursor": "vid_t2w8q4m9x7z1c6v3b5n0k2j6"
},
"filters": {}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "vid_t2w8q4m9x7z1c6v3b5n0k2j6",
"title": "Product teaser",
"description": null,
"tags": [
"teaser",
"launch"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": null,
"width": 1080,
"height": 1920,
"duration": 12,
"fileSize": 8451200,
"mimeType": "video/mp4",
"streamStatus": "ready",
"playbackUrl": "https://contentrabbitai.com/api/v1/videos/vid_t2w8q4m9x7z1c6v3b5n0k2j6/public",
"createdAt": "2025-05-28T16:45:00.000Z",
"updatedAt": "2025-05-28T16:45:00.000Z"
}
],
"paging": {
"nextCursor": "vid_t2w8q4m9x7z1c6v3b5n0k2j6"
},
"filters": {}
}/media/videosRegister an uploaded Cloudflare Stream video in the team media library.
| Name | Type | Required | Description |
|---|---|---|---|
| cloudflareStreamId | string | Yes | Cloudflare Stream video ID to register. |
| title | string | No | Video title (max 200 characters). |
| description | string | No | Video description (max 2000 characters). |
| tags | string[] | No | Up to 50 tags (max 50 characters each). |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "vid_t2w8q4m9x7z1c6v3b5n0k2j6",
"title": "Product teaser",
"description": null,
"tags": [
"teaser",
"launch"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": null,
"width": 1080,
"height": 1920,
"duration": 12,
"fileSize": 8451200,
"mimeType": "video/mp4",
"streamStatus": "ready",
"playbackUrl": "https://contentrabbitai.com/api/v1/videos/vid_t2w8q4m9x7z1c6v3b5n0k2j6/public",
"createdAt": "2025-05-28T16:45:00.000Z",
"updatedAt": "2025-05-28T16:45:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "vid_t2w8q4m9x7z1c6v3b5n0k2j6",
"title": "Product teaser",
"description": null,
"tags": [
"teaser",
"launch"
],
"sourceType": "upload",
"sourceUrl": null,
"attribution": null,
"authorName": null,
"authorUrl": null,
"licenseType": null,
"width": 1080,
"height": 1920,
"duration": 12,
"fileSize": 8451200,
"mimeType": "video/mp4",
"streamStatus": "ready",
"playbackUrl": "https://contentrabbitai.com/api/v1/videos/vid_t2w8q4m9x7z1c6v3b5n0k2j6/public",
"createdAt": "2025-05-28T16:45:00.000Z",
"updatedAt": "2025-05-28T16:45:00.000Z"
}
}/media/upload-urlCreate a signed Cloudflare Images upload URL for direct browser uploads.
| Name | Type | Required | Description |
|---|---|---|---|
| requireSigned | boolean | No | Require signed uploads. Defaults to true. |
| expirySeconds | integer | No | Seconds until the upload URL expires (60-3600). Defaults to 600. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"uploadURL": "https://upload.imagedelivery.net/f4c2b8d1e6a94f3b9c7d5e2a1f8b6c4d",
"id": "2cdc28f0-017a-49c4-9ed7-87056c839c2f",
"expiresAt": "2025-05-28T17:00:00.000Z",
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"uploadURL": "https://upload.imagedelivery.net/f4c2b8d1e6a94f3b9c7d5e2a1f8b6c4d",
"id": "2cdc28f0-017a-49c4-9ed7-87056c839c2f",
"expiresAt": "2025-05-28T17:00:00.000Z",
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6"
}
}Sources
/sourcesCreate a content extraction job. "url" and "text" sources are live; "youtube", "pdf", and "audio" return an unsupported error for now.
| Name | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | Source type: "url", "text", "youtube", "pdf", or "audio". |
| value | string | Yes | The URL to extract from, or the raw text content. |
Response
{
"jobId": "src_j6k2n9b4v8c3z1x5m7t0q2w6",
"status": "queued"
}{
"jobId": "src_j6k2n9b4v8c3z1x5m7t0q2w6",
"status": "queued"
}/sources/{jobId}Poll an extraction job. Returns the extracted text when the status is completed.
Response
{
"status": "completed",
"result": {
"text": "Extracted page content...",
"title": "Launch notes",
"metadata": {
"sourceType": "url",
"url": "https://example.com/blog/launch-notes",
"contentType": "text/html; charset=utf-8"
}
}
}{
"status": "completed",
"result": {
"text": "Extracted page content...",
"title": "Launch notes",
"metadata": {
"sourceType": "url",
"url": "https://example.com/blog/launch-notes",
"contentType": "text/html; charset=utf-8"
}
}
}Analytics
/analytics/postsGet aggregated post analytics for the team over a date range.
| Name | Type | Required | Description |
|---|---|---|---|
| start | date-time | No | Range start. Defaults to 30 days before end. Must be before end. |
| end | date-time | No | Range end. Defaults to now. Range is clamped to 365 days. |
| timezone | string | No | IANA timezone for day boundaries. Defaults to the team timezone. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"timezone": "America/New_York",
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"totals": {
"drafts": 3,
"scheduled": 2,
"publishing": 0,
"published": 41,
"failed": 1
},
"media": {
"withMedia": 18,
"withoutMedia": 29
}
},
"meta": {
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"timezone": "America/New_York"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"timezone": "America/New_York",
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"totals": {
"drafts": 3,
"scheduled": 2,
"publishing": 0,
"published": 41,
"failed": 1
},
"media": {
"withMedia": 18,
"withoutMedia": 29
}
},
"meta": {
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"timezone": "America/New_York"
}
}/analytics/platformsGet per-platform analytics for the team over a date range.
| Name | Type | Required | Description |
|---|---|---|---|
| platform | string | No | Filter by platform (for example "twitter"). Repeat the parameter for several. |
| start | date-time | No | Range start. Defaults to 30 days before end. Must be before end. |
| end | date-time | No | Range end. Defaults to now. Range is clamped to 365 days. |
| timezone | string | No | IANA timezone for day boundaries. Defaults to the team timezone. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"timezone": "America/New_York",
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"platforms": [
{
"platform": "linkedin",
"totals": {
"drafts": 1,
"scheduled": 1,
"publishing": 0,
"published": 20,
"failed": 1
},
"nextScheduledAt": "2025-06-01T10:00:00.000Z",
"lastPublishedAt": "2025-05-30T14:00:00.000Z"
},
{
"platform": "twitter",
"totals": {
"drafts": 2,
"scheduled": 1,
"publishing": 0,
"published": 21,
"failed": 0
},
"nextScheduledAt": "2025-06-02T13:30:00.000Z",
"lastPublishedAt": "2025-05-30T14:00:00.000Z"
}
]
},
"meta": {
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"timezone": "America/New_York",
"count": 2
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"timezone": "America/New_York",
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"platforms": [
{
"platform": "linkedin",
"totals": {
"drafts": 1,
"scheduled": 1,
"publishing": 0,
"published": 20,
"failed": 1
},
"nextScheduledAt": "2025-06-01T10:00:00.000Z",
"lastPublishedAt": "2025-05-30T14:00:00.000Z"
},
{
"platform": "twitter",
"totals": {
"drafts": 2,
"scheduled": 1,
"publishing": 0,
"published": 21,
"failed": 0
},
"nextScheduledAt": "2025-06-02T13:30:00.000Z",
"lastPublishedAt": "2025-05-30T14:00:00.000Z"
}
]
},
"meta": {
"range": {
"start": "2025-05-02T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"timezone": "America/New_York",
"count": 2
}
}Messages
/conversationsList direct-message conversations (Instagram and Facebook) with cursor-based pagination.
| Name | Type | Required | Description |
|---|---|---|---|
| platform | string | No | Filter by platform: "instagram" or "facebook". |
| accountId | string | No | Filter by connected account ID. |
| status | string | No | Filter by conversation status: "open" or "archived". |
| limit | integer | No | Maximum number of items to return (1-100). Defaults to 25. |
| cursor | string | No | Cursor from the previous page. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"platform": "instagram",
"accountId": "acc_w8z2q6t4m1x7c9v3b5n0k2j6",
"status": "open",
"participantHandle": "happy.customer",
"participantName": "Happy Customer",
"lastMessageAt": "2025-05-28T16:40:00.000Z",
"unreadCount": 0,
"createdAt": "2025-05-27T09:15:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "conv_m4t9q2w8k6j3n0b5v7c1z6x4"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"platform": "instagram",
"accountId": "acc_w8z2q6t4m1x7c9v3b5n0k2j6",
"status": "open",
"participantHandle": "happy.customer",
"participantName": "Happy Customer",
"lastMessageAt": "2025-05-28T16:40:00.000Z",
"unreadCount": 0,
"createdAt": "2025-05-27T09:15:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "conv_m4t9q2w8k6j3n0b5v7c1z6x4"
}
}/conversations/{conversationId}Fetch a single conversation by ID.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"platform": "instagram",
"accountId": "acc_w8z2q6t4m1x7c9v3b5n0k2j6",
"status": "open",
"participantHandle": "happy.customer",
"participantName": "Happy Customer",
"lastMessageAt": "2025-05-28T16:40:00.000Z",
"unreadCount": 0,
"createdAt": "2025-05-27T09:15:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"platform": "instagram",
"accountId": "acc_w8z2q6t4m1x7c9v3b5n0k2j6",
"status": "open",
"participantHandle": "happy.customer",
"participantName": "Happy Customer",
"lastMessageAt": "2025-05-28T16:40:00.000Z",
"unreadCount": 0,
"createdAt": "2025-05-27T09:15:00.000Z",
"updatedAt": "2025-05-28T16:40:00.000Z"
}
}/messagesList messages in a conversation with cursor-based pagination.
| Name | Type | Required | Description |
|---|---|---|---|
| conversationId | string | Yes | Conversation whose messages to list. |
| limit | integer | No | Maximum number of items to return (1-100). Defaults to 25. |
| cursor | string | No | Cursor from the previous page. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9",
"conversationId": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"externalMessageId": "m_1234567890",
"direction": "outbound",
"text": "Thanks for reaching out! Here is the link you asked for.",
"attachments": [],
"sentAt": "2025-05-28T16:40:00.000Z",
"deliveryStatus": "sent",
"createdAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9",
"conversationId": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"externalMessageId": "m_1234567890",
"direction": "outbound",
"text": "Thanks for reaching out! Here is the link you asked for.",
"attachments": [],
"sentAt": "2025-05-28T16:40:00.000Z",
"deliveryStatus": "sent",
"createdAt": "2025-05-28T16:40:00.000Z"
}
],
"paging": {
"nextCursor": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9"
}
}/messages/{messageId}Fetch a single message by ID.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9",
"conversationId": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"externalMessageId": "m_1234567890",
"direction": "outbound",
"text": "Thanks for reaching out! Here is the link you asked for.",
"attachments": [],
"sentAt": "2025-05-28T16:40:00.000Z",
"deliveryStatus": "sent",
"createdAt": "2025-05-28T16:40:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9",
"conversationId": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"externalMessageId": "m_1234567890",
"direction": "outbound",
"text": "Thanks for reaching out! Here is the link you asked for.",
"attachments": [],
"sentAt": "2025-05-28T16:40:00.000Z",
"deliveryStatus": "sent",
"createdAt": "2025-05-28T16:40:00.000Z"
}
}/messagesSend a direct message or reply in an existing conversation.
| Name | Type | Required | Description |
|---|---|---|---|
| conversationId | string | No | Conversation to reply in. Required unless platform, accountId, and recipient are provided to start a new conversation. |
| platform | string | No | Required with accountId and recipient to start a new conversation. One of "instagram" or "facebook". |
| accountId | string | No | Required with platform and recipient to start a new conversation. Connected account to send from. |
| recipient | string | No | Required with platform and accountId to start a new conversation. External participant ID or handle to message. |
| text | string | Yes | Message text. |
| attachments | object[] | No | Optional attachments to include with the message (max 1). |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9",
"conversationId": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"externalMessageId": "m_1234567890",
"direction": "outbound",
"text": "Thanks for reaching out! Here is the link you asked for.",
"attachments": [],
"sentAt": "2025-05-28T16:40:00.000Z",
"deliveryStatus": "sent",
"createdAt": "2025-05-28T16:40:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "dmsg_q2w8k6j3n0b5v7c1z6x4m4t9",
"conversationId": "conv_m4t9q2w8k6j3n0b5v7c1z6x4",
"teamId": "team_h3b7v1n5m9q3w7t1k5c9x3z7",
"externalMessageId": "m_1234567890",
"direction": "outbound",
"text": "Thanks for reaching out! Here is the link you asked for.",
"attachments": [],
"sentAt": "2025-05-28T16:40:00.000Z",
"deliveryStatus": "sent",
"createdAt": "2025-05-28T16:40:00.000Z"
}
}Tools
/tools/validate/postCheck post text against per-platform character limits before publishing.
| Name | Type | Required | Description |
|---|---|---|---|
| content | string | Yes | Post text to validate. |
| platforms | string[] | Yes | Platforms to validate the content against. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"valid": true,
"platforms": {
"twitter": {
"valid": true,
"characterCount": 45,
"characterLimit": 280,
"errors": []
},
"linkedin": {
"valid": true,
"characterCount": 45,
"characterLimit": 3000,
"errors": []
}
}
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"valid": true,
"platforms": {
"twitter": {
"valid": true,
"characterCount": 45,
"characterLimit": 280,
"errors": []
},
"linkedin": {
"valid": true,
"characterCount": 45,
"characterLimit": 3000,
"errors": []
}
}
}
}/tools/validate/mediaCheck a media file against per-platform size and format rules.
| Name | Type | Required | Description |
|---|---|---|---|
| mediaType | string | Yes | Media kind: "image" or "video". |
| platforms | string[] | Yes | Platforms to validate the media against. |
| fileSize | number | No | File size in bytes. |
| mimeType | string | No | MIME type of the file, for example "image/png". |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"valid": false,
"platforms": {
"instagram": {
"valid": false,
"errors": [
"instagram image does not support MIME image/png"
],
"requirements": {
"maxFileSize": 8388608,
"allowedTypes": [
"image/jpeg"
],
"maxWidth": 1440
}
},
"facebook": {
"valid": true,
"errors": [],
"requirements": {
"maxFileSize": 10485760,
"allowedTypes": [
"image/jpeg",
"image/bmp",
"image/png",
"image/gif",
"image/tiff"
]
}
}
}
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"valid": false,
"platforms": {
"instagram": {
"valid": false,
"errors": [
"instagram image does not support MIME image/png"
],
"requirements": {
"maxFileSize": 8388608,
"allowedTypes": [
"image/jpeg"
],
"maxWidth": 1440
}
},
"facebook": {
"valid": true,
"errors": [],
"requirements": {
"maxFileSize": 10485760,
"allowedTypes": [
"image/jpeg",
"image/bmp",
"image/png",
"image/gif",
"image/tiff"
]
}
}
}
}
}Usage
/usageGet usage for the team: posts published this month, connected accounts, and per-platform publishing limits.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"postsThisMonth": 42,
"postsLimit": null,
"accountsConnected": 3,
"accountsLimit": null,
"storageUsedMB": 0,
"platformLimits": {
"twitter": {
"limit": 80,
"used": 12,
"remaining": 68,
"windowLabel": "15 minutes"
},
"linkedin": {
"limit": 80,
"used": 9,
"remaining": 71,
"windowLabel": "24 hours"
}
}
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"teamId": "tm_w8z2q6t4m1x7c9v3b5n0k2j6",
"postsThisMonth": 42,
"postsLimit": null,
"accountsConnected": 3,
"accountsLimit": null,
"storageUsedMB": 0,
"platformLimits": {
"twitter": {
"limit": 80,
"used": 12,
"remaining": 68,
"windowLabel": "15 minutes"
},
"linkedin": {
"limit": 80,
"used": 9,
"remaining": 71,
"windowLabel": "24 hours"
}
}
}
}Activity
/activityList the team activity feed for a date range with cursor-based pagination.
| Name | Type | Required | Description |
|---|---|---|---|
| start | date-time | No | Range start. Defaults to 14 days before end. |
| end | date-time | No | Range end. Defaults to now. |
| timezone | string | No | IANA timezone. Defaults to the team timezone. |
| limit | integer | No | Number of items to return (1-200, default 50). |
| cursor | string | No | Cursor from the previous page. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"timezone": "America/New_York",
"range": {
"start": "2025-05-18T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"items": [
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n:published:1748613600000",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"eventType": "draft.published",
"platform": "linkedin",
"occurredAt": "2025-05-30T14:00:00.000Z",
"message": "Published successfully"
},
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n:scheduled:1748613600000",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"eventType": "draft.scheduled",
"platform": "linkedin",
"occurredAt": "2025-05-30T14:00:00.000Z",
"message": "Scheduled for 2025-05-30T14:00:00.000Z (America/New_York)",
"metadata": {
"timezone": "America/New_York"
}
},
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n:created",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"eventType": "draft.created",
"platform": "linkedin",
"occurredAt": "2025-05-28T16:40:00.000Z",
"message": "Draft created for linkedin"
}
],
"pagination": {
"cursor": "MjAyNS0wNS0yOFQxNjo0MDowMC4wMDBa",
"hasMore": true
}
},
"meta": {
"count": 3,
"cursor": "MjAyNS0wNS0yOFQxNjo0MDowMC4wMDBa"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"timezone": "America/New_York",
"range": {
"start": "2025-05-18T04:00:00.000Z",
"end": "2025-06-01T04:00:00.000Z"
},
"items": [
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n:published:1748613600000",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"eventType": "draft.published",
"platform": "linkedin",
"occurredAt": "2025-05-30T14:00:00.000Z",
"message": "Published successfully"
},
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n:scheduled:1748613600000",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"eventType": "draft.scheduled",
"platform": "linkedin",
"occurredAt": "2025-05-30T14:00:00.000Z",
"message": "Scheduled for 2025-05-30T14:00:00.000Z (America/New_York)",
"metadata": {
"timezone": "America/New_York"
}
},
{
"id": "post_p3k9m2x7q4t1w8z6c5v0b3n:created",
"postId": "post_p3k9m2x7q4t1w8z6c5v0b3n",
"eventType": "draft.created",
"platform": "linkedin",
"occurredAt": "2025-05-28T16:40:00.000Z",
"message": "Draft created for linkedin"
}
],
"pagination": {
"cursor": "MjAyNS0wNS0yOFQxNjo0MDowMC4wMDBa",
"hasMore": true
}
},
"meta": {
"count": 3,
"cursor": "MjAyNS0wNS0yOFQxNjo0MDowMC4wMDBa"
}
}API Keys
/api-keysList API keys for the team. Key secrets are never returned.
| Name | Type | Required | Description |
|---|---|---|---|
| includeRevoked | boolean | No | Set to true to include revoked keys in the response. |
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"name": "CI pipeline",
"preview": "cr_x9k2...",
"createdAt": "2025-04-12T09:00:00.000Z",
"enabled": true,
"revoked": false,
"revokedAt": null
}
],
"meta": {
"count": 1
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": [
{
"id": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"name": "CI pipeline",
"preview": "cr_x9k2...",
"createdAt": "2025-04-12T09:00:00.000Z",
"enabled": true,
"revoked": false,
"revokedAt": null
}
],
"meta": {
"count": 1
}
}/api-keysNot implemented. Returns HTTP 501. Create API keys in the web dashboard.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"error": "Not Implemented",
"message": "Use the web dashboard to create API keys"
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"error": "Not Implemented",
"message": "Use the web dashboard to create API keys"
}/api-keys/{keyId}Revoke an API key. The key stops working immediately.
Response
{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"revoked": true,
"revokedAt": "2025-05-30T14:00:00.000Z"
}
}{
"requestId": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"data": {
"id": "key_v9k2m7x4q1t8w6z3c5b0n2j4",
"revoked": true,
"revokedAt": "2025-05-30T14:00:00.000Z"
}
}