{"openapi":"3.1.0","info":{"title":"Appetize (BYOK) API","version":"0.1.0","description":"Appetize (BYOK) lets an AI assistant read your own Appetize data through the Appetize API with a key you supply (Appetize API token (organization admin)). Read-only: 10 tools (list_apps, get_app, list_app_versions, list_app_tags, list_builds, get_build, list_tags, list_sessions, get_usage_summary, get_account_report). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-appetize.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-appetize/docs"},"termsOfService":"https://connectorbay.com/byok-appetize/terms"},"servers":[{"url":"https://byok-appetize.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-appetize/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_apps":{"post":{"operationId":"list_apps","summary":"List the apps in the Appetize account with platform, dates and the latest build; filter by text, platform, version or ta","description":"List the apps in the Appetize account with platform, dates and the latest build; filter by text, platform, version or tags. Use for \"Which apps have I uploaded to Appetize\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 1000).","title":"Limit"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text to search apps by, for example 'My App'.","title":"Search"},"platform":{"anyOf":[{"enum":["ios","android"],"type":"string"},{"type":"null"}],"default":null,"description":"Only apps of this platform.","title":"Platform"},"app_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the app with this package name or bundle identifier.","title":"App Id"},"version_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only apps with this version name, for example '1.0.0'.","title":"Version Name"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated tags the build must carry.","title":"Tags"}},"title":"list_appsArguments","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_app":{"post":{"operationId":"get_app","summary":"Get one app by platform and package name or bundle identifier, with its latest build. Use for \"What is the latest build ","description":"Get one app by platform and package name or bundle identifier, with its latest build. Use for \"What is the latest build of com.example.app on Appetize\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"App platform: ios or android.","enum":["ios","android"],"title":"Platform","type":"string"},"app_id":{"description":"App identifier: the package name on Android or the bundle identifier on iOS, for example 'com.example.app'.","maxLength":200,"title":"App Id","type":"string"}},"required":["platform","app_id"],"title":"get_appArguments","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_app_versions":{"post":{"operationId":"list_app_versions","summary":"List all version names uploaded for one app. Use for \"Which versions of com.example.app are on Appetize\".","description":"List all version names uploaded for one app. Use for \"Which versions of com.example.app are on Appetize\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"App platform: ios or android.","enum":["ios","android"],"title":"Platform","type":"string"},"app_id":{"description":"App identifier: the package name on Android or the bundle identifier on iOS, for example 'com.example.app'.","maxLength":200,"title":"App Id","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many versions per page (1 to 1000).","title":"Limit"}},"required":["platform","app_id"],"title":"list_app_versionsArguments","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_app_tags":{"post":{"operationId":"list_app_tags","summary":"List all tags used on the builds of one app. Use for \"Which tags are set on com.example.app builds in Appetize\".","description":"List all tags used on the builds of one app. Use for \"Which tags are set on com.example.app builds in Appetize\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"App platform: ios or android.","enum":["ios","android"],"title":"Platform","type":"string"},"app_id":{"description":"App identifier: the package name on Android or the bundle identifier on iOS, for example 'com.example.app'.","maxLength":200,"title":"App Id","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many tags per page (1 to 1000).","title":"Limit"}},"required":["platform","app_id"],"title":"list_app_tagsArguments","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_builds":{"post":{"operationId":"list_builds","summary":"List builds in the account with version, build number, tags, notes and last-played time; filter by app, platform, versio","description":"List builds in the account with version, build number, tags, notes and last-played time; filter by app, platform, version or tags. Use for \"Show the newest Appetize builds tagged beta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of this package name or bundle identifier.","title":"App Id"},"build_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the build with this id.","title":"Build Id"},"platform":{"anyOf":[{"enum":["ios","android"],"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of this platform.","title":"Platform"},"build_number":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only builds with this build number (versionCode on Android, CFBundleVersion on iOS).","title":"Build Number"},"version_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds with this version name.","title":"Version Name"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated tags to filter by.","title":"Tags"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many builds per page (1 to 1000, default 100).","title":"Limit"}},"title":"list_buildsArguments","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_build":{"post":{"operationId":"get_build","summary":"Get one build by id: app, version, build number, tags, note and timestamps. Use for \"What are the details of Appetize bu","description":"Get one build by id: app, version, build number, tags, note and timestamps. Use for \"What are the details of Appetize build b_abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"build_id":{"description":"Appetize build id (from list_builds).","maxLength":200,"title":"Build Id","type":"string"}},"required":["build_id"],"title":"get_buildArguments","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_tags":{"post":{"operationId":"list_tags","summary":"List every tag currently assigned to a build in the account. Use for \"What tags do I use across my Appetize builds\".","description":"List every tag currently assigned to a build in the account. Use for \"What tags do I use across my Appetize builds\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many tags per page (1 to 1000).","title":"Limit"}},"title":"list_tagsArguments","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_sessions":{"post":{"operationId":"list_sessions","summary":"List streaming sessions started in a period with device, OS version, platform, length and queue time, filterable by app ","description":"List streaming sessions started in a period with device, OS version, platform, length and queue time, filterable by app or device. Use for \"How many Appetize sessions ran on Pixel devices this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"Start of the report in UTC, inclusive, for example 2026-10-01.","maxLength":200,"title":"Start Date","type":"string"},"end_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End of the report in UTC, inclusive.","title":"End Date"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many sessions per page (1 to 1000).","title":"Limit"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text search over build id, app id, app name and similar.","title":"Search"},"app_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions for this package name or bundle identifier.","title":"App Id"},"device":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions that used this device.","title":"Device"},"platform":{"anyOf":[{"enum":["ios","android"],"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions of this platform.","title":"Platform"},"os_version":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions on this OS version (specific or major).","title":"Os Version"},"sort":{"anyOf":[{"enum":["targetId","appId","bundle","buildVersionName","device","platform","osVersion","users","sessionToken","startTime"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field, for example startTime, device or platform.","title":"Sort"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order"}},"required":["start_date"],"title":"list_sessionsArguments","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_usage_summary":{"post":{"operationId":"get_usage_summary","summary":"Summarise streaming usage as number of sessions and minutes, grouped by day, week, month or a custom number of days. Use","description":"Summarise streaming usage as number of sessions and minutes, grouped by day, week, month or a custom number of days. Use for \"How many Appetize session minutes did I use this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by_date":{"description":"Grouping: day, week, month, all, or a number of days such as '14d'.","maxLength":200,"title":"Group By Date","type":"string"},"date_anchor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"UTC date to anchor a custom 'Nd' grouping to (only with a custom group).","title":"Date Anchor"},"build_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions of this build.","title":"Build Id"},"start_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Report start in UTC, inclusive.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Report end in UTC, inclusive.","title":"End Date"}},"required":["group_by_date"],"title":"get_usage_summaryArguments","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_account_report":{"post":{"operationId":"get_account_report","summary":"Show account-level counts such as the number of users in the Appetize organization. Use for \"How many users are in my Ap","description":"Show account-level counts such as the number of users in the Appetize organization. Use for \"How many users are in my Appetize account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_account_reportArguments","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}}}}