{"openapi":"3.1.0","info":{"title":"Braze (BYOK) API","version":"0.1.0","description":"Braze (BYOK) lets an AI assistant read your own Braze data through the Braze API with a key you supply (REST API key (needs the matching list/details permissions)). Read-only: 10 tools (list_campaigns, get_campaign_details, get_campaign_analytics, list_canvases, list_segments, list_custom_events, get_new_users_series, get_daily_active_users_series, list_email_templates, list_content_blocks). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-braze.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-braze/docs"},"termsOfService":"https://connectorbay.com/byok-braze/terms"},"servers":[{"url":"https://byok-braze.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-braze/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_campaigns":{"post":{"operationId":"list_campaigns","summary":"List campaigns (id, name, last edit time, tags, whether API-triggered), 100 per page. Needs the campaigns.list permissio","description":"List campaigns (id, name, last edit time, tags, whether API-triggered), 100 per page. Needs the campaigns.list permission. Use for \"What campaigns do I have in Braze, newest first\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0. Each page holds up to 100 items.","title":"Page"},"include_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include archived campaigns.","title":"Include Archived"},"sort_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Creation-time order: asc (oldest first, the default) or desc (newest first).","title":"Sort Direction"}},"required":["cluster"],"title":"list_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/get_campaign_details":{"post":{"operationId":"get_campaign_details","summary":"Get one campaign's name, description, schedule type, channels, first and last send, tags, teams and enabled/draft/archiv","description":"Get one campaign's name, description, schedule type, channels, first and last send, tags, teams and enabled/draft/archived flags (message bodies are not returned). Needs campaigns.details. Use for \"When was this Braze campaign first and last sent, and on which channels\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"campaign_id":{"description":"Campaign API identifier (the id field from list_campaigns).","maxLength":200,"title":"Campaign Id","type":"string"}},"required":["cluster","campaign_id"],"title":"get_campaign_detailsArguments","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_campaign_analytics":{"post":{"operationId":"get_campaign_analytics","summary":"Get a daily series for one campaign: unique recipients, conversions and revenue per day. Needs campaigns.data_series. Us","description":"Get a daily series for one campaign: unique recipients, conversions and revenue per day. Needs campaigns.data_series. Use for \"How did this Braze campaign perform over the last 14 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"campaign_id":{"description":"Campaign API identifier (the id field from list_campaigns).","maxLength":200,"title":"Campaign Id","type":"string"},"length":{"description":"How many days of data to return, counted back from ending_at (1 to 100).","maximum":100,"minimum":1,"title":"Length","type":"integer"},"ending_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the series as an ISO 8601 time, for example 2026-10-01T23:59:59-05:00. Defaults to now.","title":"Ending At"}},"required":["cluster","campaign_id","length"],"title":"get_campaign_analyticsArguments","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_canvases":{"post":{"operationId":"list_canvases","summary":"List Canvases (id, name, last edit time, tags), 100 per page. Needs the canvas.list permission. Use for \"Which Canvases ","description":"List Canvases (id, name, last edit time, tags), 100 per page. Needs the canvas.list permission. Use for \"Which Canvases exist in my Braze workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0. Each page holds up to 100 items.","title":"Page"},"include_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include archived Canvases.","title":"Include Archived"},"sort_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Creation-time order: asc (oldest first, the default) or desc (newest first).","title":"Sort Direction"}},"required":["cluster"],"title":"list_canvasesArguments","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 segments (id, name, whether analytics tracking is on, tags), 100 per page. Needs the segments.list permission. Use ","description":"List segments (id, name, whether analytics tracking is on, tags), 100 per page. Needs the segments.list permission. Use for \"Which Braze segments have analytics tracking enabled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0. Each page holds up to 100 items.","title":"Page"},"sort_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Creation-time order: asc (oldest first, the default) or desc (newest first).","title":"Sort Direction"}},"required":["cluster"],"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_custom_events":{"post":{"operationId":"list_custom_events","summary":"List the names of custom events recorded in the workspace, alphabetically, 250 per page. Needs the events.list permissio","description":"List the names of custom events recorded in the workspace, alphabetically, 250 per page. Needs the events.list permission. Use for \"What custom events does Braze know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0. Each page holds up to 100 items.","title":"Page"}},"required":["cluster"],"title":"list_custom_eventsArguments","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_new_users_series":{"post":{"operationId":"get_new_users_series","summary":"Get the number of new users per day for the last N days (1 to 100), optionally for one app. Needs kpi.new_users.data_ser","description":"Get the number of new users per day for the last N days (1 to 100), optionally for one app. Needs kpi.new_users.data_series. Use for \"How many new users did Braze record each day this fortnight\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"length":{"description":"How many days of data to return, counted back from ending_at (1 to 100).","maximum":100,"minimum":1,"title":"Length","type":"integer"},"ending_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the series as an ISO 8601 time, for example 2026-10-01T23:59:59-05:00. Defaults to now.","title":"Ending At"},"app_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"App API identifier to restrict to one app; all apps if omitted.","title":"App Id"}},"required":["cluster","length"],"title":"get_new_users_seriesArguments","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_daily_active_users_series":{"post":{"operationId":"get_daily_active_users_series","summary":"Get daily active users per day for the last N days (1 to 100), optionally for one app. Needs kpi.dau.data_series. Use fo","description":"Get daily active users per day for the last N days (1 to 100), optionally for one app. Needs kpi.dau.data_series. Use for \"What were my daily active users in Braze over the last two weeks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"length":{"description":"How many days of data to return, counted back from ending_at (1 to 100).","maximum":100,"minimum":1,"title":"Length","type":"integer"},"ending_at":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the series as an ISO 8601 time, for example 2026-10-01T23:59:59-05:00. Defaults to now.","title":"Ending At"},"app_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"App API identifier to restrict to one app; all apps if omitted.","title":"App Id"}},"required":["cluster","length"],"title":"get_daily_active_users_seriesArguments","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_email_templates":{"post":{"operationId":"list_email_templates","summary":"List email templates (id, name, created, updated, tags); drag-and-drop templates are not included. Up to 1000 per call. ","description":"List email templates (id, name, created, updated, tags); drag-and-drop templates are not included. Up to 1000 per call. Use for \"Which email templates are saved in Braze\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"modified_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items updated at or after this ISO 8601 time, for example 2026-01-01T00:00:00.","title":"Modified After"},"modified_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items updated at or before this ISO 8601 time.","title":"Modified Before"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"required":["cluster"],"title":"list_email_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/list_content_blocks":{"post":{"operationId":"list_content_blocks","summary":"List Content Blocks (id, name, html or text type, Liquid tag, inclusion count, dates, tags). Up to 1000 per call. Use fo","description":"List Content Blocks (id, name, html or text type, Liquid tag, inclusion count, dates, tags). Up to 1000 per call. Use for \"What content blocks do we have in Braze and how often are they used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster":{"description":"Your Braze REST endpoint cluster, the part between 'rest.' and '.braze.com' (for example 'iad-01' for rest.iad-01.braze.com). EU clusters on braze.eu are not supported.","enum":["iad-01","iad-02","iad-03","iad-04","iad-05","iad-06","iad-07","iad-08","us-10","au-01","id-01","jp-01","kr-01"],"title":"Cluster","type":"string"},"modified_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items updated at or after this ISO 8601 time, for example 2026-01-01T00:00:00.","title":"Modified After"},"modified_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items updated at or before this ISO 8601 time.","title":"Modified Before"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"required":["cluster"],"title":"list_content_blocksArguments","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}}}}