{"openapi":"3.1.0","info":{"title":"Zernio (BYOK) API","version":"0.1.0","description":"Zernio (BYOK) lets an AI assistant read your own Zernio data through the Zernio API with a key you supply (Zernio API key). Read-only: 11 tools (list_profiles, list_accounts, check_accounts_health, get_follower_stats, list_posts, get_post_analytics, get_daily_metrics, get_best_times_to_post, list_queue_slots, get_next_queue_slot, list_reviews). The BYOK key travels with each request, is used for...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zernio.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zernio/docs"},"termsOfService":"https://connectorbay.com/byok-zernio/terms"},"servers":[{"url":"https://byok-zernio.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zernio/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/list_profiles":{"post":{"operationId":"list_profiles","summary":"List your Zernio profiles (named groups of social accounts) with timezone and account count. Use for \"Which Zernio profi","description":"List your Zernio profiles (named groups of social accounts) with timezone and account count. Use for \"Which Zernio profiles do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only the profile with exactly this name.","title":"Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 100).","title":"Limit"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many profiles to skip.","title":"Skip"}},"title":"list_profilesArguments","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 connected social accounts with platform, username, follower count and whether each needs reconnecting, filtered by ","description":"List connected social accounts with platform, username, follower count and whether each needs reconnecting, filtered by profile, platform or status. Use for \"Which of my Zernio social accounts need to be reconnected\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"platform":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform, for example instagram, tiktok, linkedin or facebook.","title":"Platform"},"status":{"anyOf":[{"enum":["connected","disconnected"],"type":"string"},{"type":"null"}],"default":null,"description":"Only connected or only disconnected accounts.","title":"Status"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Match on username, display name or platform user id.","title":"Search"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 50).","title":"Limit"}},"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/check_accounts_health":{"post":{"operationId":"check_accounts_health","summary":"Check the health of connected accounts: token validity, posting and analytics permissions, reconnect needs and listed is","description":"Check the health of connected accounts: token validity, posting and analytics permissions, reconnect needs and listed issues. Use for \"Are any of my Zernio accounts in an error state\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"platform":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform, for example instagram or linkedin.","title":"Platform"},"status":{"anyOf":[{"enum":["healthy","warning","error"],"type":"string"},{"type":"null"}],"default":null,"description":"Only accounts with this health status.","title":"Status"}},"title":"check_accounts_healthArguments","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_follower_stats":{"post":{"operationId":"get_follower_stats","summary":"Get follower counts and growth over a date range for connected accounts (needs the analytics add-on; X accounts may carr","description":"Get follower counts and growth over a date range for connected accounts (needs the analytics add-on; X accounts may carry a small pass-through read fee). Use for \"How many followers did my Zernio accounts gain this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, YYYY-MM-DD.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, YYYY-MM-DD.","title":"To Date"},"granularity":{"anyOf":[{"enum":["daily","weekly","monthly"],"type":"string"},{"type":"null"}],"default":"daily","description":"How to group the history.","title":"Granularity"}},"title":"get_follower_statsArguments","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 with status (draft, scheduled, published, failed and so on), target platforms and schedule time, newest sched","description":"List posts with status (draft, scheduled, published, failed and so on), target platforms and schedule time, newest schedule first. Use for \"Which Zernio posts are scheduled for the coming week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["draft","scheduled","publishing","published","partial","failed","cancelled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only posts with this status.","title":"Status"},"platform":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform, for example instagram, tiktok, linkedin or facebook.","title":"Platform"},"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"account_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this connected account, by its 24-character id from list_accounts.","title":"Account Id"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, YYYY-MM-DD.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, YYYY-MM-DD.","title":"To Date"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to find in the post content.","title":"Search"},"sort_by":{"anyOf":[{"enum":["scheduled-desc","scheduled-asc","created-desc","created-asc","status","platform"],"type":"string"},{"type":"null"}],"default":"scheduled-desc","description":"Sort order.","title":"Sort By"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 50).","title":"Limit"}},"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_analytics":{"post":{"operationId":"get_post_analytics","summary":"Get engagement analytics of published posts (or of one post by id) over a date range, sorted by date or a metric; needs ","description":"Get engagement analytics of published posts (or of one post by id) over a date range, sorted by date or a metric; needs the analytics add-on. For X accounts Zernio passes on X's read fee (about $0.005 per post), so at most 20 posts are returned. Use for \"Which of my Zernio posts got the most engagement this quarter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only this post, by Zernio or platform post id.","title":"Post Id"},"platform":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform, for example instagram, tiktok, linkedin or facebook.","title":"Platform"},"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"account_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this connected account, by its 24-character id from list_accounts.","title":"Account Id"},"source":{"anyOf":[{"enum":["all","late","external"],"type":"string"},{"type":"null"}],"default":"all","description":"Which posts: all, only those published through Zernio (late) or only those synced from the platforms (external).","title":"Source"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, YYYY-MM-DD.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, YYYY-MM-DD.","title":"To Date"},"sort_by":{"anyOf":[{"enum":["date","engagement","impressions","reach","likes","comments","shares","saves","clicks","views"],"type":"string"},{"type":"null"}],"default":"date","description":"Sort by date, engagement or a metric.","title":"Sort By"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","title":"Order"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Results per page (1 to 20).","title":"Limit"}},"title":"get_post_analyticsArguments","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_daily_metrics":{"post":{"operationId":"get_daily_metrics","summary":"Get day-by-day post counts and summed impressions, reach, likes, comments, shares, saves, clicks and views, plus a per-p","description":"Get day-by-day post counts and summed impressions, reach, likes, comments, shares, saves, clicks and views, plus a per-platform breakdown; needs the analytics add-on. Use for \"How did my social impressions trend day by day over the last 30 days in Zernio\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform, for example instagram, tiktok, linkedin or facebook.","title":"Platform"},"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"account_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this connected account, by its 24-character id from list_accounts.","title":"Account Id"},"source":{"anyOf":[{"enum":["all","late","external"],"type":"string"},{"type":"null"}],"default":"all","description":"Which posts: all, only those published through Zernio (late) or only those synced from the platforms (external).","title":"Source"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, YYYY-MM-DD.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, YYYY-MM-DD.","title":"To Date"}},"title":"get_daily_metricsArguments","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 best weekday and hour slots to post (UTC), ranked by average engagement of past posts; needs the analytics add-o","description":"Get the best weekday and hour slots to post (UTC), ranked by average engagement of past posts; needs the analytics add-on. Use for \"When is the best time to post on Instagram according to my Zernio data\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform, for example instagram, tiktok, linkedin or facebook.","title":"Platform"},"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"account_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this connected account, by its 24-character id from list_accounts.","title":"Account Id"},"source":{"anyOf":[{"enum":["all","late","external"],"type":"string"},{"type":"null"}],"default":"all","description":"Which posts: all, only those published through Zernio (late) or only those synced from the platforms (external).","title":"Source"}},"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}},"/v1/tools/list_queue_slots":{"post":{"operationId":"list_queue_slots","summary":"List the posting queue schedule (weekly time slots) of a profile, or all of its queues. Use for \"What is my Zernio posti","description":"List the posting queue schedule (weekly time slots) of a profile, or all of its queues. Use for \"What is my Zernio posting queue schedule for this profile\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"description":"Profile id, from list_profiles.","maxLength":24,"title":"Profile Id","type":"string"},"queue_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this queue.","title":"Queue Id"},"all":{"anyOf":[{"enum":["true","false"],"type":"string"},{"type":"null"}],"default":null,"description":"Set to true to list every queue of the profile.","title":"All"}},"required":["profile_id"],"title":"list_queue_slotsArguments","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_next_queue_slot":{"post":{"operationId":"get_next_queue_slot","summary":"Show the next free queue slot of a profile. Use for \"When is my next free Zernio queue slot\".","description":"Show the next free queue slot of a profile. Use for \"When is my next free Zernio queue slot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"description":"Profile id, from list_profiles.","maxLength":24,"title":"Profile Id","type":"string"},"queue_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this queue.","title":"Queue Id"}},"required":["profile_id"],"title":"get_next_queue_slotArguments","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_reviews":{"post":{"operationId":"list_reviews","summary":"List reviews of connected Facebook Pages and Google Business Profiles with rating, text, date and whether you replied, f","description":"List reviews of connected Facebook Pages and Google Business Profiles with rating, text, date and whether you replied, filtered by rating or reply status. Use for \"Which low-rated reviews have I not replied to in Zernio\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this profile, by its 24-character id from list_profiles.","title":"Profile Id"},"account_id":{"anyOf":[{"maxLength":24,"type":"string"},{"type":"null"}],"default":null,"description":"Only this connected account, by its 24-character id from list_accounts.","title":"Account Id"},"platform":{"anyOf":[{"enum":["facebook","googlebusiness"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this platform.","title":"Platform"},"min_rating":{"anyOf":[{"maximum":5,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Lowest rating to include (1 to 5).","title":"Min Rating"},"max_rating":{"anyOf":[{"maximum":5,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Highest rating to include (1 to 5).","title":"Max Rating"},"has_reply":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for reviews you replied to, false for those still open.","title":"Has Reply"},"sort_by":{"anyOf":[{"enum":["date","rating"],"type":"string"},{"type":"null"}],"default":"date","description":"Sort by date or rating.","title":"Sort By"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's pagination.nextCursor.","title":"Cursor"}},"title":"list_reviewsArguments","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}}}}