{"openapi":"3.1.0","info":{"title":"Novu Environments (BYOK) API","version":"0.1.0","description":"Novu Environments (BYOK) lets an AI assistant read your own Novu Environments data through the Novu Environments API with a key you supply (secret key (US region)). Read-only: 7 tools (list_environments, list_environment_tags, list_environment_variables, get_environment_variable_usage, list_inbound_domains, get_inbound_domain, list_domain_routes). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-novu-environments-domains.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-novu-environments-domains/docs"},"termsOfService":"https://connectorbay.com/byok-novu-environments-domains/terms"},"servers":[{"url":"https://byok-novu-environments-domains.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-novu-environments-domains/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_environments":{"post":{"operationId":"list_environments","summary":"List the environments of the organization (for example Development and Production) with identifier, type and slug. API k","description":"List the environments of the organization (for example Development and Production) with identifier, type and slug. API keys are not returned. Use for \"Which environments does my Novu organization have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_environmentsArguments","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_environment_tags":{"post":{"operationId":"list_environment_tags","summary":"List the unique workflow tags used in an environment. Use for \"Which workflow tags are used in my Novu development envir","description":"List the unique workflow tags used in an environment. Use for \"Which workflow tags are used in my Novu development environment\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"environment_id":{"description":"Environment internal ID or identifier from list_environments.","maxLength":80,"title":"Environment Id","type":"string"}},"required":["environment_id"],"title":"list_environment_tagsArguments","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_environment_variables":{"post":{"operationId":"list_environment_variables","summary":"List environment variables by key, type, whether they are secret and timestamps. Values are not returned. Use for \"Which","description":"List environment variables by key, type, whether they are secret and timestamps. Values are not returned. Use for \"Which environment variables are defined in Novu\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Filter variables by key (case-insensitive partial match).","title":"Search"}},"title":"list_environment_variablesArguments","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_environment_variable_usage":{"post":{"operationId":"get_environment_variable_usage","summary":"List the workflows that reference an environment variable. Use for \"Which Novu workflows use the BASE_URL variable\".","description":"List the workflows that reference an environment variable. Use for \"Which Novu workflows use the BASE_URL variable\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"variable_key":{"description":"Environment variable key, for example 'BASE_URL'.","maxLength":100,"title":"Variable Key","type":"string"}},"required":["variable_key"],"title":"get_environment_variable_usageArguments","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_inbound_domains":{"post":{"operationId":"list_inbound_domains","summary":"List inbound email domains with verification status, MX record state, DNS provider and the DNS records that must be in p","description":"List inbound email domains with verification status, MX record state, DNS provider and the DNS records that must be in place. Cursor pagination. Use for \"Which inbound email domains are verified in Novu\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: pass next from the previous answer to get the next page.","title":"After"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (default 10).","title":"Limit"},"order_direction":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ASC or DESC.","title":"Order Direction"},"name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Only domains whose name matches this text.","title":"Name"}},"title":"list_inbound_domainsArguments","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_inbound_domain":{"post":{"operationId":"get_inbound_domain","summary":"Get one inbound email domain by name: verification status, MX state and expected DNS records (read only, does not trigge","description":"Get one inbound email domain by name: verification status, MX state and expected DNS records (read only, does not trigger verification). Use for \"Is mail.example.com verified for inbound email in Novu\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name, for example 'mail.example.com'.","maxLength":200,"title":"Domain","type":"string"}},"required":["domain"],"title":"get_inbound_domainArguments","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_domain_routes":{"post":{"operationId":"list_domain_routes","summary":"List the inbound routes of a domain (address, type agent or webhook, agent identifier) with timestamps. Cursor paginatio","description":"List the inbound routes of a domain (address, type agent or webhook, agent identifier) with timestamps. Cursor pagination. Use for \"Which inbound routes does mail.example.com have in Novu\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name, for example 'mail.example.com'.","maxLength":200,"title":"Domain","type":"string"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: pass next from the previous answer to get the next page.","title":"After"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (default 10).","title":"Limit"},"order_direction":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ASC or DESC.","title":"Order Direction"},"agent_id":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Only routes that point to this agent identifier.","title":"Agent Id"}},"required":["domain"],"title":"list_domain_routesArguments","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}}}}