{"openapi":"3.1.0","info":{"title":"Publer (BYOK) API","version":"0.1.0","description":"Publer (BYOK) lets an AI assistant read your own Publer data through the Publer API with a key you supply (Publer API key (Business plan; choose read scopes)). Read-only: 10 tools (get_current_user, list_workspaces, list_accounts, list_posts, get_post, list_labels, list_analytics_charts, get_post_insights, get_hashtag_insights, get_best_times_to_post). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-publer.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-publer/docs"},"termsOfService":"https://connectorbay.com/byok-publer/terms"},"servers":[{"url":"https://byok-publer.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-publer/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_current_user":{"post":{"operationId":"get_current_user","summary":"Show the Publer user the key belongs to: name, email and picture. Use for \"Which Publer user is this key for\".","description":"Show the Publer user the key belongs to: name, email and picture. Use for \"Which Publer user is this key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_userArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_workspaces":{"post":{"operationId":"list_workspaces","summary":"List the workspaces the key's user can access with owner, plan and picture. Use for \"Which Publer workspaces do I have\".","description":"List the workspaces the key's user can access with owner, plan and picture. Use for \"Which Publer workspaces do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_workspacesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_accounts":{"post":{"operationId":"list_accounts","summary":"List the social media accounts connected to the workspace: provider, name, type and network id. Use for \"Which social ac","description":"List the social media accounts connected to the workspace: provider, name, type and network id. Use for \"Which social accounts are connected to my Publer workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_accountsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_posts":{"post":{"operationId":"list_posts","summary":"List posts of the workspace filtered by state, date range, post type, text search or account, one page at a time. Use fo","description":"List posts of the workspace filtered by state, date range, post type, text search or account, one page at a time. Use for \"What posts are scheduled in Publer for next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"anyOf":[{"enum":["all","scheduled","scheduled_approved","scheduled_pending","scheduled_declined","published","published_posted","published_deleted","draft","failed","recycling","recurring"],"type":"string"},{"type":"null"}],"default":null,"description":"Only posts in this state: all, scheduled, scheduled_approved, scheduled_pending, scheduled_declined, published, published_posted, published_deleted, draft, failed, recycling, recurring.","title":"State"},"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts scheduled or published after this date, YYYY-MM-DD; required when date_to is given.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts scheduled or published before this date, YYYY-MM-DD; required when date_from is given.","title":"Date To"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts whose content contains this text.","title":"Query"},"post_type":{"anyOf":[{"enum":["status","link","photo","gif","video","reel","story","short","poll","document","carousel","article"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this post type.","title":"Post Type"},"member_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts of this team member id.","title":"Member Id"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number for pagination.","title":"Page"}},"title":"list_postsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_post":{"post":{"operationId":"get_post","summary":"Get one post with text, state, account, scheduled time, media, link, labels and recycling or recurring settings. Use for","description":"Get one post with text, state, account, scheduled time, media, link, labels and recycling or recurring settings. Use for \"Show Publer post 66a1b2c3d4e5f60718293a4b\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Publer post id from list_posts.","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_postArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_labels":{"post":{"operationId":"list_labels","summary":"List the labels of the workspace with their colors. Use for \"What labels do I use in Publer\".","description":"List the labels of the workspace with their colors. Use for \"What labels do I use in Publer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_labelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_analytics_charts":{"post":{"operationId":"list_analytics_charts","summary":"List the analytics charts available for an account type (growth, insights, demographics) with ids to read in chart data.","description":"List the analytics charts available for an account type (growth, insights, demographics) with ids to read in chart data. Use for \"Which analytics charts does Publer have for Instagram business accounts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_type":{"anyOf":[{"enum":["ig_business","fb_page","twitter","linkedin","youtube","tiktok","google","pin_business","pin_personal","threads","in_profile","in_page","mastodon","bluesky"],"type":"string"},{"type":"null"}],"default":null,"description":"Network type to list charts for.","title":"Account Type"}},"title":"list_analytics_chartsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_post_insights":{"post":{"operationId":"get_post_insights","summary":"Get per-post analytics (reach, engagement, likes, comments, shares, saves, video views, clicks) of an account in a date ","description":"Get per-post analytics (reach, engagement, likes, comments, shares, saves, video views, clicks) of an account in a date range, 10 posts per page, sortable. Use for \"Which of my Publer posts had the most reach in October\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Publer account id from list_accounts.","maxLength":200,"title":"Account Id","type":"string"},"date_from":{"description":"Start date, formatted YYYY-MM-DD.","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End date, formatted YYYY-MM-DD.","maxLength":200,"title":"Date To","type":"string"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts whose text, title or description contains this.","title":"Query"},"post_type":{"anyOf":[{"enum":["poll","status","link","carousel","photo","video","reel","document","short","article","story"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this post type.","title":"Post Type"},"sort_by":{"anyOf":[{"enum":["scheduled_at","reach","engagement","engagement_rate","click_through_rate","reach_rate","likes","video_views","comments","shares","saves","link_clicks","post_clicks"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Sort By"},"sort_type":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction.","title":"Sort Type"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"required":["account_id","date_from","date_to"],"title":"get_post_insightsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_hashtag_insights":{"post":{"operationId":"get_hashtag_insights","summary":"Get analytics per hashtag (posts, reach, likes, comments, shares, video views, score) of an account, 10 hashtags per pag","description":"Get analytics per hashtag (posts, reach, likes, comments, shares, video views, score) of an account, 10 hashtags per page, sortable. Use for \"Which hashtags perform best on my Publer account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Publer account id from list_accounts.","maxLength":200,"title":"Account Id","type":"string"},"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Start date, YYYY-MM-DD.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End date, YYYY-MM-DD.","title":"Date To"},"sort_by":{"anyOf":[{"enum":["posts","reach","likes","comments","shares","video_views"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Sort By"},"sort_type":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction.","title":"Sort Type"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only hashtags whose name contains this text.","title":"Query"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"required":["account_id"],"title":"get_hashtag_insightsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_best_times_to_post":{"post":{"operationId":"get_best_times_to_post","summary":"Get the heatmap of best days and hours to post for an account, based on its past analytics, in a date range. Use for \"Wh","description":"Get the heatmap of best days and hours to post for an account, based on its past analytics, in a date range. Use for \"When is the best time to post for my Publer account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Publer account id from list_accounts.","maxLength":200,"title":"Account Id","type":"string"},"date_from":{"description":"Start date, formatted YYYY-MM-DD.","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End date, formatted YYYY-MM-DD.","maxLength":200,"title":"Date To","type":"string"}},"required":["account_id","date_from","date_to"],"title":"get_best_times_to_postArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}