{"openapi":"3.1.0","info":{"title":"Red Sift DMARC (BYOK) API","version":"0.1.0","description":"Red Sift DMARC (BYOK) lets an AI assistant read your own Red Sift DMARC data through the Red Sift DMARC API with a key you supply (OnDMARC API key (business-tier add-on; only super-users can view keys)). Read-only: 9 tools (list_domain_names, list_domains, list_tags, list_dmarc_guardian_issues, list_reporting_domains, list_email_sources, get_delivery_statuses, get_dmarc_results,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-redsift-ondmarc.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-redsift-ondmarc/docs"},"termsOfService":"https://connectorbay.com/byok-redsift-ondmarc/terms"},"servers":[{"url":"https://byok-redsift-ondmarc.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-redsift-ondmarc/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_domain_names":{"post":{"operationId":"list_domain_names","summary":"List the domain names in the OnDMARC account (names only; use list_domains for details). Use for \"Which domains are in m","description":"List the domain names in the OnDMARC account (names only; use list_domains for details). Use for \"Which domains are in my OnDMARC account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_domain_namesArguments","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_domains":{"post":{"operationId":"list_domains","summary":"List domains with DMARC and DNS status, tags, notes, last update and email volume statistics. Optionally filter by domai","description":"List domains with DMARC and DNS status, tags, notes, last update and email volume statistics. Optionally filter by domain names or a volume date range. Use for \"Which of my domains have a DMARC policy problem in OnDMARC\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domains":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated domain names to include (omit for all).","title":"Domains"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the date range for email volume metrics, YYYY-MM-DD (needs to_date).","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"End of the date range for email volume metrics, YYYY-MM-DD (needs from_date).","title":"To Date"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_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/list_tags":{"post":{"operationId":"list_tags","summary":"List the account's domain tags with title, colour and description. Use for \"Which domain tags exist in OnDMARC\".","description":"List the account's domain tags with title, colour and description. Use for \"Which domain tags exist in OnDMARC\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_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_dmarc_guardian_issues":{"post":{"operationId":"list_dmarc_guardian_issues","summary":"List active DMARC Guardian issues (detected email authentication problems) across the domains the key can access, with t","description":"List active DMARC Guardian issues (detected email authentication problems) across the domains the key can access, with the affected domain and notes. Use for \"What DMARC Guardian issues are open on my domains\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 100000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_dmarc_guardian_issuesArguments","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_reporting_domains":{"post":{"operationId":"list_reporting_domains","summary":"List domains that have sent DMARC aggregate or forensic reports to OnDMARC, with first and last report times. Use for \"W","description":"List domains that have sent DMARC aggregate or forensic reports to OnDMARC, with first and last report times. Use for \"Which domains reported DMARC data recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_reporting_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/list_email_sources":{"post":{"operationId":"list_email_sources","summary":"List classified email sending sources (IPs and hostnames) with classification (valid, invalid, forwarder, unknown, misco","description":"List classified email sending sources (IPs and hostnames) with classification (valid, invalid, forwarder, unknown, misconfigured), domain and validation status. Use for \"Which email sources are sending unauthenticated mail for example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domains":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated domain names to include (omit for all).","title":"Domains"},"classification":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated classifications: valid, invalid, forwarder, unknown, misconfigured, insufficient_data.","title":"Classification"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_email_sourcesArguments","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_delivery_statuses":{"post":{"operationId":"get_delivery_statuses","summary":"Get daily DMARC delivery counts (total, pass, and failures by disposition none, quarantine, reject) for a date range, op","description":"Get daily DMARC delivery counts (total, pass, and failures by disposition none, quarantine, reject) for a date range, optionally for one domain. Use for \"How many emails failed DMARC per day for example.com last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"description":"Start of the reporting period, UTC date YYYY-MM-DD.","maxLength":10,"title":"From Date","type":"string"},"to_date":{"description":"End of the reporting period, UTC date YYYY-MM-DD.","maxLength":10,"title":"To Date","type":"string"},"domain":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Domain to scope the report to, for example example.com (omit for all domains; this needs super reader access).","title":"Domain"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"required":["from_date","to_date"],"title":"get_delivery_statusesArguments","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_dmarc_results":{"post":{"operationId":"get_dmarc_results","summary":"Get DMARC results grouped by SPF and DKIM configuration (alignment modes, disposition, results, selectors) with message ","description":"Get DMARC results grouped by SPF and DKIM configuration (alignment modes, disposition, results, selectors) with message counts for a date range. Use for \"Which SPF and DKIM combinations are failing for example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"description":"Start of the reporting period, UTC date YYYY-MM-DD.","maxLength":10,"title":"From Date","type":"string"},"to_date":{"description":"End of the reporting period, UTC date YYYY-MM-DD.","maxLength":10,"title":"To Date","type":"string"},"domain":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Domain to scope the report to, for example example.com (omit for all domains; this needs super reader access).","title":"Domain"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"required":["from_date","to_date"],"title":"get_dmarc_resultsArguments","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_dns_changes":{"post":{"operationId":"list_dns_changes","summary":"List DNS record changes (SPF, DKIM, DMARC and others) across the account with record type, new and previous value, sever","description":"List DNS record changes (SPF, DKIM, DMARC and others) across the account with record type, new and previous value, severity and time. Use for \"Did anyone change our DMARC or SPF DNS records this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the window, UTC date YYYY-MM-DD (omit for all retained history).","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"End of the window (inclusive), UTC date YYYY-MM-DD.","title":"To Date"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000, default 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page index, starting at 0.","title":"Page"}},"title":"list_dns_changesArguments","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}}}}