{"openapi":"3.1.0","info":{"title":"Postiz (BYOK) API","version":"0.1.0","description":"Postiz (BYOK) lets an AI assistant read your own Postiz data through the Postiz API with a key you supply (Postiz API key (sent as-is, without Bearer)). Read-only: 11 tools (check_connection, get_workspace, list_channels, list_channel_groups, get_channel_rules, find_next_slot, list_posts, get_channel_analytics, get_post_analytics, list_notifications, list_media). 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-postiz.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-postiz/docs"},"termsOfService":"https://connectorbay.com/byok-postiz/terms"},"servers":[{"url":"https://byok-postiz.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-postiz/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/check_connection":{"post":{"operationId":"check_connection","summary":"Check that the Postiz API key is valid and connected. Use for \"Is my Postiz API key working\".","description":"Check that the Postiz API key is valid and connected. Use for \"Is my Postiz API key working\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"check_connectionArguments","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_workspace":{"post":{"operationId":"get_workspace","summary":"Show the Postiz workspace (organization) the API key belongs to. Use for \"Which Postiz workspace is this key connected t","description":"Show the Postiz workspace (organization) the API key belongs to. Use for \"Which Postiz workspace is this key connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_workspaceArguments","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_channels":{"post":{"operationId":"list_channels","summary":"List the connected social media channels (accounts) with platform, profile name and whether each is disabled, optionally","description":"List the connected social media channels (accounts) with platform, profile name and whether each is disabled, optionally for one customer group. Use for \"Which social accounts are connected in Postiz\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only channels assigned to the customer group with this id (from list_channel_groups).","title":"Group"}},"title":"list_channelsArguments","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_channel_groups":{"post":{"operationId":"list_channel_groups","summary":"List the customer groups used to organize channels. Use for \"What customer groups do I have in Postiz\".","description":"List the customer groups used to organize channels. Use for \"What customer groups do I have in Postiz\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_channel_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/get_channel_rules":{"post":{"operationId":"get_channel_rules","summary":"Get a channel's posting rules, maximum post length and the names of the provider tools available on it. Use for \"What ar","description":"Get a channel's posting rules, maximum post length and the names of the provider tools available on it. Use for \"What are the posting rules and length limit for my Postiz channel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel_id":{"description":"Postiz channel (integration) id, from list_channels.","maxLength":200,"title":"Channel Id","type":"string"}},"required":["channel_id"],"title":"get_channel_rulesArguments","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/find_next_slot":{"post":{"operationId":"find_next_slot","summary":"Find the next free posting time slot of a channel. Use for \"When is the next free Postiz slot on my channel\".","description":"Find the next free posting time slot of a channel. Use for \"When is the next free Postiz slot on my channel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel_id":{"description":"Postiz channel (integration) id, from list_channels.","maxLength":200,"title":"Channel Id","type":"string"}},"required":["channel_id"],"title":"find_next_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_posts":{"post":{"operationId":"list_posts","summary":"List posts (queued, published, errored or draft) scheduled in a date range, with channel, publish time, state and link. ","description":"List posts (queued, published, errored or draft) scheduled in a date range, with channel, publish time, state and link. Use for \"Which Postiz posts are scheduled for next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"Start of the range, UTC ISO time such as 2026-10-01T00:00:00.000Z.","maxLength":200,"title":"Start Date","type":"string"},"end_date":{"description":"End of the range, UTC ISO time such as 2026-10-31T23:59:59.000Z.","maxLength":200,"title":"End Date","type":"string"},"customer":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts of the customer group with this id.","title":"Customer"}},"required":["start_date","end_date"],"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_channel_analytics":{"post":{"operationId":"get_channel_analytics","summary":"Get a channel's metrics (followers, impressions, engagement and similar, depending on the platform) as daily series for ","description":"Get a channel's metrics (followers, impressions, engagement and similar, depending on the platform) as daily series for the last N days. Use for \"How did my Postiz channel grow over the last 30 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel_id":{"description":"Postiz channel (integration) id, from list_channels.","maxLength":200,"title":"Channel Id","type":"string"},"days":{"description":"How many days back to look (for example 7, 30 or 90).","maximum":365,"minimum":1,"title":"Days","type":"integer"}},"required":["channel_id","days"],"title":"get_channel_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_post_analytics":{"post":{"operationId":"get_post_analytics","summary":"Get metrics of one published post (likes, comments, shares, impressions and similar, depending on the platform) for the ","description":"Get metrics of one published post (likes, comments, shares, impressions and similar, depending on the platform) for the last N days. Use for \"How did Postiz post abc123 perform this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"Postiz post id, from list_posts.","maxLength":200,"title":"Post Id","type":"string"},"days":{"description":"How many days back to look (for example 7, 30 or 90).","maximum":365,"minimum":1,"title":"Days","type":"integer"}},"required":["post_id","days"],"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/list_notifications":{"post":{"operationId":"list_notifications","summary":"List workspace notifications, newest first, 100 per page. Use for \"What are my latest Postiz notifications\".","description":"List workspace notifications, newest first, 100 per page. Use for \"What are my latest Postiz notifications\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"title":"list_notificationsArguments","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_media":{"post":{"operationId":"list_media","summary":"List files in the media library, newest first, 18 per page, optionally filtered by file name. Use for \"Which images are ","description":"List files in the media library, newest first, 18 per page, optionally filtered by file name. Use for \"Which images are in my Postiz media library\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Case-insensitive text to match in the original file name.","title":"Search"}},"title":"list_mediaArguments","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}}}}