{"openapi":"3.1.0","info":{"title":"Postproxy (BYOK) API","version":"0.1.0","description":"Postproxy (BYOK) lets an AI assistant read your own Postproxy data through the Postproxy API with a key you supply (Postproxy API key). Read-only: 12 tools (list_profiles, get_profile, list_profile_placements, get_profile_stats, get_profile_daily_stats, list_posts, get_post, get_post_stats, list_comments, list_profile_groups, list_post_queues, list_calendar_events). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-postproxy.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-postproxy/docs"},"termsOfService":"https://connectorbay.com/byok-postproxy/terms"},"servers":[{"url":"https://byok-postproxy.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-postproxy/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 the connected social profiles with network, name, username, connection status, profile group, token expiry and numb","description":"List the connected social profiles with network, name, username, connection status, profile group, token expiry and number of posts. Use for \"Which social profiles are connected in Postproxy and are any expired\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"}},"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/get_profile":{"post":{"operationId":"get_profile","summary":"Get one connected social profile with network, status, post count, link and its latest summary statistics. Use for \"Show","description":"Get one connected social profile with network, status, post count, link and its latest summary statistics. Use for \"Show Postproxy profile prof123abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"description":"Profile id from list_profiles.","maxLength":60,"title":"Profile Id","type":"string"},"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"}},"required":["profile_id"],"title":"get_profileArguments","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_profile_placements":{"post":{"operationId":"list_profile_placements","summary":"List the placements of a profile (for example the Facebook Pages, LinkedIn organizations or Telegram channels reachable ","description":"List the placements of a profile (for example the Facebook Pages, LinkedIn organizations or Telegram channels reachable through it). Use for \"What Pages or channels sit behind Postproxy profile prof123abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"description":"Profile id from list_profiles.","maxLength":60,"title":"Profile Id","type":"string"},"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"}},"required":["profile_id"],"title":"list_profile_placementsArguments","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_profile_stats":{"post":{"operationId":"get_profile_stats","summary":"Get recorded follower and account statistics snapshots for a profile over time. Use for \"How did the followers of Postpr","description":"Get recorded follower and account statistics snapshots for a profile over time. Use for \"How did the followers of Postproxy profile prof123abc develop\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"description":"Profile id from list_profiles.","maxLength":60,"title":"Profile Id","type":"string"},"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"},"placement_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Required for Facebook, LinkedIn and Telegram profiles: the placement id from list_profile_placements.","title":"Placement Id"},"from_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only snapshots recorded at or after this time (ISO 8601).","title":"From Time"},"to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only snapshots recorded at or before this time (ISO 8601).","title":"To"}},"required":["profile_id"],"title":"get_profile_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/get_profile_daily_stats":{"post":{"operationId":"get_profile_daily_stats","summary":"Get daily views, viewers, likes, comments and shares for a profile over a date range (default the last 30 days). Use for","description":"Get daily views, viewers, likes, comments and shares for a profile over a date range (default the last 30 days). Use for \"How many views did Postproxy profile prof123abc get per day last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_id":{"description":"Profile id from list_profiles.","maxLength":60,"title":"Profile Id","type":"string"},"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"},"placement_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Required for Facebook, LinkedIn and Telegram profiles: the placement id from list_profile_placements.","title":"Placement Id"},"from_time":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Start date (ISO 8601 date). Defaults to 29 days before the end date; the range is capped at 366 days.","title":"From Time"},"to":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"End date (ISO 8601 date). Defaults to yesterday.","title":"To"},"attribution":{"anyOf":[{"enum":["received","publish"],"type":"string"},{"type":"null"}],"default":null,"description":"received (by day the engagement happened, default) or publish (by day the content was published).","title":"Attribution"}},"required":["profile_id"],"title":"get_profile_daily_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 (drafts, scheduled, published and imported) newest first with text, status, schedule, queue and per-network r","description":"List posts (drafts, scheduled, published and imported) newest first with text, status, schedule, queue and per-network results including permalink and impressions. Use for \"What did we publish through Postproxy recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, 1-based (default 1).","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Posts per page (default 10).","title":"Per Page"},"status":{"anyOf":[{"enum":["draft","scheduled","published","failed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only drafts, scheduled, published or failed posts.","title":"Status"},"source":{"anyOf":[{"enum":["postproxy","imported"],"type":"string"},{"type":"null"}],"default":null,"description":"postproxy (created in the app or API) or imported (imported from a connected network).","title":"Source"},"scheduled_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts scheduled after this ISO 8601 date.","title":"Scheduled After"}},"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, status, schedule, queue and per-network results (permalink, error, impressions). Use for \"Show P","description":"Get one post with text, status, schedule, queue and per-network results (permalink, error, impressions). Use for \"Show Postproxy post post123abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"Post id from list_posts.","maxLength":60,"title":"Post Id","type":"string"},"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"}},"required":["post_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/get_post_stats":{"post":{"operationId":"get_post_stats","summary":"Get recorded engagement statistics snapshots (impressions, likes, comments and so on) for up to 50 posts. Use for \"What ","description":"Get recorded engagement statistics snapshots (impressions, likes, comments and so on) for up to 50 posts. Use for \"What are the stats of Postproxy posts post123abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_ids":{"description":"Comma-separated post ids (up to 50).","maxLength":1000,"title":"Post Ids","type":"string"},"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"},"profiles":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated profile ids or network names to restrict to, for example instagram,twitter.","title":"Profiles"},"from_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only snapshots recorded at or after this time (ISO 8601).","title":"From Time"},"to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only snapshots recorded at or before this time (ISO 8601).","title":"To"}},"required":["post_ids"],"title":"get_post_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_comments":{"post":{"operationId":"list_comments","summary":"List comments received across posts, newest first, with text, network, post, like count and whether hidden. Use for \"Wha","description":"List comments received across posts, newest first, with text, network, post, like count and whether hidden. Use for \"What comments came in on our Postproxy posts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, 1-based (default 1).","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Comments per page (default 10).","title":"Per Page"},"post_ids":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated post ids to restrict to.","title":"Post Ids"},"profiles":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated profile ids or network names to restrict to.","title":"Profiles"},"from_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only comments received at or after this ISO 8601 date/time.","title":"From Time"},"to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only comments received at or before this time.","title":"To"}},"title":"list_commentsArguments","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_profile_groups":{"post":{"operationId":"list_profile_groups","summary":"List the profile groups (workspaces) with id, name and number of profiles. Use for \"Which profile groups do I have in Po","description":"List the profile groups (workspaces) with id, name and number of profiles. Use for \"Which profile groups do I have in Postproxy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_profile_groupsArguments","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_post_queues":{"post":{"operationId":"list_post_queues","summary":"List the recurring publishing queues with timezone, enabled flag, time slots and number of queued posts. Use for \"What p","description":"List the recurring publishing queues with timezone, enabled flag, time slots and number of queued posts. Use for \"What publishing queues are set up in Postproxy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_group_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Profile group id to work in. Optional when the API key is scoped to one group; a full-access key may pass it to pick a group.","title":"Profile Group Id"}},"title":"list_post_queuesArguments","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_calendar_events":{"post":{"operationId":"list_calendar_events","summary":"List public content-calendar events (holidays, awareness days, sporting and commerce events) with posting tips, by count","description":"List public content-calendar events (holidays, awareness days, sporting and commerce events) with posting tips, by country, month or search text. Use for \"What awareness days are coming up in the US this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated ISO 3166-1 alpha-2 country codes, for example US,GB (global events are always included).","title":"Country"},"month":{"anyOf":[{"maximum":12,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Month number 1 to 12.","title":"Month"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text in event names.","title":"Q"},"from_time":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Start date YYYY-MM-DD.","title":"From Time"},"to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"End date YYYY-MM-DD.","title":"To"},"type":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated event types such as public_holiday, awareness_day, sporting_event, commerce_event.","title":"Type"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, 1-based (default 1).","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Events per page (default 50).","title":"Per Page"}},"title":"list_calendar_eventsArguments","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}}}}