Integrations
Connect channels and query slots
An integrationis a connected social account in your workspace. Posts reference integrations by ID when deciding where to publish. You can’t connect an integration via the API (that needs OAuth in the browser), but you can list and inspect them.
The Integration object
{
"id": "9f1e2d4c-...",
"platform": "twitter",
"username": "openpost",
"display_name": "OpenPost",
"status": "active"
}
| Field | Type | Description |
|---|---|---|
| id | uuid | Stable integration ID. |
| platform | enum | twitter, bluesky, instagram, youtube, tiktok, threads, facebook, linkedin. Only twitter and bluesky are live for posting today; the others are pending platform approval. |
| username | string | Handle or account identifier on the platform. |
| display_name | string | Display name pulled from the platform. |
| status | enum | active, needs_refresh (token expired — reconnect in the dashboard), disconnected. |
List integrations
/v1/integrationsauth: Bearer tokenAll active connected accounts for the workspace.
curl https://api.openpost.so/v1/integrations \
-H "Authorization: Bearer $OP_KEY"
Start an OAuth connect flow
/v1/integrations/{platform}/connectauth: Bearer tokenReturns an OAuth authorization URL for the platform. For Bluesky, returns credential-auth instructions instead (use POST).
{
"auth_type": "oauth",
"url": "https://twitter.com/i/oauth2/authorize?...",
"state": "abc...",
"code_verifier": "...",
"redirect_uri": "https://api.openpost.so/api/platforms/twitter/callback"
}
Connect via credentials (Bluesky)
/v1/integrations/bluesky/connectauth: Bearer tokenBluesky authenticates with an app password rather than OAuth.
curl -X POST https://api.openpost.so/v1/integrations/bluesky/connect \
-H "Authorization: Bearer $OP_KEY" \
-H "Content-Type: application/json" \
-d '{ "identifier": "you.bsky.social", "password": "xxxx-xxxx-xxxx-xxxx" }'
Next available posting slot
/v1/integrations/{id}/next-slotauth: Bearer tokenReturns the next 1-hour-gap slot within the next 7 days that has no scheduled post on this integration.
{
"date": "2026-04-17T13:00:00Z",
"platform": "twitter",
"integration_id": "9f1e2d4c-..."
}
next-slotas a lightweight “when would this post go out?” preview before you commit to scheduling.Disconnect
/v1/integrations/{id}auth: Bearer tokenMarks the integration as disconnected. Scheduled posts targeting this integration will fail unless it's reconnected before their scheduled_at.