API Reference

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

json
{
  "id": "9f1e2d4c-...",
  "platform": "twitter",
  "username": "openpost",
  "display_name": "OpenPost",
  "status": "active"
}
FieldTypeDescription
iduuidStable integration ID.
platformenumtwitter, bluesky, instagram, youtube, tiktok, threads, facebook, linkedin. Only twitter and bluesky are live for posting today; the others are pending platform approval.
usernamestringHandle or account identifier on the platform.
display_namestringDisplay name pulled from the platform.
statusenumactive, needs_refresh (token expired — reconnect in the dashboard), disconnected.

List integrations

GET/v1/integrations

All active connected accounts for the workspace.

curl
curl https://api.openpost.so/v1/integrations \
  -H "Authorization: Bearer $OP_KEY"

Start an OAuth connect flow

GET/v1/integrations/{platform}/connect

Returns an OAuth authorization URL for the platform. For Bluesky, returns credential-auth instructions instead (use POST).

json
{
  "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)

POST/v1/integrations/bluesky/connect

Bluesky authenticates with an app password rather than OAuth.

curl
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

GET/v1/integrations/{id}/next-slot

Returns the next 1-hour-gap slot within the next 7 days that has no scheduled post on this integration.

json
{
  "date": "2026-04-17T13:00:00Z",
  "platform": "twitter",
  "integration_id": "9f1e2d4c-..."
}
Use next-slotas a lightweight “when would this post go out?” preview before you commit to scheduling.

Disconnect

DELETE/v1/integrations/{id}

Marks the integration as disconnected. Scheduled posts targeting this integration will fail unless it's reconnected before their scheduled_at.

Last updated April 2026 Edit this page