{"openapi":"3.1.0","info":{"title":"PushEngage (BYOK) API","version":"0.1.0","description":"PushEngage (BYOK) lets an AI assistant read your own PushEngage data through the PushEngage API with a key you supply (PushEngage site API key). Read-only: 7 tools (list_notifications, get_notification, list_segments, get_subscriber_breakdown, get_analytics_summary, list_drip_campaigns, list_triggered_campaigns). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-pushengage.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-pushengage/docs"},"termsOfService":"https://connectorbay.com/byok-pushengage/terms"},"servers":[{"url":"https://byok-pushengage.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-pushengage/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_notifications":{"post":{"operationId":"list_notifications","summary":"List push broadcasts of the site (sent, scheduled or draft) with title, message, link, send time and sent, failed, read ","description":"List push broadcasts of the site (sent, scheduled or draft) with title, message, link, send time and sent, failed, read and click counts. Use for \"Which push notifications did we send in the last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["sent","scheduled","draft"],"type":"string"},{"type":"null"}],"default":null,"description":"Notification status: sent, scheduled or draft. Without it all are returned.","title":"Status"},"start_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only notifications sent on or after this date in YYYY-MM-DD format.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only notifications sent up to and including this date in YYYY-MM-DD format.","title":"End Date"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Maximum number of notifications to return (at least 1).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Index of the first notification to return, for paging.","title":"Offset"}},"title":"list_notificationsArguments","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_notification":{"post":{"operationId":"get_notification","summary":"Get one push broadcast by id with its message, link, send time and delivery and click statistics. Use for \"How did push ","description":"Get one push broadcast by id with its message, link, send time and delivery and click statistics. Use for \"How did push notification 123456 perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"notification_id":{"description":"Id of the notification.","maxLength":200,"title":"Notification Id","type":"string"}},"required":["notification_id"],"title":"get_notificationArguments","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 subscriber segments of the site with id and name. Use for \"What subscriber segments do we have in PushEngage\".","description":"List the subscriber segments of the site with id and name. Use for \"What subscriber segments do we have in PushEngage\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"segment_type":{"anyOf":[{"const":"all","type":"string"},{"type":"null"}],"default":null,"description":"Set to 'all' to include segments based on geography, device and browser.","title":"Segment Type"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum number of segments to return (at least 1).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Index of the first segment to return, for paging.","title":"Offset"}},"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/get_subscriber_breakdown":{"post":{"operationId":"get_subscriber_breakdown","summary":"Get active subscriber counts broken down by country, state, city, device, device type and platform. Use for \"Where are m","description":"Get active subscriber counts broken down by country, state, city, device, device type and platform. Use for \"Where are my push subscribers located\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated dimensions to include: country, state, city, device, device_type, platform. Without it all are returned.","title":"Type"}},"title":"get_subscriber_breakdownArguments","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_summary":{"post":{"operationId":"get_analytics_summary","summary":"Get analytics per day, week or month: new subscribers, unsubscribes, notifications sent, views, clicks and click-through","description":"Get analytics per day, week or month: new subscribers, unsubscribes, notifications sent, views, clicks and click-through rate. Use for \"How many push clicks did we get each day in September 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"description":"Start of the period, date in YYYY-MM-DD format.","maxLength":200,"title":"From Date","type":"string"},"to_date":{"description":"End of the period, date in YYYY-MM-DD format.","maxLength":200,"title":"To Date","type":"string"},"group_by":{"description":"How to group the rows: day, week or month.","enum":["day","week","month"],"title":"Group By","type":"string"}},"required":["from_date","to_date","group_by"],"title":"get_analytics_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/list_drip_campaigns":{"post":{"operationId":"list_drip_campaigns","summary":"List drip autoresponder campaigns, newest first, with name, type, status, dates and analytics (views, clicks, sent, ctr)","description":"List drip autoresponder campaigns, newest first, with name, type, status, dates and analytics (views, clicks, sent, ctr). Use for \"Which drip autoresponders are active and how are they doing\".","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":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many campaigns per page (1 to 500).","title":"Limit"},"analytics_start_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"UTC start of the analytics period, date in YYYY-MM-DD format.","title":"Analytics Start At"},"analytics_end_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"UTC end of the analytics period, date in YYYY-MM-DD format.","title":"Analytics End At"}},"title":"list_drip_campaignsArguments","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_triggered_campaigns":{"post":{"operationId":"list_triggered_campaigns","summary":"List triggered campaigns (browse abandonment, price drop, back in stock and others), newest first, with status, event na","description":"List triggered campaigns (browse abandonment, price drop, back in stock and others), newest first, with status, event names, limits and analytics. Use for \"Which triggered push campaigns are running\".","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":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many campaigns per page (1 to 500).","title":"Limit"},"analytics_start_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"UTC start of the analytics period, date in YYYY-MM-DD format.","title":"Analytics Start At"},"analytics_end_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"UTC end of the analytics period, date in YYYY-MM-DD format.","title":"Analytics End At"}},"title":"list_triggered_campaignsArguments","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}}}}