{"openapi":"3.1.0","info":{"title":"Airbridge (BYOK) API","version":"0.1.0","description":"Airbridge (BYOK) lets an AI assistant read your own Airbridge data through the Airbridge API with a key you supply (Airbridge API token). Read-only: 8 tools (list_actuals_metrics, list_actuals_group_bys, list_active_users_metrics, list_active_users_group_bys, request_actuals_report, get_actuals_report, request_active_users_report, get_active_users_report). The BYOK key travels with each request,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-airbridge.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-airbridge/docs"},"termsOfService":"https://connectorbay.com/byok-airbridge/terms"},"servers":[{"url":"https://byok-airbridge.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-airbridge/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_actuals_metrics":{"post":{"operationId":"list_actuals_metrics","summary":"List the metric keys (installs, events, revenue, clicks and so on) that the Actuals report accepts, grouped by topic. Us","description":"List the metric keys (installs, events, revenue, clicks and so on) that the Actuals report accepts, grouped by topic. Use for \"Which metrics can I use in an Airbridge Actuals report\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"}},"required":["app_name"],"title":"list_actuals_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/list_actuals_group_bys":{"post":{"operationId":"list_actuals_group_bys","summary":"List the group-by keys (channel, campaign, event type, country and so on) that the Actuals report accepts, grouped by to","description":"List the group-by keys (channel, campaign, event type, country and so on) that the Actuals report accepts, grouped by topic. Use for \"Which dimensions can I group an Airbridge Actuals report by\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"}},"required":["app_name"],"title":"list_actuals_group_bysArguments","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_active_users_metrics":{"post":{"operationId":"list_active_users_metrics","summary":"List the metric keys (active users, paying users, ARPU and so on) that the Active Users report accepts. Use for \"Which m","description":"List the metric keys (active users, paying users, ARPU and so on) that the Active Users report accepts. Use for \"Which metrics can I use in an Airbridge Active Users report\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"}},"required":["app_name"],"title":"list_active_users_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/list_active_users_group_bys":{"post":{"operationId":"list_active_users_group_bys","summary":"List the group-by keys the Active Users report accepts (at most 4 per report), grouped by topic. Use for \"Which dimensio","description":"List the group-by keys the Active Users report accepts (at most 4 per report), grouped by topic. Use for \"Which dimensions can I group an Airbridge Active Users report by\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"}},"required":["app_name"],"title":"list_active_users_group_bysArguments","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/request_actuals_report":{"post":{"operationId":"request_actuals_report","summary":"Ask Airbridge to compute an Actuals report for a date range (up to 400 days) with chosen metrics and group-bys; returns ","description":"Ask Airbridge to compute an Actuals report for a date range (up to 400 days) with chosen metrics and group-bys; returns a task id to read with get_actuals_report. Creates no changes to your data. Use for \"Compute installs by channel for September in Airbridge\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"},"from_date":{"description":"First day of the report as YYYY-MM-DD in the app's time zone (not in the future).","maxLength":200,"title":"From Date","type":"string"},"group_by_1":{"description":"Group-by key 1 (key from the metadata tool).","maxLength":200,"title":"Group By 1","type":"string"},"metric_1":{"description":"Metric key 1 (key from the metadata tool).","maxLength":200,"title":"Metric 1","type":"string"},"to_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Last day as YYYY-MM-DD (default today).","title":"To Date"},"group_by_2":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Group-by key 2 (key from the metadata tool). Optional.","title":"Group By 2"},"group_by_3":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Group-by key 3 (key from the metadata tool). Optional.","title":"Group By 3"},"metric_2":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Metric key 2 (key from the metadata tool). Optional.","title":"Metric 2"},"metric_3":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Metric key 3 (key from the metadata tool). Optional.","title":"Metric 3"},"metric_4":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Metric key 4 (key from the metadata tool). Optional.","title":"Metric 4"}},"required":["app_name","from_date","group_by_1","metric_1"],"title":"request_actuals_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}},"/v1/tools/get_actuals_report":{"post":{"operationId":"get_actuals_report","summary":"Fetch the result of an Actuals report task: status, then rows of metric values per group once finished; page with skip a","description":"Fetch the result of an Actuals report task: status, then rows of metric values per group once finished; page with skip and size. Use for \"Is my Airbridge installs report finished and what are the numbers\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"},"task_id":{"description":"Report task id returned by the matching request tool.","maxLength":200,"title":"Task Id","type":"string"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Rows to skip (default 0).","title":"Skip"},"size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows to return (default 100).","title":"Size"},"keyword":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Keep only rows whose group-by values contain this text.","title":"Keyword"}},"required":["app_name","task_id"],"title":"get_actuals_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}},"/v1/tools/request_active_users_report":{"post":{"operationId":"request_active_users_report","summary":"Ask Airbridge to compute an Active Users report (daily, weekly or monthly, up to 92 days) with chosen metrics and group-","description":"Ask Airbridge to compute an Active Users report (daily, weekly or monthly, up to 92 days) with chosen metrics and group-bys; returns a task id to read with get_active_users_report. Use for \"Compute daily active users per channel for last week in Airbridge\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"},"from_date":{"description":"First day of the report as YYYY-MM-DD in the app's time zone (not in the future).","maxLength":200,"title":"From Date","type":"string"},"to_date":{"description":"Last day as YYYY-MM-DD (at most 92 days after the start).","maxLength":200,"title":"To Date","type":"string"},"granularity":{"description":"Interval: day, week or month.","enum":["day","week","month"],"title":"Granularity","type":"string"},"metric_1":{"description":"Metric key 1 (key from the metadata tool).","maxLength":200,"title":"Metric 1","type":"string"},"metric_2":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Metric key 2 (key from the metadata tool). Optional.","title":"Metric 2"},"metric_3":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Metric key 3 (key from the metadata tool). Optional.","title":"Metric 3"},"metric_4":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Metric key 4 (key from the metadata tool). Optional.","title":"Metric 4"},"group_by_1":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Optional group-by key (from list_active_users_group_bys).","title":"Group By 1"},"group_by_2":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Optional second group-by key.","title":"Group By 2"}},"required":["app_name","from_date","to_date","granularity","metric_1"],"title":"request_active_users_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}},"/v1/tools/get_active_users_report":{"post":{"operationId":"get_active_users_report","summary":"Fetch the result of an Active Users report task: status, then one row per interval with the metric values. Use for \"What","description":"Fetch the result of an Active Users report task: status, then one row per interval with the metric values. Use for \"What were my Airbridge daily active users last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Airbridge app name (the unique app id shown in the dashboard), for example 'myapp'.","maxLength":200,"title":"App Name","type":"string"},"task_id":{"description":"Report task id returned by the matching request tool.","maxLength":200,"title":"Task Id","type":"string"}},"required":["app_name","task_id"],"title":"get_active_users_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}}}}