{"swagger":"2.0","info":{"title":"Dmarc Report (params in:formData)","description":"\n\u003cp\u003eThis is API documentation of \u003cstrong\u003eDmarc Report\u003c/strong\u003e.\u003c/p\u003e\n\n\u003ch3 id=\"auth\"\u003eAuth\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eDmarc Report\u003c/strong\u003e supports basic HTTP token based authentication. To get API token, follow these instructions.\u003c/p\u003e\n\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003eSignup for \u003cstrong\u003eDmarc Report\u003c/strong\u003e at \u003ccode\u003eapp.dmarcreport.com\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\n\u003cli\u003e\n\u003cp\u003eAfter logging in, click on your profile icon and select \u003ccode\u003eAPI Tokens\u003c/code\u003e from the dropdown.\u003c/p\u003e\n\u003c/li\u003e\n\n\u003cli\u003e\n\u003cp\u003eClick on \u003ccode\u003eNew Api Token\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\n\u003cli\u003e\n\u003cp\u003eSelect privileges for this token and click save.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003cp\u003eTo authenticate, you need to set \u003ccode\u003eAuthorization\u003c/code\u003e header with \u003ccode\u003eToken token=\u0026lt;token\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n\n\u003cp\u003eSo your \u003ccode\u003eAuthorization\u003c/code\u003e header should look like:\u003c/p\u003e\n\n\u003cp\u003e\u003ccode\u003e\n  Authorization: Token token=6fdd07dd6c3e36440cc8ae64282181ecf71f7d0437bf35b3f01f9f99eb518\n\u003c/code\u003e\u003c/p\u003e\n","version":"2.0","x-copyright":null},"basePath":"https://api.dmarcreport.com","consumes":["application/x-www-form-urlencoded","multipart/form-data"],"paths":{"/v2/accounts":{"get":{"tags":["accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts","summary":"List accounts","parameters":[],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{id}":{"get":{"tags":["accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_id","summary":"Get account details","parameters":[{"name":"id","type":"string","in":"path","required":true,"description":"Account ID (numeric, e.g., \"1473\") or slug (e.g., \"my-team\")"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eThe :id parameter can be either the numeric ID or the slug of the account\u003c/p\u003e\n"}},"/v2/accounts.json":{"post":{"tags":["accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts.json","summary":"Add account","parameters":[{"name":"account[title]","type":"string","in":"formData","required":true,"description":"title of account"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{id}.json":{"put":{"tags":["accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"put_v2_accounts_id.json","summary":"Updates account","parameters":[{"name":"account[title]","type":"string","in":"formData","required":true,"description":"Title of team"},{"name":"id","type":"string","in":"path","required":true,"description":"Account ID (numeric, e.g., \"1473\") or slug (e.g., \"my-team\")"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eThe :id parameter can be either the numeric ID or the slug of the account\u003c/p\u003e\n"},"delete":{"tags":["accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"delete_v2_accounts_id.json","summary":"Delete account","parameters":[{"name":"id","type":"string","in":"path","required":true,"description":"Account ID (numeric, e.g., \"1473\") or slug (e.g., \"my-team\")"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eThe :id parameter can be either the numeric ID or the slug of the account\u003c/p\u003e\n"}},"/v2/accounts/{id}/compliance_summary":{"get":{"tags":["accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_id_compliance_summary","summary":"Get DMARC compliance summary for all domains in account","parameters":[{"name":"id","type":"string","in":"path","required":true,"description":"Account ID (numeric or slug)"},{"name":"days","type":"number","in":"query","description":"Number of days to analyze (default: 30, max: 90)"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns an overall DMARC compliance scorecard for all domains in an account. Uses a single optimized database query to fetch stats for all domains at once.\u003c/p\u003e\n\n\u003cp\u003eResponse includes: - \u003ccode\u003etotal_domains\u003c/code\u003e: Number of domains in the account - \u003ccode\u003eactive_domains\u003c/code\u003e: Domains with email volume in the period - \u003ccode\u003etotal_email_volume\u003c/code\u003e: Total emails across all domains - \u003ccode\u003eoverall_compliance_rate\u003c/code\u003e: Weighted average compliance rate - \u003ccode\u003epolicy_distribution\u003c/code\u003e: Count of domains by DMARC policy (none/quarantine/reject) - \u003ccode\u003egrade_distribution\u003c/code\u003e: Count of domains by security grade (A-F) - \u003ccode\u003edomains_needing_attention\u003c/code\u003e: Domains with grade D or F - \u003ccode\u003edomains_ready_to_advance\u003c/code\u003e: Domains ready for stronger policy - \u003ccode\u003edomains\u003c/code\u003e: Per-domain breakdown with policy, compliance, volume, grade, and readiness\u003c/p\u003e\n\n\u003cp\u003eEach domain includes readiness indicators: - \u003ccode\u003eready_to_advance\u003c/code\u003e: Boolean - true if domain can move to stronger policy - \u003ccode\u003eadvance_to\u003c/code\u003e: Target policy (quarantine or reject) if ready - \u003ccode\u003ereadiness_note\u003c/code\u003e: Human-readable status message - \u003ccode\u003eat_max_protection\u003c/code\u003e: True when at p=reject with 98%+ compliance\u003c/p\u003e\n\n\u003cp\u003eGrades reflect current protection level: - A: p=reject with 98%+ compliance (full protection) - B: p=reject 90%+ OR p=quarantine 90%+ compliance - C: p=reject 80%+ OR p=quarantine 80%+ OR p=none 90%+ - D: p=reject 70%+ OR p=quarantine 70%+ OR p=none 70%+ - F: Below 70% or no DMARC policy\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports.json":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports.json","summary":"List, Search and Paginate Aggregte Reports","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[org_name_eq]","type":"string","in":"query","description":"Search by Reporter"},{"name":"q[date_begin_gteq]","type":"string","in":"query","description":"Search by date begin, Format: YYYY-MM-DD"},{"name":"q[date_begin_lteq]","type":"string","in":"query","description":"Search by date end, Format: YYYY-MM-DD"},{"name":"page","type":"string","in":"query","description":"Page Number"},{"name":"per","type":"string","in":"query","description":"Entries per page."}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/records.json":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_records.json","summary":"Get all the details of a Aggregte Reports records","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[agg_report_date_begin_gteq]","type":"string","in":"query","description":"Search by start date of agg report format: \"mm-dd-yyyy\""},{"name":"q[agg_report_date_end_gteq]","type":"string","in":"query","description":"Search by end date of agg report format: \"mm-dd-yyyy\""},{"name":"q[agg_report_org_name_eq]","type":"string","in":"query","description":"Search by search by reporter"},{"name":"q[ip_address_source_ip_eq]","type":"string","in":"query","description":"Search by source ip"},{"name":"q[ip_address_ptr_eq]","type":"string","in":"query","description":"Search by PTR"},{"name":"q[ip_address_country_eq]","type":"string","in":"query","description":"Search by country alpha2 code e.g. \"us\" for \"United States of America\""},{"name":"q[count_eq]","type":"number","in":"query","description":"Search by for Volume"},{"name":"q[disposition_eq]","type":"string","enum":["none","quarantine","reject"],"in":"query","description":"Search by Applied Policy"},{"name":"q[spf_alignment_eq]","type":"string","enum":["true","false"],"in":"query","description":"Search by SPF Alignment: true for Aligned, false for Unaligned"},{"name":"q[spf_status_eq]","type":"string","enum":["pass","fail"],"in":"query","description":"Search by SPF"},{"name":"q[spf_result_eq]","type":"string","enum":["none","neutral","pass","fail","softfail"],"in":"query","description":"Search by SPF Auth Result"},{"name":"q[spf_domain_eq]","type":"string","in":"query","description":"Search by SPF Auth Scope"},{"name":"q[reason_eq]","type":"string","enum":["forwarded","sampled_out","trusted_forwarder","mailing_list","local_policy","policy_test_mode","other"],"in":"query","description":"Search by Policy Override Reason"},{"name":"q[dkim_alignment_eq]","type":"string","enum":["true","false"],"in":"query","description":"Search by DKIM Alignment: true for Aligned, false for Unaligned"},{"name":"q[dkim_status_eq]","type":"string","enum":["pass","fail"],"in":"query","description":"Search by DKIM"},{"name":"q[dkims_result_eq]","type":"string","enum":["none","neutral","pass","fail","softfail"],"in":"query","description":"Search by DKIM Auth result"},{"name":"q[dkims_domain_eq]","type":"string","in":"query","description":"Search by DKIM Domain"},{"name":"q[dkims_selector_eq]","type":"string","in":"query","description":"Search by DKIM selector"},{"name":"q[dmarc_compliance_eq]","type":"string","enum":[0,1,2],"in":"query","description":"Search by DMARC Compliance: 0 for complaint, 1 for non compliant and 2 for forwarded"},{"name":"page","type":"string","in":"query","description":"Page Number"},{"name":"per","type":"string","in":"query","description":"Entries per page."}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eEach record’s \u003ccode\u003eip_address\u003c/code\u003e now includes an \u003ccode\u003eemail_service\u003c/code\u003e block when the source IP matches a known mail provider in our research database. See the \u003ccode\u003eagg_reports/:id\u003c/code\u003e endpoint description for the block shape and semantics — both endpoints return the same enrichment.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/{id}.json":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_id.json","summary":"Get all the details of a Aggregte Report","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eEach record’s \u003ccode\u003eip_address\u003c/code\u003e now includes an \u003ccode\u003eemail_service\u003c/code\u003e block when the source IP matches a known mail provider in our research database (Google, Office 365, Mailgun, SendGrid, etc.). The block identifies the service, classifies it as sender vs. forwarder, and surfaces capability flags (supports_dkim/spf/dmarc) plus setup URLs. Returns \u003ccode\u003eemail_service: null\u003c/code\u003e when no match is found. Use \u003ccode\u003eis_in_spf_record\u003c/code\u003e on the record level for the authoritative SPF-alignment check — \u003ccode\u003eemail_service\u003c/code\u003e describes what the IP IS, not whether it’s authorised for this domain.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/agg_report_stats":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_agg_report_stats","summary":"Get Aggregate Report Stats of domain","parameters":[{"name":"q[end_date]","type":"string","in":"query","required":true,"description":"Search by date end, Format: YYYY-MM-DD"},{"name":"q[start_date]","type":"string","in":"query","required":true,"description":"Search by date begin, Format: YYYY-MM-DD"},{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"filter","type":"string","in":"query","description":"Search by filter, Format: \"last_7_days, last_10_days, last_15_days, last_30_days"}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eResponse now includes alignment-based counts alongside compliance counts: \u003ccode\u003espf_count\u003c/code\u003e and \u003ccode\u003edkim_count\u003c/code\u003e (record volume where SPF/DKIM authentication passed) and \u003ccode\u003ereject_count\u003c/code\u003e (record volume where the applied disposition was reject). These are sourced from \u003ccode\u003eRecord.stats_count\u003c/code\u003e. Existing fields — compliant, non_compliant, forwarded, total, none, quarantine, reject — remain unchanged.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/top_sources":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_top_sources","summary":"Get top email sources for a domain","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[start_date]","type":"string","in":"query","description":"Start date, Format: YYYY-MM-DD"},{"name":"q[end_date]","type":"string","in":"query","description":"End date, Format: YYYY-MM-DD"},{"name":"filter","type":"string","in":"query","description":"Preset filter: last_7_days, last_10_days, last_15_days, last_30_days (default: last_30_days)"},{"name":"limit","type":"number","in":"query","description":"Maximum number of sources to return (default: 10, max: 50)"}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns the top email sources (senders) for a domain, aggregated by PTR domain.\u003c/p\u003e\n\n\u003cp\u003eEach source includes: - \u003ccode\u003esource\u003c/code\u003e: The PTR domain of the sending servers (e.g., “google.com”, “sendgrid.net”) - \u003ccode\u003etotal\u003c/code\u003e: Total email volume from this source - \u003ccode\u003ecompliant\u003c/code\u003e: DMARC-compliant emails (passed authentication) - \u003ccode\u003enon_compliant\u003c/code\u003e: Non-compliant emails (failed authentication) - \u003ccode\u003ecompliance_rate\u003c/code\u003e: Percentage of compliant emails (0-100)\u003c/p\u003e\n\n\u003cp\u003eSources are sorted by total volume (highest first).\u003c/p\u003e\n\n\u003cp\u003eUse this to identify: - Your legitimate email services and their authentication status - High-volume senders that may need SPF/DKIM configuration - Unknown sources that could be spoofing attempts\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/alignment_failures":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_alignment_failures","summary":"Get SPF/DKIM alignment failures ranked by volume","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[start_date]","type":"string","in":"query","description":"Start date, Format: YYYY-MM-DD"},{"name":"q[end_date]","type":"string","in":"query","description":"End date, Format: YYYY-MM-DD"},{"name":"filter","type":"string","in":"query","description":"Preset filter: last_7_days, last_10_days, last_15_days, last_30_days (default: last_30_days)"},{"name":"limit","type":"number","in":"query","description":"Maximum number of failures to return (default: 20, max: 100)"}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns email sources that are failing DMARC authentication, ranked by failure volume.\u003c/p\u003e\n\n\u003cp\u003eEach failure entry includes: - \u003ccode\u003esource\u003c/code\u003e: The PTR domain of the failing sender - \u003ccode\u003efailure_count\u003c/code\u003e: Number of non-compliant emails - \u003ccode\u003epercentage_of_total_failures\u003c/code\u003e: This source’s share of all failures\u003c/p\u003e\n\n\u003cp\u003eUse this to identify: - Legitimate services that need SPF/DKIM configuration - Potential spoofing sources to investigate - Priority order for remediation (highest volume first)\u003c/p\u003e\n\n\u003cp\u003eNote: Sources with email_service identification can be cross-referenced with get_email_sources to find setup instructions for SPF/DKIM configuration.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/trends":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_trends","summary":"Get DMARC compliance trends over time","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[start_date]","type":"string","in":"query","description":"Start date, Format: YYYY-MM-DD"},{"name":"q[end_date]","type":"string","in":"query","description":"End date, Format: YYYY-MM-DD"},{"name":"filter","type":"string","in":"query","description":"Preset filter: last_7_days, last_10_days, last_15_days, last_30_days, last_60_days, last_90_days (default: last_30_days)"}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns daily compliance statistics for analyzing trends over time.\u003c/p\u003e\n\n\u003cp\u003eResponse includes: - \u003ccode\u003edata_points\u003c/code\u003e: Array of daily statistics sorted by date (oldest first) - \u003ccode\u003esummary\u003c/code\u003e: Aggregated statistics for the entire period\u003c/p\u003e\n\n\u003cp\u003eEach data point includes: - \u003ccode\u003edate\u003c/code\u003e: The date (YYYY-MM-DD) - \u003ccode\u003ecompliant\u003c/code\u003e: DMARC-compliant email count - \u003ccode\u003enon_compliant\u003c/code\u003e: Non-compliant email count - \u003ccode\u003eforwarded\u003c/code\u003e: Forwarded email count - \u003ccode\u003etotal\u003c/code\u003e: Total email volume - \u003ccode\u003ecompliance_rate\u003c/code\u003e: Daily compliance percentage\u003c/p\u003e\n\n\u003cp\u003eUse this to: - Visualize compliance improvements over time - Identify sudden drops in authentication rates - Track the impact of SPF/DKIM configuration changes - Monitor for potential email spoofing incidents\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/agg_reports/pdf":{"get":{"tags":["agg_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_agg_reports_pdf","summary":"Download PDF audit report for a domain","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"start_date","type":"string","in":"query","description":"Start date (YYYY-MM-DD). Defaults to 30 days ago."},{"name":"end_date","type":"string","in":"query","description":"End date (YYYY-MM-DD). Defaults to today."},{"name":"filter","type":"string","in":"query","description":"Preset filter: last_7_days, last_10_days, last_15_days, last_30_days, last_60_days, last_90_days"}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns a branded PDF audit report containing DMARC compliance data, authentication statistics, and email source analysis for the specified date range.\u003c/p\u003e\n\n\u003cp\u003eThe PDF includes: - Executive summary with security grade (A-F) - Compliance overview with SPF/DKIM/DMARC stats - Daily message volume chart - Email source categorization (authenticated, needs config, unauthenticated) - MTA-STS report (if enabled) - Recommendations and next steps\u003c/p\u003e\n\n\u003cp\u003eWhite-labeled accounts receive branded reports with their custom logo.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/alerts":{"get":{"tags":["alerts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_alerts","summary":"List all alerts for an account","parameters":[{"name":"account_id","type":"number","in":"path","required":true},{"name":"active","type":"string","enum":[true,false,"true","false"],"in":"query","description":"Filter by active status"},{"name":"alert_type","type":"string","enum":["metric","event","summary"],"in":"query","description":"Filter by alert type"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns all alerts configured for domains in the specified account.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eAlert Types:\u003c/strong\u003e - \u003ccode\u003emetric\u003c/code\u003e: Triggered when a metric threshold is exceeded (e.g., emails_reported \u0026gt; 1000) - \u003ccode\u003eevent\u003c/code\u003e: Triggered by specific events (e.g., new_subdomain_detected, dmarc_changed) - \u003ccode\u003esummary\u003c/code\u003e: Periodic summary reports\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eEvent Types:\u003c/strong\u003e - \u003ccode\u003enew_subdomain_detected\u003c/code\u003e: New subdomain sending email detected - \u003ccode\u003enew_forensic_report\u003c/code\u003e: New forensic (failure) report received - \u003ccode\u003espf_dkim_alignments_and_delivery_rate_drops\u003c/code\u003e: Authentication alignment drops - \u003ccode\u003edmarc_changed\u003c/code\u003e: DMARC record changed - \u003ccode\u003espf_changed\u003c/code\u003e: SPF record changed - \u003ccode\u003emx_changed\u003c/code\u003e: MX record changed - \u003ccode\u003elow_message_credits\u003c/code\u003e: Message credits running low\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMetric Types:\u003c/strong\u003e - \u003ccode\u003eemails_reported\u003c/code\u003e: Total emails in reports - \u003ccode\u003ecompliant\u003c/code\u003e: DMARC-compliant emails - \u003ccode\u003enon_compliant\u003c/code\u003e: Non-compliant emails - \u003ccode\u003ethreats\u003c/code\u003e: Suspicious/threat emails\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/alerts/{id}":{"get":{"tags":["alerts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_alerts_id","summary":"Get alert details","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns detailed information about a specific alert including all associated domains.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/bimi_status":{"get":{"tags":["bimi_status"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_bimi_status","summary":"Get BIMI status for a domain","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns the complete BIMI (Brand Indicators for Message Identification) status for a domain.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003edns_status\u003c/code\u003e: DMARC and BIMI DNS record status - \u003ccode\u003edmarc_valid\u003c/code\u003e: Whether DMARC record meets BIMI requirements (p=quarantine or p=reject with pct=100) - \u003ccode\u003edmarc_policy\u003c/code\u003e: Current DMARC policy value - \u003ccode\u003edmarc_pct\u003c/code\u003e: Current DMARC percentage value - \u003ccode\u003ebimi_record_found\u003c/code\u003e: Whether a BIMI TXT record exists - \u003ccode\u003ebimi_record_value\u003c/code\u003e: The current BIMI TXT record value - \u003ccode\u003elogo_status\u003c/code\u003e: BIMI logo upload status (if applicable) - \u003ccode\u003euploaded\u003c/code\u003e: Whether a logo has been uploaded - \u003ccode\u003epublic_url\u003c/code\u003e: CDN URL for the logo - \u003ccode\u003evalid_for_bimi\u003c/code\u003e: Whether the logo passes BIMI validation - \u003ccode\u003evalidation_errors\u003c/code\u003e: Any validation issues - \u003ccode\u003erepairs_applied\u003c/code\u003e: Automatic fixes applied during upload - \u003ccode\u003ecertificate_status\u003c/code\u003e: VMC/CMC certificate status (if applicable) - \u003ccode\u003ehas_certificate\u003c/code\u003e: Whether a certificate is attached - \u003ccode\u003ecertificate_type\u003c/code\u003e: ‘vmc’ or ‘cmc’ - \u003ccode\u003ecertificate_valid\u003c/code\u003e: Whether certificate is valid - \u003ccode\u003eexpires_at\u003c/code\u003e: Certificate expiry date - \u003ccode\u003edays_until_expiry\u003c/code\u003e: Days remaining until expiry - \u003ccode\u003eexpiring_soon\u003c/code\u003e: True if expires within 30 days - \u003ccode\u003erecommended_record\u003c/code\u003e: The BIMI DNS record to publish - \u003ccode\u003ereadiness\u003c/code\u003e: Overall BIMI readiness assessment - \u003ccode\u003eready\u003c/code\u003e: Whether domain is ready for BIMI - \u003ccode\u003eblockers\u003c/code\u003e: List of issues preventing BIMI - \u003ccode\u003erecommendations\u003c/code\u003e: Suggested improvements\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domain_accounts":{"get":{"tags":["domain_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domain_accounts","summary":"List domain accounts","parameters":[{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domain_accounts/{id}":{"get":{"tags":["domain_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domain_accounts_id","summary":"Details of domain account","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domain_accounts.json":{"post":{"tags":["domain_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts_account_id_domain_accounts.json","summary":"Add domains in account","parameters":[{"name":"domain_account[account_attributes][domain_ids]","type":"array","items":{"type":"string"},"in":"formData","required":true,"description":"ids of domain you want to add in this account."},{"name":"domain_account[account_attributes][id]","type":"string","in":"formData","required":true,"description":"id of account, in which you want to add domains"},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domain_accounts/{domain_accounts_id}.json":{"delete":{"tags":["domain_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"delete_v2_accounts_account_id_domain_accounts_domain_accounts_id.json","summary":"Delete domain from account","parameters":[{"name":"domain_accounts_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/all_domains.json":{"get":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_all_domains.json","summary":"List of all Domains","parameters":[],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns a list of all domains across all accounts for the authenticated user.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003eparked_domain\u003c/code\u003e (boolean): Indicates if the domain is parked (true) or live (false). Parked domains have limited message volume. - \u003ccode\u003etags\u003c/code\u003e (array): Array of tag objects associated with the domain, each containing id, name, and color.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains.json":{"get":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains.json","summary":"List of all domains in given account","parameters":[{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns a list of all domains in the specified account.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003eparked_domain\u003c/code\u003e (boolean): Indicates if the domain is parked (true) or live (false). Parked domains have limited message volume. - \u003ccode\u003etags\u003c/code\u003e (array): Array of tag objects associated with the domain, each containing id, name, and color.\u003c/p\u003e\n"},"post":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts_account_id_domains.json","summary":"Add your domain","parameters":[{"name":"domain[mta_sts_policy][mx_age]","type":"string","enum":["1_day","2_days","3_days","4_days","5_days","6_days","7_days","2_weeks","1_month","2_months","3_months","6_months","12_months"],"in":"formData","required":true,"description":"Policy Age (Valid Time in_days)"},{"name":"domain[mta_sts_policy][mx]","type":"string","in":"formData","required":true,"description":"Detected Mail Records Separated by comma eg: custmx.cscdns.net, mail.dmarc.com"},{"name":"domain[mta_sts_policy][mode]","type":"string","enum":["testing","enforce"],"in":"formData","required":true,"description":"Policy Mode"},{"name":"domain[ruf_report]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"Receives RUF Report against your domain"},{"name":"domain[rua_report]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"Receives RUA Report against your domain"},{"name":"domain[address]","type":"string","in":"formData","required":true,"description":"Address of your domain"},{"name":"account_id","type":"number","in":"path","required":true},{"name":"domain[mta_sts_report]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Receives MTA-STS Report against your domain"},{"name":"domain[parked_domain]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Set to true to create a parked domain with limited message volume (requires parked domain quota)"},{"name":"domain[tag_ids]","type":"array","items":{"type":"string"},"in":"formData","description":"Array of tag IDs to attach to the domain"},{"name":"domain[tag_names]","type":"array","items":{"type":"string"},"in":"formData","description":"Array of tag names to attach to the domain (must exist)"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eCreates a new domain in the specified account.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eParked Domains:\u003c/strong\u003e Set \u003ccode\u003eparked_domain: true\u003c/code\u003e to create a parked domain. Parked domains have limited message volume and are useful for domains that don’t actively send email. Requires parked domain quota in your subscription.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003eparked_domain\u003c/code\u003e (boolean): Indicates if the domain is parked or live - \u003ccode\u003eparked_domain_credits\u003c/code\u003e (integer): Message credits remaining (only for parked domains) - \u003ccode\u003eparked_domain_status\u003c/code\u003e (string): Status of parked domain (only for parked domains) - \u003ccode\u003etags\u003c/code\u003e (array): Array of tag objects associated with the domain\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{id}.json":{"get":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_id.json","summary":"Get all the details of a Domain","parameters":[{"name":"account_id","type":"number","in":"path","required":true},{"name":"id","type":"string","in":"path","required":true,"description":"Domain ID (numeric, e.g., \"123\") or slug (e.g., \"example-com\")"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns detailed information about a specific domain.\u003c/p\u003e\n\n\u003cp\u003eThe :id parameter can be either the numeric ID or the slug of the domain.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003eparked_domain\u003c/code\u003e (boolean): Indicates if the domain is parked (true) or live (false). Parked domains have limited message volume. - \u003ccode\u003etags\u003c/code\u003e (array): Array of tag objects associated with the domain, each containing id, name, and color.\u003c/p\u003e\n"},"put":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"put_v2_accounts_account_id_domains_id.json","summary":"Update domain settings","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"domain[rua_report]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Receives RUA Report against your domain"},{"name":"domain[ruf_report]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Receives RUF Report against your domain"},{"name":"domain[mta_sts_report]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Receives MTA-STS Report against your domain"},{"name":"domain[hosted_dmarc]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Enable hosted DMARC - DNS records managed by our system (requires paid plan)"},{"name":"domain[hosted_dmarc_config]","type":"string","in":"formData","description":"Custom DMARC record. Keep our RUA address, and our RUF address while ruf_report is true."},{"name":"domain[hosted_mta_sts]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Enable hosted MTA-STS - DNS records managed by our system (requires paid plan and mta_sts_report)"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eUpdates settings for a specific domain.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eHosted Services:\u003c/strong\u003e Enable hosted DMARC or MTA-STS to have DNS records managed by our system. When enabled, the response includes CNAME records you must add to your DNS.\u003c/p\u003e\n\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ehosted_dmarc\u003c/code\u003e: Enable hosted DMARC (requires paid plan)\u003c/li\u003e\n\n\u003cli\u003e\u003ccode\u003ehosted_mta_sts\u003c/code\u003e: Enable hosted MTA-STS (requires paid plan and mta_sts_report enabled)\u003c/li\u003e\n\n\u003cli\u003e\u003ccode\u003ehosted_dmarc_config\u003c/code\u003e: Custom DMARC record (optional)\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eDMARC Record:\u003c/strong\u003e When you enable hosted DMARC, we generate a default record for you. The response includes \u003ccode\u003edefault_dmarc_record\u003c/code\u003e and \u003ccode\u003ecurrent_dmarc_config\u003c/code\u003e fields. If you want to customize the record (policy, sp, pct, etc.), provide \u003ccode\u003ehosted_dmarc_config\u003c/code\u003e but keep the RUA address from the default record - it is required to receive reports. The RUF address is required only while \u003ccode\u003eruf_report\u003c/code\u003e is true; with \u003ccode\u003eruf_report\u003c/code\u003e false it is left out.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eParked Domain Restrictions:\u003c/strong\u003e - Hosted MTA-STS is not available for parked domains - Hosted DMARC for parked domains requires \u003ccode\u003ep=reject\u003c/code\u003e policy - Subdomain policy (sp) must also be \u003ccode\u003ereject\u003c/code\u003e for parked domains\u003c/p\u003e\n\n\u003cp\u003eAfter adding the CNAME records, use the verify endpoints to check propagation.\u003c/p\u003e\n"},"delete":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"delete_v2_accounts_account_id_domains_id.json","summary":"Delete a domain","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domains/{id}/hosted_services.json":{"get":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_id_hosted_services.json","summary":"Get hosted services status and CNAME records","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns the current status of hosted services for a domain, including: - Whether hosted DMARC and MTA-STS are enabled - CNAME records that need to be added to DNS - Current CNAME verification status\u003c/p\u003e\n\n\u003cp\u003eUse this endpoint to get the CNAME values after enabling hosted services, and to check the current propagation status.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{id}/verify_hosted_dmarc.json":{"post":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts_account_id_domains_id_verify_hosted_dmarc.json","summary":"Verify hosted DMARC setup status","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eChecks the complete status of hosted DMARC setup including CNAME propagation and Route53 TXT record.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003eoverall_status\u003c/code\u003e: Overall setup status - \u003ccode\u003eready\u003c/code\u003e: All records configured and published - \u003ccode\u003eaction_required\u003c/code\u003e: User needs to add/fix CNAME records - \u003ccode\u003epending\u003c/code\u003e: System is still processing - \u003ccode\u003ecname\u003c/code\u003e: CNAME record status (user’s DNS) - \u003ccode\u003everified\u003c/code\u003e: CNAME correctly configured - \u003ccode\u003eawaiting_setup\u003c/code\u003e: User hasn’t added CNAME yet - \u003ccode\u003emisconfigured\u003c/code\u003e: CNAME exists but has wrong value - \u003ccode\u003etxt_record\u003c/code\u003e: TXT record status (our Route53) - \u003ccode\u003epublished\u003c/code\u003e: Record is live in Route53 - \u003ccode\u003equeued\u003c/code\u003e: Record creation in progress\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{id}/verify_hosted_mta_sts.json":{"post":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts_account_id_domains_id_verify_hosted_mta_sts.json","summary":"Verify hosted MTA-STS setup status","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"record","type":"string","enum":["policy","mta_sts","tls_rpt","all"],"in":"formData","description":"Which record to verify: policy, mta_sts, tls_rpt, or all (default: all)"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eChecks the complete status of hosted MTA-STS setup including all CNAME records, Route53 TXT records, and policy file.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003eoverall_status\u003c/code\u003e: Overall setup status - \u003ccode\u003eready\u003c/code\u003e: All records configured, published, and policy file active - \u003ccode\u003eaction_required\u003c/code\u003e: User needs to add/fix CNAME records - \u003ccode\u003epending\u003c/code\u003e: System is still processing - \u003ccode\u003erecords.policy_cname\u003c/code\u003e: Policy CNAME status (mta-sts.domain.com) - \u003ccode\u003erecords.mta_sts_record\u003c/code\u003e: MTA-STS record status (_mta-sts.domain.com) - \u003ccode\u003ecname_status\u003c/code\u003e: CNAME verification status - \u003ccode\u003etxt_record_status\u003c/code\u003e: Route53 TXT record status - \u003ccode\u003erecords.tls_rpt_record\u003c/code\u003e: TLS-RPT record status (_smtp._tls.domain.com) - \u003ccode\u003ecname_status\u003c/code\u003e: CNAME verification status - \u003ccode\u003etxt_record_status\u003c/code\u003e: Route53 TXT record status - \u003ccode\u003erecords.policy_file\u003c/code\u003e: MTA-STS policy file status - \u003ccode\u003eactive\u003c/code\u003e: Policy file accessible - \u003ccode\u003epending\u003c/code\u003e: Policy file not yet created - \u003ccode\u003eunreachable\u003c/code\u003e: Unable to reach policy file\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCNAME statuses:\u003c/strong\u003e \u003ccode\u003everified\u003c/code\u003e, \u003ccode\u003eawaiting_setup\u003c/code\u003e, \u003ccode\u003emisconfigured\u003c/code\u003e \u003cstrong\u003eTXT record statuses:\u003c/strong\u003e \u003ccode\u003epublished\u003c/code\u003e, \u003ccode\u003equeued\u003c/code\u003e\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{id}/generate_dmarc_record.json":{"post":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts_account_id_domains_id_generate_dmarc_record.json","summary":"Generate a DMARC record","parameters":[{"name":"p","type":"string","enum":["none","quarantine","reject"],"in":"formData","required":true,"description":"Policy: none (monitor), quarantine (spam folder), reject (block)"},{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"sp","type":"string","enum":["none","quarantine","reject"],"in":"formData","description":"Subdomain policy (optional)"},{"name":"pct","type":"number","in":"formData","description":"Percentage of emails to apply policy (0-100)"},{"name":"adkim","type":"string","enum":["r","s"],"in":"formData","description":"DKIM alignment: r=relaxed (default), s=strict"},{"name":"aspf","type":"string","enum":["r","s"],"in":"formData","description":"SPF alignment: r=relaxed (default), s=strict"},{"name":"fo","type":"string","in":"formData","description":"Forensic options: 0, 1, d, s (combine with colon, e.g., \"1:d\")"},{"name":"additional_rua_emails","type":"array","items":{"type":"string"},"in":"formData","description":"Additional aggregate report email addresses"},{"name":"additional_ruf_emails","type":"array","items":{"type":"string"},"in":"formData","description":"Additional forensic report email addresses"},{"name":"t","type":"string","enum":["y","n"],"in":"formData","description":"DMARCbis: Test mode (y=yes, n=no)"},{"name":"psd","type":"string","enum":["y","n","u"],"in":"formData","description":"DMARCbis: Public suffix domain (y=yes, n=no, u=unknown)"},{"name":"np","type":"string","enum":["none","quarantine","reject"],"in":"formData","description":"DMARCbis: Non-existent subdomain policy"},{"name":"publish","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"Also publish this record to hosted DMARC (requires hosted_dmarc enabled)"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eGenerates a DMARC record for your domain with all the options available in our UI. Our reporting addresses (RUA and RUF) are automatically included.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eStandard DMARC Options:\u003c/strong\u003e - \u003ccode\u003ep\u003c/code\u003e (policy): How to handle emails that fail DMARC (none, quarantine, reject) - \u003ccode\u003esp\u003c/code\u003e (subdomain policy): Policy for subdomains (none, quarantine, reject) - \u003ccode\u003epct\u003c/code\u003e (percentage): Percentage of emails to apply the policy to (0-100) - \u003ccode\u003eadkim\u003c/code\u003e (DKIM alignment): How strictly to check DKIM (r=relaxed, s=strict) - \u003ccode\u003easpf\u003c/code\u003e (SPF alignment): How strictly to check SPF (r=relaxed, s=strict) - \u003ccode\u003efo\u003c/code\u003e (forensic options): When to send forensic reports (0, 1, d, s - can combine with colon) - \u003ccode\u003eadditional_rua_emails\u003c/code\u003e (array): Additional email addresses for aggregate reports - \u003ccode\u003eadditional_ruf_emails\u003c/code\u003e (array): Additional email addresses for forensic reports\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eDMARCbis Options (newer standard):\u003c/strong\u003e - \u003ccode\u003et\u003c/code\u003e (test mode): Enable test mode - reports only, no policy enforcement (y, n) - \u003ccode\u003epsd\u003c/code\u003e (public suffix domain): Is this a public suffix domain? (y, n, u=unknown) - \u003ccode\u003enp\u003c/code\u003e (non-existent subdomain policy): Policy for non-existent subdomains (none, quarantine, reject)\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eForensic Options (fo) explained:\u003c/strong\u003e - \u003ccode\u003e0\u003c/code\u003e: Send report if all authentication fails (default) - \u003ccode\u003e1\u003c/code\u003e: Send report if any authentication fails - \u003ccode\u003ed\u003c/code\u003e: Send report if DKIM fails - \u003ccode\u003es\u003c/code\u003e: Send report if SPF fails - Combine with colon, e.g., “1:d:s” for multiple options\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{id}/disable_hosted_dmarc.json":{"delete":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"delete_v2_accounts_account_id_domains_id_disable_hosted_dmarc.json","summary":"Disable hosted DMARC for a domain","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eDisables hosted DMARC for the specified domain.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eWhat this does:\u003c/strong\u003e - Removes the DMARC TXT record from our Route53 DNS - Resets the CNAME status to ‘not found’ - Clears the hosted DMARC configuration\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eImportant:\u003c/strong\u003e After disabling, you will need to manage your own DMARC records. The CNAME record you created in your DNS can be removed after disabling.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003emessage\u003c/code\u003e: Confirmation message - \u003ccode\u003edomain_id\u003c/code\u003e: The domain identifier\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{id}/disable_hosted_mta_sts.json":{"delete":{"tags":["domains"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"delete_v2_accounts_account_id_domains_id_disable_hosted_mta_sts.json","summary":"Disable hosted MTA-STS for a domain","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eDisables hosted MTA-STS for the specified domain.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eWhat this does:\u003c/strong\u003e - Removes the MTA-STS and TLS-RPT TXT records from our Route53 DNS - Resets all CNAME statuses to ‘not found’\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eImportant:\u003c/strong\u003e After disabling, you will need to manage your own MTA-STS records. The CNAME records you created in your DNS can be removed after disabling.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eResponse includes:\u003c/strong\u003e - \u003ccode\u003emessage\u003c/code\u003e: Confirmation message - \u003ccode\u003edomain_id\u003c/code\u003e: The domain identifier\u003c/p\u003e\n"}},"/v2/email_sources":{"get":{"tags":["email_sources"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_email_sources","summary":"List email sources for a domain","parameters":[{"name":"domain","type":"string","in":"query","required":true,"description":"Domain address (e.g., \"nsolutions.com\")"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":"\n\u003cp\u003eReturns the global (system-identified) email sources that send for the specified domain, matched by PTR domain.\u003c/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eQuery parameters:\u003c/strong\u003e - \u003ccode\u003edomain\u003c/code\u003e (required): The domain address (e.g., “nsolutions.com”)\u003c/p\u003e\n"}},"/v2/email_tests/address":{"get":{"tags":["email_tests"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_email_tests_address","summary":"Get test email address for a domain","parameters":[{"name":"domain","type":"string","in":"query","required":true,"description":"Domain address (e.g., \"example.com\")"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity - domain parameter missing"}},"description":"\n\u003cp\u003eReturns the email address that should be used for sending test emails. Send a test message from any source (WordPress, SendGrid, CRM, etc.) to this address to validate SPF, DKIM, and DMARC authentication.\u003c/p\u003e\n"}},"/v2/email_tests":{"get":{"tags":["email_tests"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_email_tests","summary":"List email tests for a domain","parameters":[{"name":"domain","type":"string","in":"query","required":true,"description":"Domain address (e.g., \"example.com\")"},{"name":"page","type":"string","in":"query","description":"Page number"},{"name":"per","type":"string","in":"query","description":"Records per page (default: 25, max: 100)"},{"name":"unread","type":"string","in":"query","description":"Filter by read status (true/false)"},{"name":"source","type":"string","in":"query","description":"Filter by sending source hostname"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity - domain parameter missing"}},"description":"\n\u003cp\u003eReturns a paginated list of email test results for the domain. Each test shows the authentication status (SPF, DKIM, DMARC) for emails sent to the domain’s test address.\u003c/p\u003e\n"}},"/v2/email_tests/{id}":{"get":{"tags":["email_tests"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_email_tests_id","summary":"Get email test details","parameters":[{"name":"domain","type":"string","in":"query","required":true,"description":"Domain address (e.g., \"example.com\")"},{"name":"id","type":"number","in":"path","required":true,"description":"Email test ID"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity - domain parameter missing"}},"description":"\n\u003cp\u003eReturns detailed information about a specific email test, including full authentication results, raw headers, and alignment status.\u003c/p\u003e\n"}},"/v2/accounts/{account_id}/domains/{domain_id}/forensic_reports.json":{"get":{"tags":["forensic_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_forensic_reports.json","summary":"List, Search and Paginate Failure Reports","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[created_at_gteq]","type":"string","in":"query","description":"Search by date begin start"},{"name":"q[created_at_lteq]","type":"string","in":"query","description":"Search by date begin end"},{"name":"q[ip_address_country_eq]","type":"string","in":"query","description":"Search by country"},{"name":"q[ip_address_source_ip_eq]","type":"string","in":"query","description":"Search by source ip"},{"name":"q[delivery_result]","type":"string","in":"query","description":"Search by for delivery result"},{"name":"q[feedback_type_eq]","type":"string","in":"query","description":"Search by feedback type"},{"name":"q[arrival_date_eq]","type":"string","in":"query","description":"Search by arrival date"},{"name":"q[original_message_date_eq]","type":"string","in":"query","description":"Search by original message date"},{"name":"q[from_address_eq]","type":"string","in":"query","description":"Search by from address"},{"name":"q[message_id_eq]","type":"string","in":"query","description":"Search by message id"},{"name":"q[subject_cont]","type":"string","in":"query","description":"Search by subject cont"},{"name":"page","type":"string","in":"query","description":"Page Number"},{"name":"per","type":"string","in":"query","description":"Entries per page."}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domains/{domain_id}/forensic_reports/{id}.json":{"get":{"tags":["forensic_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_forensic_reports_id.json","summary":"Get all the details of a Failure Report","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domains/{domain_id}/mta_sts_reports.json":{"get":{"tags":["mta_sts_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_mta_sts_reports.json","summary":"List, Search and Paginate MTA Reports","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[start_datetime_gteq]","type":"string","in":"query","description":"Search by date begin start"},{"name":"q[start_datetime_lteq]","type":"string","in":"query","description":"Search by date begin end"},{"name":"q[organization_name_eq]","type":"string","in":"query","description":"Search by for orgnization name"},{"name":"q[report_id_eq]","type":"string","in":"query","description":"Search by report id"},{"name":"q[policy_type_eq]","type":"string","in":"query","description":"Search by policy type"},{"name":"q[policy_host_eq]","type":"string","in":"query","description":"Search by Policy host"},{"name":"page","type":"string","in":"query","description":"Page Number"},{"name":"per","type":"string","in":"query","description":"Entries per page."}],"responses":{"400":{"description":"Bad Request — invalid filter value (e.g. non-IP for sending_mta_ip / receiving_ip filters)"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domains/{domain_id}/mta_sts_reports/mta_failure_details.json":{"get":{"tags":["mta_sts_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_mta_sts_reports_mta_failure_details.json","summary":"List, Search and Paginate MTA Reports","parameters":[{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"q[sending_mta_ip_address_source_ip_eq]","type":"string","in":"query","description":"Search by sending source ip"},{"name":"q[receiving_ip_address_source_ip_eq]","type":"string","in":"query","description":"Search by receiving source ip"},{"name":"q[result_type_eq]","type":"string","in":"query","description":"Search byresult type"},{"name":"q[receiving_mx_hostname_eq]","type":"string","in":"query","description":"Search by receiving mx host name"},{"name":"page","type":"string","in":"query","description":"Page Number"},{"name":"per","type":"string","in":"query","description":"Entries per page."}],"responses":{"400":{"description":"Bad Request — invalid filter value (e.g. non-IP for sending_mta_ip / receiving_ip filters)"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/domains/{domain_id}/mta_sts_reports/{id}.json":{"get":{"tags":["mta_sts_reports"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_domains_domain_id_mta_sts_reports_id.json","summary":"Get all the details of a MTA Report","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"domain_id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"400":{"description":"Bad Request — invalid filter value (e.g. non-IP for sending_mta_ip / receiving_ip filters)"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/postmaster_account_records.json":{"get":{"tags":["postmaster_account_records"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_postmaster_account_records.json","summary":"Cumulative data of all domains of a Postmaster Account","parameters":[{"name":"email","type":"string","in":"query","required":true,"description":"Email address of Postmaster Account"}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/postmaster_account_records/{id}.json":{"get":{"tags":["postmaster_account_records"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_postmaster_account_records_id.json","summary":"Details of a Postmaster Account domain.","parameters":[{"name":"item","type":"string","in":"query","required":true,"description":"Domain for which data is needed"},{"name":"email","type":"string","in":"query","required":true,"description":"Email address of Postmaster Account"},{"name":"id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/postmaster_account_records/connected.json":{"get":{"tags":["postmaster_account_records"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_postmaster_account_records_connected.json","summary":"List of connected Postmaster Accounts.","parameters":[],"responses":{"401":{"description":"Unauthorized"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/user_accounts":{"get":{"tags":["user_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_user_accounts","summary":"List user accounts","parameters":[{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/user_accounts/{id}":{"get":{"tags":["user_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"get_v2_accounts_account_id_user_accounts_id","summary":"Details of user account","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/user_accounts.json":{"post":{"tags":["user_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"post_v2_accounts_account_id_user_accounts.json","summary":"Add user in account","parameters":[{"name":"user_account[create_teams]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"create_teams access flag"},{"name":"user_account[subscription]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"subscription access flag"},{"name":"user_account[tag]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"tag access flag "},{"name":"user_account[sso]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"sso access flag "},{"name":"user_account[widgets]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"widgets access flag "},{"name":"user_account[timeline]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"timeline access flag "},{"name":"user_account[teams]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"teams access flag "},{"name":"user_account[summary]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"summary access flag "},{"name":"user_account[reports]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"reports access flag "},{"name":"user_account[domains]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"domains access flag "},{"name":"user_account[alerts]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"alerts access flag "},{"name":"user_account[domains_reports]","type":"string","enum":[true,false,"true","false"],"in":"formData","required":true,"description":"domains_reports access flag "},{"name":"user_account[email]","type":"string","in":"formData","required":true,"description":"email of user, you want to add in account"},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}},"/v2/accounts/{account_id}/user_accounts/{id}.json":{"put":{"tags":["user_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"put_v2_accounts_account_id_user_accounts_id.json","summary":"Update user in account","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true},{"name":"user_account[domains_reports]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"domains_reports access flag "},{"name":"user_account[alerts]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"alerts access flag "},{"name":"user_account[domains]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"domains access flag "},{"name":"user_account[reports]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"reports access flag "},{"name":"user_account[summary]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"summary access flag "},{"name":"user_account[teams]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"teams access flag "},{"name":"user_account[timeline]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"timeline access flag "},{"name":"user_account[widgets]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"widgets access flag "},{"name":"user_account[sso]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"sso access flag "},{"name":"user_account[tag]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"tag access flag "},{"name":"user_account[subscription]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"subscription access flag"},{"name":"user_account[create_teams]","type":"string","enum":[true,false,"true","false"],"in":"formData","description":"create_teams access flag"}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""},"delete":{"tags":["user_accounts"],"consumes":["application/x-www-form-urlencoded","multipart/form-data"],"operationId":"delete_v2_accounts_account_id_user_accounts_id.json","summary":"Delete user from account","parameters":[{"name":"id","type":"number","in":"path","required":true},{"name":"account_id","type":"number","in":"path","required":true}],"responses":{"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Server crashed for some reason"}},"description":""}}},"definitions":{},"tags":[{"name":"accounts","description":""},{"name":"agg_reports","description":""},{"name":"alerts","description":""},{"name":"bimi_status","description":""},{"name":"domain_accounts","description":""},{"name":"domains","description":""},{"name":"email_sources","description":""},{"name":"email_tests","description":""},{"name":"forensic_reports","description":""},{"name":"mta_sts_reports","description":""},{"name":"postmaster_account_records","description":""},{"name":"user_accounts","description":""}],"securityDefinitions":{},"security":[],"host":"localhost:3000"}