{"openapi":"3.1.0","info":{"title":"Airship (BYOK) API","version":"0.1.0","description":"Airship (BYOK) lets an AI assistant read your own Airship data through the Airship API with a key you supply (app key). Read-only: 9 tools (list_segments, list_static_lists, list_tag_lists, list_subscription_lists, list_regions, get_push_sends_report, get_optins_report, get_devices_report, list_pushes_with_responses). 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-airship.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-airship/docs"},"termsOfService":"https://connectorbay.com/byok-airship/terms"},"servers":[{"url":"https://byok-airship.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-airship/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_segments":{"post":{"operationId":"list_segments","summary":"List the audience segments of the project with id, display name and creation and modification times (epoch milliseconds)","description":"List the audience segments of the project with id, display name and creation and modification times (epoch milliseconds), up to 200 per request. Use for \"What audience segments do I have in Airship\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many segments to return (1 to 200).","title":"Limit"}},"title":"list_segmentsArguments","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_static_lists":{"post":{"operationId":"list_static_lists","summary":"List uploaded static lists (audiences defined outside Airship) with name, description, creation and update time, channel","description":"List uploaded static lists (audiences defined outside Airship) with name, description, creation and update time, channel count and status. Member channels are not returned. Use for \"Which uploaded static lists exist in Airship and how many channels are in each\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_static_listsArguments","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_tag_lists":{"post":{"operationId":"list_tag_lists","summary":"List tag lists with name, description, dates, channel count and status. The tag contents are not returned. Use for \"Whic","description":"List tag lists with name, description, dates, channel count and status. The tag contents are not returned. Use for \"Which tag lists exist in my Airship project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tag_listsArguments","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_subscription_lists":{"post":{"operationId":"list_subscription_lists","summary":"List the subscription lists of the project with id, name, description, scopes (app, web, sms, email), messaging type and","description":"List the subscription lists of the project with id, name, description, scopes (app, web, sms, email), messaging type and default opt-in. Use for \"What subscription lists does Airship have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_subscription_listsArguments","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_regions":{"post":{"operationId":"list_regions","summary":"List geofence regions with id, name and creation and update times, paged by offset (up to 1000 per page). Use for \"What ","description":"List geofence regions with id, name and creation and update times, paged by offset (up to 1000 per page). Use for \"What geofence regions are defined in Airship\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many regions to return (1 to 1000).","title":"Limit"},"start":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based offset into the list of regions, for paging.","title":"Start"}},"title":"list_regionsArguments","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_push_sends_report":{"post":{"operationId":"get_push_sends_report","summary":"Get how many pushes were sent per hour, day or month between two times, split by platform (needs reporting access on the","description":"Get how many pushes were sent per hour, day or month between two times, split by platform (needs reporting access on the plan). Use for \"How many Airship pushes did we send each day in September 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the period as a date-time, for example 2026-09-01T00:00.","maxLength":200,"title":"Start","type":"string"},"end":{"description":"End of the period as a date-time, for example 2026-09-30T23:59.","maxLength":200,"title":"End","type":"string"},"precision":{"description":"Bucket size: HOURLY, DAILY or MONTHLY.","enum":["HOURLY","DAILY","MONTHLY"],"title":"Precision","type":"string"}},"required":["start","end","precision"],"title":"get_push_sends_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_optins_report":{"post":{"operationId":"get_optins_report","summary":"Get how many opted-in push users opened the app per hour, day or month between two times, split by platform. Use for \"Ho","description":"Get how many opted-in push users opened the app per hour, day or month between two times, split by platform. Use for \"How many opted-in users did Airship see per day in September 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the period as a date-time, for example 2026-09-01T00:00.","maxLength":200,"title":"Start","type":"string"},"end":{"description":"End of the period as a date-time, for example 2026-09-30T23:59.","maxLength":200,"title":"End","type":"string"},"precision":{"description":"Bucket size: HOURLY, DAILY or MONTHLY.","enum":["HOURLY","DAILY","MONTHLY"],"title":"Precision","type":"string"}},"required":["start","end","precision"],"title":"get_optins_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_devices_report":{"post":{"operationId":"get_devices_report","summary":"Get the number of installed, opted-in, opted-out and uninstalled devices per platform as of a date. Use for \"How many de","description":"Get the number of installed, opted-in, opted-out and uninstalled devices per platform as of a date. Use for \"How many devices are opted in to push in Airship\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date":{"description":"Count device events before this date-time, for example 2026-10-01T00:00.","maxLength":200,"title":"Date","type":"string"}},"required":["date"],"title":"get_devices_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/list_pushes_with_responses":{"post":{"operationId":"list_pushes_with_responses","summary":"List pushes sent in a period with push id, send time, push type, group id, sends and direct responses. Use for \"Which Ai","description":"List pushes sent in a period with push id, send time, push type, group id, sends and direct responses. Use for \"Which Airship pushes went out in September and how many responses did each get\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the period as a date-time, for example 2026-09-01T00:00.","maxLength":200,"title":"Start","type":"string"},"end":{"description":"End of the period as a date-time, for example 2026-09-30T23:59.","maxLength":200,"title":"End","type":"string"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many pushes to return per request (1 to 200; the provider documents only a minimum, so larger pages may be capped).","title":"Limit"}},"required":["start","end"],"title":"list_pushes_with_responsesArguments","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}}}}