{"openapi":"3.1.0","info":{"title":"OneSignal (BYOK) API","version":"0.1.0","description":"OneSignal (BYOK) lets an AI assistant read your own OneSignal data through the OneSignal API with a key you supply (App API key (starts with os_v2_app_)). Read-only: 6 tools (get_app, list_messages, get_message, list_segments, list_templates, get_outcomes). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-onesignal.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-onesignal/docs"},"termsOfService":"https://connectorbay.com/byok-onesignal/terms"},"servers":[{"url":"https://byok-onesignal.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-onesignal/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_app":{"post":{"operationId":"get_app","summary":"Get an app's name, organization, subscription counts and timestamps. Push credentials in the same record are never retur","description":"Get an app's name, organization, subscription counts and timestamps. Push credentials in the same record are never returned by this connector. Use for \"How many subscribers does my OneSignal app have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"Your OneSignal App ID (UUID).","maxLength":200,"title":"App Id","type":"string"},"view":{"anyOf":[{"const":"config","type":"string"},{"type":"null"}],"default":null,"description":"Set to 'config' to skip the subscription count lookup (faster).","title":"View"}},"required":["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_messages":{"post":{"operationId":"list_messages","summary":"List sent messages (push, email, SMS) newest first with name, send time and delivery counts. Up to 50 per request. Use f","description":"List sent messages (push, email, SMS) newest first with name, send time and delivery counts. Up to 50 per request. Use for \"What notifications did my OneSignal app send recently and how many were delivered\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"Your OneSignal App ID (UUID).","maxLength":200,"title":"App Id","type":"string"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many messages to return (1 to 50, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many messages to skip, for paging.","title":"Offset"},"kind":{"anyOf":[{"enum":["0","1","3"],"type":"string"},{"type":"null"}],"default":null,"description":"Creation method: 0 dashboard, 1 API, 3 automated (default all).","title":"Kind"},"template_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages sent from this template ID.","title":"Template Id"}},"required":["app_id"],"title":"list_messagesArguments","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_message":{"post":{"operationId":"get_message","summary":"Get one message by ID with content, targeting, send time and delivery counts (API-sent messages stay available for 30 da","description":"Get one message by ID with content, targeting, send time and delivery counts (API-sent messages stay available for 30 days). Use for \"How did this OneSignal message perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"message_id":{"description":"Message ID (UUID) from list_messages.","maxLength":200,"title":"Message Id","type":"string"},"app_id":{"description":"Your OneSignal App ID (UUID).","maxLength":200,"title":"App Id","type":"string"}},"required":["message_id","app_id"],"title":"get_messageArguments","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_segments":{"post":{"operationId":"list_segments","summary":"List the app's segments with name, active flag and timestamps (filters and users are not returned). Up to 300 per reques","description":"List the app's segments with name, active flag and timestamps (filters and users are not returned). Up to 300 per request. Use for \"Which user segments exist in my OneSignal app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"Your OneSignal App ID (UUID).","maxLength":200,"title":"App Id","type":"string"},"limit":{"anyOf":[{"maximum":300,"minimum":1,"type":"integer"},{"type":"null"}],"default":300,"description":"How many segments to return (1 to 300, default 300).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many segments to skip.","title":"Offset"}},"required":["app_id"],"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_templates":{"post":{"operationId":"list_templates","summary":"List message templates with name and timestamps, optionally for one channel (push, email, sms). Up to 50 per request. Us","description":"List message templates with name and timestamps, optionally for one channel (push, email, sms). Up to 50 per request. Use for \"What message templates do I have in OneSignal\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"Your OneSignal App ID (UUID).","maxLength":200,"title":"App Id","type":"string"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many templates to return (1 to 50, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many templates to skip.","title":"Offset"},"channel":{"anyOf":[{"enum":["push","email","sms"],"type":"string"},{"type":"null"}],"default":null,"description":"Only templates for this channel.","title":"Channel"}},"required":["app_id"],"title":"list_templatesArguments","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_outcomes":{"post":{"operationId":"get_outcomes","summary":"Get aggregated outcome metrics (clicks, confirmed deliveries, session duration) for the app over the last hour, day or m","description":"Get aggregated outcome metrics (clicks, confirmed deliveries, session duration) for the app over the last hour, day or month. Use for \"How many notification clicks did my OneSignal app get in the last day\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"Your OneSignal App ID (UUID).","maxLength":200,"title":"App Id","type":"string"},"outcome_names":{"description":"Comma-separated outcome names with .count or .sum, for example 'os__click.count,os__confirmed_delivery.count'.","maxLength":200,"title":"Outcome Names","type":"string"},"outcome_time_range":{"anyOf":[{"enum":["1h","1d","1mo"],"type":"string"},{"type":"null"}],"default":"1h","description":"Time range: 1h, 1d or 1mo.","title":"Outcome Time Range"},"outcome_attribution":{"anyOf":[{"enum":["direct","influenced","unattributed","total"],"type":"string"},{"type":"null"}],"default":"total","description":"Attribution: direct, influenced, unattributed or total.","title":"Outcome Attribution"}},"required":["app_id","outcome_names"],"title":"get_outcomesArguments","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}}}}