{"openapi":"3.1.0","info":{"title":"Upload Post (BYOK) API","version":"0.1.0","description":"Upload Post (BYOK) lets an AI assistant read your own Upload Post data through the Upload Post API with a key you supply (Upload-Post API key). Read-only: 9 tools (get_account, list_profiles, list_upload_history, list_scheduled_posts, get_queue_settings, get_analytics, get_cached_post_analytics, list_media, list_comments). The BYOK key travels with each request, is used for that one call only and...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-upload-post.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-upload-post/docs"},"termsOfService":"https://connectorbay.com/byok-upload-post/terms"},"servers":[{"url":"https://byok-upload-post.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-upload-post/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_account":{"post":{"operationId":"get_account","summary":"Get the Upload-Post account plan. Use for \"Which Upload-Post plan am I on\".","description":"Get the Upload-Post account plan. Use for \"Which Upload-Post plan am I on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_accountArguments","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_profiles":{"post":{"operationId":"list_profiles","summary":"List the user profiles (brands or clients) with display name and creation date. Use for \"Which profiles do I have in Upl","description":"List the user profiles (brands or clients) with display name and creation date. Use for \"Which profiles do I have in Upload-Post\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_upload_history":{"post":{"operationId":"list_upload_history","summary":"List past uploads, newest first, with platform, type, success flag, post link, title and any error. Use for \"What did I ","description":"List past uploads, newest first, with platform, type, success flag, post link, title and any error. Use for \"What did I post through Upload-Post recently and did it succeed\".","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"},"limit":{"anyOf":[{"enum":[10,20,50,100],"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page.","title":"Limit"}},"title":"list_upload_historyArguments","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_scheduled_posts":{"post":{"operationId":"list_scheduled_posts","summary":"List posts scheduled for the future with date, type, profile and title. Use for \"What is scheduled in Upload-Post\".","description":"List posts scheduled for the future with date, type, profile and title. Use for \"What is scheduled in Upload-Post\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_scheduled_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_queue_settings":{"post":{"operationId":"get_queue_settings","summary":"Get the posting queue of a profile: time zone, daily time slots and weekdays. Use for \"What is the posting queue of Uplo","description":"Get the posting queue of a profile: time zone, daily time slots and weekdays. Use for \"What is the posting queue of Upload-Post profile mybrand\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_username":{"description":"Profile username.","maxLength":100,"title":"Profile Username","type":"string"}},"required":["profile_username"],"title":"get_queue_settingsArguments","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_analytics":{"post":{"operationId":"get_analytics","summary":"Get account analytics per social network for a profile: followers, views, impressions, reach, profile views, likes, comm","description":"Get account analytics per social network for a profile: followers, views, impressions, reach, profile views, likes, comments, shares and saves. Use for \"How are my Instagram and TikTok accounts doing in Upload-Post profile mybrand\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"profile_username":{"description":"Profile username.","maxLength":100,"title":"Profile Username","type":"string"},"platforms":{"description":"Comma-separated networks: instagram, tiktok, linkedin, facebook, x, youtube, threads, pinterest, reddit, bluesky.","maxLength":100,"title":"Platforms","type":"string"},"page_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Required for Facebook: the Facebook Page id.","title":"Page Id"},"page_urn":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"LinkedIn only: organization page URN or numeric id.","title":"Page Urn"}},"required":["profile_username","platforms"],"title":"get_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_cached_post_analytics":{"post":{"operationId":"get_cached_post_analytics","summary":"Get cached per-post metrics (views, likes, comments and so on) for a profile between two dates, optionally for one netwo","description":"Get cached per-post metrics (views, likes, comments and so on) for a profile between two dates, optionally for one network. Use for \"How did individual posts of Upload-Post profile mybrand perform last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user":{"description":"Profile username to read snapshots for.","maxLength":100,"title":"User","type":"string"},"platform":{"anyOf":[{"enum":["instagram","tiktok","youtube","facebook","linkedin","threads","pinterest","reddit"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this network.","title":"Platform"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Posts per page (default 50, maximum 200).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque next-page token: pass back pagination.next_cursor from the previous answer; leave out for the first page.","title":"Cursor"},"since":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Start date YYYY-MM-DD (default 30 days ago).","title":"Since"},"until":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"End date YYYY-MM-DD (default today).","title":"Until"}},"required":["user"],"title":"get_cached_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_media":{"post":{"operationId":"list_media","summary":"List the recent posts of a connected network account (caption, type, link, date). Use for \"What are the recent Instagram","description":"List the recent posts of a connected network account (caption, type, link, date). Use for \"What are the recent Instagram posts of Upload-Post profile mybrand\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user":{"description":"Profile username as configured in Upload-Post (see list_profiles).","maxLength":100,"title":"User","type":"string"},"platform":{"description":"Network to read.","enum":["instagram","tiktok","youtube","facebook","linkedin","x","threads","pinterest","bluesky","reddit"],"title":"Platform","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (default 25, clamped to 1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque next-page token: pass back pagination.next_cursor from the previous answer; leave out for the first page.","title":"Cursor"},"page_urn":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"LinkedIn only: which LinkedIn page to read (numeric organization id or full URN).","title":"Page Urn"}},"required":["user","platform"],"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}},"/v1/tools/list_comments":{"post":{"operationId":"list_comments","summary":"List the comments on one post of a connected network (Instagram, Facebook, YouTube, LinkedIn or TikTok) with text and da","description":"List the comments on one post of a connected network (Instagram, Facebook, YouTube, LinkedIn or TikTok) with text and date. Use for \"What comments did Instagram post 17895695668004550 get\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user":{"description":"Profile username as configured in Upload-Post (see list_profiles).","maxLength":100,"title":"User","type":"string"},"platform":{"anyOf":[{"enum":["instagram","facebook","youtube","linkedin","tiktok"],"type":"string"},{"type":"null"}],"default":"instagram","description":"Network (default instagram).","title":"Platform"},"post_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Post id: YouTube video id, LinkedIn post URN, Instagram numeric media id.","title":"Post Id"},"post_url":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Full post URL, as an alternative to post_id.","title":"Post Url"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Comments per page.","title":"Limit"},"after":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: pagination.next_cursor from the previous answer.","title":"After"}},"required":["user"],"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}}}}