GET /api/v1/openapi
Machine-readable API documentation for schedulers and integration tools.
CircleMix now has a public API foundation for social media schedulers and integration partners. It supports OAuth-style app approval, authenticated profile lookup, media upload, post and story publishing, post listing, and basic analytics.
GET /api/v1/openapi
Machine-readable API documentation for schedulers and integration tools.
GET /api/v1/developer-apps
POST /api/v1/developer-apps
Create a scheduler app, get a client ID, and save the one-time client secret.
GET /api/v1/connected-apps
POST /api/v1/connected-apps
DELETE /api/v1/connected-apps?id=TOKEN_ID
Let signed-in users create, view, and revoke posting tokens without sharing their password.
POST /api/v1/oauth-authorize
POST /api/v1/oauth-token
Let users approve an app and exchange the approval code for a CircleMix API token.
GET /api/v1/profile
Verify the connected CircleMix account and profile details.
POST /api/v1/media
Upload a photo or video and receive a public media URL.
GET /api/v1/posts
POST /api/v1/posts
List posts or publish text, photo, clip, poll, event, and live posts.
GET /api/v1/stories
POST /api/v1/stories
DELETE /api/v1/stories?id=STORY_ID
List, publish, or take down recent stories for the connected account.
GET /api/v1/analytics
Read basic post, reaction, comment, and view totals.
Use an authenticated CircleMix user access token for first-party tools, or connect scheduler apps with the
CircleMix OAuth beta. Connected apps receive a cmix_... API token they can use in the Authorization
header.
Authorization: Bearer YOUR_CIRCLEMIX_USER_ACCESS_TOKEN
Authorization: Bearer cmix_YOUR_CONNECTED_APP_TOKEN
Run developer-api-setup.sql in Supabase once, then create a developer app.
fetch("https://www.circlemix.app/api/v1/developer-apps", {
method: "POST",
headers: {
"content-type": "application/json",
authorization: "Bearer YOUR_CIRCLEMIX_USER_ACCESS_TOKEN"
},
body: JSON.stringify({
name: "My Scheduler",
redirect_uris: ["https://scheduler.example.com/circlemix/callback"],
scopes: ["profile:read", "post:write", "media:upload", "analytics:read"]
})
});
Send users to this approval URL. CircleMix redirects back with code and state.
https://www.circlemix.app/oauth.html?client_id=YOUR_CLIENT_ID&redirect_uri=https%3A%2F%2Fscheduler.example.com%2Fcirclemix%2Fcallback&scope=profile%3Aread%20post%3Awrite%20media%3Aupload%20analytics%3Aread&state=SECURE_RANDOM_STATE
Exchange the code for a CircleMix API token.
fetch("https://www.circlemix.app/api/v1/oauth-token", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
grant_type: "authorization_code",
code: "CODE_FROM_CALLBACK",
client_id: "YOUR_CLIENT_ID",
client_secret: "YOUR_CLIENT_SECRET",
redirect_uri: "https://scheduler.example.com/circlemix/callback"
})
});
fetch("https://www.circlemix.app/api/v1/posts", {
method: "POST",
headers: {
"content-type": "application/json",
authorization: "Bearer YOUR_CIRCLEMIX_USER_ACCESS_TOKEN"
},
body: JSON.stringify({
post_type: "text",
text: "Scheduled through the CircleMix API."
})
});
Upload media first with /api/v1/media, then publish that media URL as a story.
fetch("https://www.circlemix.app/api/v1/stories", {
method: "POST",
headers: {
"content-type": "application/json",
authorization: "Bearer YOUR_CIRCLEMIX_USER_ACCESS_TOKEN"
},
body: JSON.stringify({
caption: "A quick CircleMix story.",
media_url: "PUBLIC_MEDIA_URL_FROM_MEDIA_UPLOAD",
media_type: "video"
})
});