Download OpenAPI specification:
REST API for accessing Passband drafts, triggering pipelines, and managing content programmatically.
Returns a paginated list of drafts for the authenticated user.
| status | string Filter by status (e.g., pending_review, approved) |
| format | string Filter by format (e.g., SHORT, THREAD, BLOG) |
| limit | integer [ 1 .. 100 ] Default: 25 Number of items per page |
| cursor | string Cursor for pagination (use nextCursor from previous response) |
| sourceId | string Filter by source ID |
| sourceType | string Filter by source type (e.g., rss, twitter) |
| tags | string Filter by tags (comma-separated) |
| scheduledAfter | string <date-time> Filter drafts scheduled after this timestamp |
| scheduledBefore | string <date-time> Filter drafts scheduled before this timestamp |
{- "drafts": [
- {
- "id": "string",
- "text": "string",
- "format": "SHORT",
- "status": "pending_generation",
- "confidence": 0,
- "feedback": "string",
- "rejectionFeedback": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "postedAt": "2019-08-24T14:15:22Z",
- "postId": "string",
- "itemId": "string",
- "regeneratedFromId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "item": {
- "id": "string",
- "title": "string",
- "sourceType": "string"
}
}
], - "nextCursor": "string"
}Creates one or more drafts. Supports two modes:
Direct mode — provide text (and optional format) to create a single draft with your own content. Great for one-off posts with image attachments.
Generate mode — provide url and/or prompt to have AI generate drafts in the specified formats using your voice profile.
| text | string [ 1 .. 50000 ] characters Draft content (direct mode). Mutually exclusive with url/prompt. |
| format | string Enum: "SHORT" "THREAD" "BLOG" Draft format (direct mode). Defaults to SHORT. |
| url | string <uri> Source URL for AI generation (generate mode). |
| prompt | string [ 1 .. 5000 ] characters Prompt for AI generation (generate mode). Can be combined with url. |
| formats | Array of strings [ 1 .. 3 ] items Items Enum: "SHORT" "THREAD" "BLOG" Formats to generate (generate mode). Defaults to ["SHORT"]. |
Array of objects (CreateDraftImage) <= 10 items Image attachments. In generate mode, images attach to the first draft. | |
| tags | Array of strings <= 20 items [ items <= 50 characters ] Tags for the created draft(s). |
| targetPlatforms | Array of strings Target publishing platforms. |
{- "text": "Check out our new feature launch!",
- "format": "SHORT",
- "images": [
], - "tags": [
- "launch",
- "product"
]
}{- "mode": "direct",
- "itemId": "string",
- "drafts": [
- {
- "id": "string",
- "text": "string",
- "format": "SHORT",
- "status": "string",
- "confidence": 0,
- "images": [
], - "createdAt": "2019-08-24T14:15:22Z"
}
]
}Returns a single draft with full detail including source item information.
| id required | string |
{- "id": "string",
- "text": "string",
- "format": "SHORT",
- "status": "pending_generation",
- "confidence": 0,
- "feedback": "string",
- "rejectionFeedback": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "postedAt": "2019-08-24T14:15:22Z",
- "postId": "string",
- "itemId": "string",
- "regeneratedFromId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "item": {
- "id": "string",
- "title": "string",
- "sourceType": "string"
}
}Perform state transitions or edit a draft. Supported actions: approve, reject, regenerate, schedule, archive, unapprove, reschedule, cancel_schedule, post. Or send "text" to edit content.
| id required | string |
| action | string Enum: "approve" "reject" "regenerate" "schedule" "archive" "unapprove" "reschedule" "cancel_schedule" "post" State transition action |
| text | string New text content for the draft |
| feedback | string Feedback when rejecting or unapproving |
| scheduledAt | string <date-time> ISO 8601 timestamp. Required for reschedule, optional for schedule. |
| smartSchedule | boolean If true, use smart scheduling to find the next available slot. Used with action="schedule". |
| platforms | Array of strings Target platforms for action="post". If omitted, posts to all connected platforms. |
{- "action": "approve",
- "text": "string",
- "feedback": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "smartSchedule": true,
- "platforms": [
- "string"
]
}{- "id": "string",
- "text": "string",
- "format": "SHORT",
- "status": "pending_generation",
- "confidence": 0,
- "feedback": "string",
- "rejectionFeedback": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "postedAt": "2019-08-24T14:15:22Z",
- "postId": "string",
- "itemId": "string",
- "regeneratedFromId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns a paginated list of pipeline runs, most recent first.
| limit | integer [ 1 .. 100 ] Default: 10 Number of runs per page |
| cursor | string Cursor for pagination (use nextCursor from previous response) |
{- "runs": [
- {
- "id": "string",
- "status": "string",
- "stage": "string",
- "startedAt": "2019-08-24T14:15:22Z",
- "endedAt": "2019-08-24T14:15:22Z",
- "duration": 0,
- "stats": {
- "itemsIngested": 0,
- "itemsFiltered": 0,
- "itemsRanked": 0,
- "draftsCreated": 0,
- "stageTiming": { }
}, - "error": "string"
}
], - "nextCursor": "string"
}Returns aggregate pipeline run statistics for the authenticated user.
{- "totalRuns": 0,
- "successRate": 0,
- "averageDuration": 0,
- "averageItemsPerRun": 0,
- "averageDraftsPerRun": 0,
- "topErrors": [
- {
- "category": "string",
- "count": 0
}
], - "last30Days": {
- "runs": 0,
- "items": 0,
- "drafts": 0
}
}Returns the authenticated user's voice profile.
{- "id": "string",
- "style": "string",
- "avoid": [
- "string"
], - "examples": [
- "string"
], - "formats": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Updates (or creates) the voice profile for the authenticated user.
| style | string |
| avoid | Array of strings |
| examples | Array of strings |
| formats | object |
{- "style": "string",
- "avoid": [
- "string"
], - "examples": [
- "string"
], - "formats": { }
}{- "id": "string",
- "style": "string",
- "avoid": [
- "string"
], - "examples": [
- "string"
], - "formats": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns aggregate engagement metrics and top posts.
| top | integer [ 1 .. 50 ] Default: 10 Number of top posts to return |
{- "totalPosted": 0,
- "totalWithMetrics": 0,
- "avgEngagementRate": 0,
- "totalLikes": 0,
- "totalReplies": 0,
- "totalReposts": 0,
- "totalImpressions": 0,
- "topPosts": [
- {
- "draftId": "string",
- "draftText": "string",
- "format": "string",
- "platform": "string",
- "likes": 0,
- "replies": 0,
- "reposts": 0,
- "impressions": 0,
- "engagementRate": 0,
- "postedAt": "2019-08-24T14:15:22Z"
}
], - "byFormat": [
- {
- "format": "string",
- "count": 0,
- "avgEngagementRate": 0
}
], - "byPlatform": [
- {
- "platform": "string",
- "count": 0,
- "avgEngagementRate": 0
}
]
}Records or updates engagement metrics for a draft on a platform.
| draftId required | string non-empty |
| platform required | string non-empty |
| postId | string |
| status | string Enum: "pending" "posted" "failed" "abandoned" |
| errorMessage | string |
| likes | integer >= 0 |
| replies | integer >= 0 |
| reposts | integer >= 0 |
| impressions | integer >= 0 |
| clicks | integer >= 0 |
{- "draftId": "string",
- "platform": "string",
- "postId": "string",
- "status": "pending",
- "errorMessage": "string",
- "likes": 0,
- "replies": 0,
- "reposts": 0,
- "impressions": 0,
- "clicks": 0
}{- "id": "string",
- "draftId": "string",
- "platform": "string",
- "postId": "string",
- "status": "pending",
- "retryCount": 0,
- "retryAfter": "2019-08-24T14:15:22Z",
- "errorMessage": "string",
- "failedAt": "2019-08-24T14:15:22Z",
- "likes": 0,
- "replies": 0,
- "reposts": 0,
- "impressions": 0,
- "clicks": 0,
- "engagementRate": 0,
- "measuredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}Returns A/B experiments for the authenticated user.
| status | string Enum: "active" "concluded" "archived" Filter by experiment status |
[- {
- "id": "string",
- "name": "string",
- "parameter": "string",
- "status": "active",
- "variants": [
- {
- "id": "string",
- "label": "string",
- "config": { }
}
], - "results": { },
- "startedAt": "2019-08-24T14:15:22Z",
- "endedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
]Creates a new A/B experiment.
| name required | string [ 1 .. 100 ] characters |
| parameter required | string |
required | Array of objects (ExperimentVariant) [ 2 .. 5 ] items |
{- "name": "string",
- "parameter": "string",
- "variants": [
- {
- "id": "string",
- "label": "string",
- "config": { }
}, - {
- "id": "string",
- "label": "string",
- "config": { }
}
]
}{- "id": "string",
- "name": "string",
- "parameter": "string",
- "status": "active",
- "variants": [
- {
- "id": "string",
- "label": "string",
- "config": { }
}
], - "results": { },
- "startedAt": "2019-08-24T14:15:22Z",
- "endedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}[- {
- "id": "string",
- "type": "rss",
- "name": "string",
- "url": "string",
- "config": { },
- "enabled": true,
- "lastFetch": "2019-08-24T14:15:22Z",
- "health": "healthy",
- "failCount": 0,
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "itemCount": 0
}
]Creates a new source and performs a test fetch to validate it.
| name required | string [ 1 .. 200 ] characters |
| type required | string Enum: "rss" "twitter" "reddit" "hackernews" "google_news" "substack" |
| url required | string <uri> |
| config | object |
{- "name": "string",
- "type": "rss",
- "config": { }
}{- "id": "string",
- "type": "rss",
- "name": "string",
- "url": "string",
- "config": { },
- "enabled": true,
- "lastFetch": "2019-08-24T14:15:22Z",
- "health": "healthy",
- "failCount": 0,
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "itemCount": 0
}Updates source configuration, name, or enabled status.
| id required | string |
| name | string [ 1 .. 200 ] characters |
| type | string Enum: "rss" "twitter" "reddit" "hackernews" "google_news" "substack" |
| url | string <uri> |
| enabled | boolean |
| config | object |
{- "name": "string",
- "type": "rss",
- "enabled": true,
- "config": { }
}{- "id": "string",
- "type": "rss",
- "name": "string",
- "url": "string",
- "config": { },
- "enabled": true,
- "lastFetch": "2019-08-24T14:15:22Z",
- "health": "healthy",
- "failCount": 0,
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "itemCount": 0
}Perform an action on multiple drafts at once. Supports: approve, reject, archive, schedule, reschedule, cancel_schedule.
| action required | string Enum: "approve" "reject" "archive" "schedule" "reschedule" "cancel_schedule" |
| ids required | Array of strings [ 1 .. 100 ] items |
| feedback | string Feedback for reject action |
| scheduledAt | string <date-time> Required for reschedule, optional for schedule |
| smartSchedule | boolean |
{- "action": "approve",
- "ids": [
- "string"
], - "feedback": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "smartSchedule": true
}{- "action": "string",
- "total": 0,
- "succeeded": 0,
- "failed": 0,
- "results": {
- "succeeded": [
- "string"
], - "failed": [
- {
- "id": "string",
- "error": "string"
}
]
}
}Replace all schedule slots with a new configuration.
| dayOfWeek required | integer [ 0 .. 6 ] |
| hour required | integer [ 0 .. 23 ] |
| minute required | integer [ 0 .. 59 ] |
[- {
- "dayOfWeek": 6,
- "hour": 23,
- "minute": 59
}
]Schedules an approved draft to the next available slot.
| draftId required | string |
{- "draftId": "string"
}{- "id": "string",
- "text": "string",
- "format": "SHORT",
- "status": "pending_generation",
- "confidence": 0,
- "feedback": "string",
- "rejectionFeedback": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "postedAt": "2019-08-24T14:15:22Z",
- "postId": "string",
- "itemId": "string",
- "regeneratedFromId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns drafts scheduled within +/-30 minutes of the given time.
| scheduledAt required | string <date-time> |
| excludeDraftId | string |
{- "hasConflict": true,
- "count": 0,
- "conflicts": [
- { }
]
}Automatically schedule multiple approved drafts to available slots.
| draftIds | Array of strings Optional IDs to schedule. If omitted, schedules all approved. |
{- "draftIds": [
- "string"
]
}{- "scheduled": [
- { }
], - "skipped": 0,
- "reason": "string"
}