{"openapi":"3.0.0","info":{"title":"EasyDMARC API","version":"1.0.0","description":"EasyDMARC Public API Documentation","contact":{"name":"EasyDMARC","url":"https://easydmarc.com"},"x-logo":{"url":"https://easydmarc.com/img/logo.png","backgroundColor":"#FFFFFF","altText":"EasyDMARC"}},"servers":[{"url":"https://testapi.easydmarc.am"}],"tags":[{"name":"Authentication","x-displayName":"Authentication"},{"name":"Domains","x-displayName":"Domains"},{"name":"Alerting","x-displayName":"Alerting"},{"name":"DNS Lookup","x-displayName":"DNS Lookup"},{"name":"Aggregate Reports","x-displayName":"Aggregate Reports"},{"name":"Audit Log","x-displayName":"Audit Log"},{"name":"DNS Intelligence","x-displayName":"DNS Intelligence"},{"name":"Failure Reports","x-displayName":"Failure Reports"},{"name":"Workspaces","x-displayName":"Workspaces"},{"name":"Organizations","x-displayName":"Organizations"},{"name":"Billing - Subscriptions & Pricing","x-displayName":"Billing - Subscriptions & Pricing"},{"name":"Billing - Billing Information","x-displayName":"Billing - Billing Information"},{"name":"Billing - Invoices","x-displayName":"Billing - Invoices"},{"name":"Billing - Payment Methods","x-displayName":"Billing - Payment Methods"},{"name":"Organizations - Users","x-displayName":"Organizations - Users"},{"name":"Partner - Profile","x-displayName":"Partner - Profile"},{"name":"Users","x-displayName":"Users"}],"paths":{"/v1/domains/overview":{"post":{"tags":["Domains"],"summary":"List domains with the domain details","description":"","operationId":"getDomainsOverview","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"organizationId":{"$ref":"#/components/schemas/OrganizationIdField"},"startDate":{"type":"string","description":"Start Date"},"endDate":{"type":"string","description":"End Date"},"page":{"type":"number"},"pageSize":{"type":"number","default":1},"filters":{"description":"Filter conditions for the search.","oneOf":[{"$ref":"#/components/schemas/FilterCondition"},{"type":"array","items":{"$ref":"#/components/schemas/FilterCondition"}}]}}}}}},"responses":{"200":{"description":"Successful response with a list of domains","content":{"application/json":{"schema":{"type":"object","title":"GetDomainsOk","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DomainOverview"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}},"422":{"$ref":"#/components/responses/UnprocessableEntity"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domains":{"post":{"tags":["Domains"],"summary":"Create new domain","operationId":"createDomain","requestBody":{"description":"Request payload for creating one or more domains.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"organizationId":{"type":"string"},"domain":{"type":"string"},"type":{"type":"string"},"groupId":{"type":"string"}},"x-examples":{"Example 1":{"organizationId":"org_68267af02750d5671394546e","domain":"lurline.info","type":"sending","groupId":"dmngrp_68267f052750d56713945475"}}},"examples":{"Example 1":{"value":{"organizationId":"org_68267af02750d5671394546e","domain":"lurline.info","type":"sending","groupId":"dmngrp_68267f052750d56713945475"}}}}}},"responses":{"201":{"description":"Domain created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"},"examples":{"success":{"value":{"domain":"anderson.biz","domainVerified":false,"type":"sending","policy":"missing","logoUrl":"http://company.com/favicon.png","domainGroup":"group1","domainGroupId":"dmngrp_42517f052750d56713945475"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"get":{"tags":["Domains"],"summary":"List domains","operationId":"getDomains","parameters":[{"$ref":"#/components/parameters/organizationId"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/pageSize"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","readOnly":true,"items":{"$ref":"#/components/schemas/Domain"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}},"examples":{"Example 1":{"value":{"data":[{"domain":"easydmarc.com","domainVerified":false,"type":"sending","policy":"reject","logoUrl":"https://assets.easydmarc.com/favicons/2025-04/easydmarc_1744732732290.png","domainGroup":"Default Group","domainGroupId":"dmngrp_34267f052750d56713945475"},{"domain":"easydmarc.corg","domainVerified":false,"type":"sending","policy":"reject","logoUrl":"https://assets.easydmarc.com/favicons/2025-04/easydmarc_1744732732290.png","domainGroup":"Default Group","domainGroupId":"dmngrp_56267f052750d56713945475"}],"meta":{"total":2,"page":1,"pageCount":1,"limit":20,"hasPreviousPage":false,"hasNextPage":false}}}}}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domains/batch":{"post":{"tags":["Domains"],"summary":"Create new domains in batch","operationId":"createDomainsBatch","requestBody":{"description":"Request payload for creating one or more domains.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"organizationId":{"type":"string"},"domains":{"type":"array","items":{"type":"object","properties":{"domainName":{"type":"string"},"type":{"type":"string"},"groupId":{"type":"string"}},"required":["domainName","type","groupId"]}}},"required":["organizationId","domains"],"x-examples":{"Example 1":{"organizationId":"org_6825fd937307b513490da37c","domains":[{"domainName":"domain1.com","type":"sending","groupId":"dmngrp_682b42fc6ef3ac50b4ca4fce"},{"domainName":"domain2.com","type":"parked","groupId":"dmngrp_682b42d86ef3ac50b4ca4fcd"}]}}},"examples":{"single":{"value":{"organizationId":"org_6825fd937307b513490da37c","domains":[{"type":"sending","groupId":"dmngrp_682b42fc6ef3ac50b4ca4fce","domainName":"example.com"}]}},"multiple":{"value":{"organizationId":"org_6825fd937307b513490da37c","domains":[{"domainName":"domain1.com","type":"sending","groupId":"dmngrp_682b42fc6ef3ac50b4ca4fce"},{"domainName":"domain2.com","type":"parked","groupId":"dmngrp_682b42d86ef3ac50b4ca4fcd"}]}}}}}},"responses":{"201":{"description":"Domain created successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"examples":{"success":{"value":[{"domains":[{"domain":"jermey.com","domainVerified":false,"type":"sending","policy":"missing","logoUrl":"https://dev-assets.easydmarc.com/favicons/2025-05/jermey_1747354403003.png","domainGroup":"group1","domainGroupId":"dmngrp_62587f052750d56713945475"},{"domain":"iva.com","domainVerified":false,"type":"sending","policy":"missing","logoUrl":"","domainGroup":"group1","domainGroupId":"dmngrp_53627f052750d56713945475"}]}]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domains/{domain}":{"get":{"tags":["Domains"],"summary":"Get domain by ID","operationId":"getDomainById","parameters":[{"$ref":"#/components/parameters/organizationId"},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response with domain details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"put":{"tags":["Domains"],"summary":"Update an existing domain","operationId":"updateDomain","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Domain update payload. All fields must be provided.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"},"examples":{"default":{"value":{"organizationId":"00000000-0000-0000-0000-000000000000","type":"sending","groupId":"ab34-c624-bc7b-7820-c8a9-cd4f-e910-3b23","domain":"example.com"}}}}}},"responses":{"200":{"description":"Domain updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"403":{"description":"Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}],"x-internal":true},"patch":{"tags":["Domains"],"summary":"Partially update a domain","operationId":"patchDomain","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Partial update payload for the domain.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domainName":{"type":"string"},"type":{"$ref":"#/components/schemas/DomainType"},"groupId":{"type":"string"}}},"examples":{"default":{"value":{"groupId":"new-group-123","domainName":"example.com"}}}}}},"responses":{"200":{"description":"Domain partially updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"delete":{"tags":["Domains"],"summary":"Delete a domain","operationId":"deleteDomain","parameters":[{"$ref":"#/components/parameters/organizationId"},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Domain deleted successfully"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domains/{domain}/setup":{"get":{"tags":["Domains"],"summary":"Get setup info","description":"Returns the DMARC record to be added to DNS\n\nSet up a DMARC record in the DNS provider account. \n\nNote: DNS propagation may take up to several hours.\n","operationId":"get-domains-domain-setup","parameters":[{"name":"type","in":"query","description":"Record type, CNAME or TXT","required":true,"schema":{"type":"string","enum":["CNAME","TXT"],"examples":["CNAME"]}},{"$ref":"#/components/parameters/organizationId"},{"name":"domain","in":"path","description":"Domain name","required":true,"schema":{"type":"string","examples":["domain1.com"]}}],"responses":{"200":{"description":"Generated DMARC record","content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string","examples":["_dmarc.domain1.com"]},"type":{"type":"string","enum":["cname","txt"],"default":"txt","examples":["cname"]},"value":{"type":"string","examples":["_dmarc.domain1_com._d.easydmarc.com"]}},"required":["host","type","value"]},"examples":{"Example 1":{"value":{"host":"_dmarc.domain1.com","type":"txt","value":"v=DMARC1;p=none;rua=mailto:4cc3eb3955@dev-rua.easydmarc.com;ruf=mailto:4cc3eb3955@dev-rua.easydmarc.com;fo=1;"}},"Example 2":{"value":{"host":"_dmarc.domain2.com","type":"cname","value":"_dmarc.domain2_com._d.easydmarc.com"}}}}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"post":{"tags":["Domains"],"summary":"Verify domain","description":"Not available yet","operationId":"post-domains-domain-setup","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"managed":{"type":"boolean"},"tags":{"type":"object"}}}}}},"responses":{},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domains/search":{"post":{"tags":["Domains"],"summary":"🚧 Search and filter domains with advanced filtering and ordering","operationId":"searchDomains","requestBody":{"description":"Domain search request payload including filters, ordering, pagination, and requested properties.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSearchRequest"},"examples":{"basic":{"value":{"organizationId":"00000000-0000-0000-0000-000000000000","page":1,"order":[{"orderBy":"volume","direction":"desc"}],"filter":{"operator":"AND","conditions":[{"field":"status","value":"active","operator":"eq"}]},"domains":["example.com","example.org"],"pageSize":50,"properties":["domainName","volume","dmarc"]}}}}}},"responses":{"200":{"description":"A list of domains matching the search criteria.","content":{"application/json":{"schema":{"type":"object","title":"SearchDomainsOk","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DomainOverview"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domain-groups":{"get":{"tags":["Domains"],"summary":"List domain groups","operationId":"listDomainGroups","parameters":[{"$ref":"#/components/parameters/organizationId"},{"$ref":"#/components/parameters/pageSize"},{"$ref":"#/components/parameters/page"}],"responses":{"200":{"description":"Successful response with a list of domain groups.","content":{"application/json":{"schema":{"type":"object","title":"GetDomainGroupsOk","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DomainGroup"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}},"examples":{"success":{"value":{"data":[{"id":"00000000-0000-0000-0000-000000000000","name":"Group 1","domains":["domain1.com","domain2.com","domain3.com"]}],"meta":{"pageSize":10,"page":1,"total":1}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"post":{"tags":["Domains"],"summary":"Create a new domain group","operationId":"createDomainGroup","requestBody":{"description":"Domain group creation payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainGroupRequest"},"examples":{"default":{"value":{"id":"00000000-0000-0000-0000-000000000000","organizationId":"org_68231dcfeb8e9f092a052b88","name":"Group 1","domains":["domain1.com","domain2.com"]}}}}}},"responses":{"201":{"description":"Domain group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"},"examples":{"default":{"value":{"id":"00000000-0000-0000-0000-000000000000","name":"Group 1","domains":["domain1.com","domain2.com","domain3.com"]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domain-groups/{id}":{"get":{"tags":["Domains"],"summary":"Get domain group details","operationId":"getDomainGroupById","parameters":[{"$ref":"#/components/parameters/organizationId"},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response with domain group details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"},"examples":{"default":{"value":{"id":"00000000-0000-0000-0000-000000000000","name":"Group 1","domains":["domain1.com","domain2.com","domain3.com"]}}}}}},"403":{"description":"Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"put":{"tags":["Domains"],"summary":"Update an existing domain group","operationId":"updateDomainGroup","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Domain group update payload.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}},"examples":{"default":{"value":{"policy":"reject","spf_record":"v=spf1 include:example.com ~all","bimi_record":"v=BIMI1; l=https://example.com/logo.svg","dmarc_record":"v=DMARC1; p=reject","favicon_path":"https://example.com/favicon.ico","has_easy_spf":false,"total_volume":1600,"domain_labels":"label1, label2","spf_pass_rate":99,"dkim_pass_rate":97,"dkim_selectors":"default","partner_owners":"Partner Inc.","compliance_rate":96,"group_object_id":"group-a","compliant_volume":1500,"has_managed_bimi":false,"has_managed_dkim":true,"domain_group_name":"Group A Updated","has_managed_dmarc":true,"is_domain_verified":true,"has_managed_mta_sts":false,"non_compliant_volume":100,"possible_dkim_selectors":"default","previous_compliant_volume":1400,"previous_non_compliant_volume":200}}}}}},"responses":{"200":{"description":"Domain group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"},"examples":{"default":{"value":{"id":"00000000-0000-0000-0000-000000000000","name":"Group 1","domains":["domain1.com","domain2.com","domain3.com"]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"delete":{"tags":["Domains"],"summary":"Delete a domain group","operationId":"deleteDomainGroup","parameters":[{"$ref":"#/components/parameters/organizationId"},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Domain group deleted successfully"},"404":{"$ref":"#/components/responses/NotFound"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/domain-groups/{id}/domains":{"post":{"tags":["Domains"],"summary":"🚧 Add domains to a domain group","operationId":"addDomainsToGroup","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"List of domains to add to the group.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"}}},"required":["domains"]},"examples":{"default":{"value":{"domains":["example1.com","example2.com"]}}}}}},"responses":{"200":{"description":"Domains added to the group successfully","content":{"application/json":{"schema":{"type":"object","title":"AddDomainsToGroupOk","properties":{"groupId":{"type":"string"},"groupName":{"type":"string"},"domainsAdded":{"type":"array","items":{"type":"string"}}}},"examples":{"default":{"value":{"groupId":"group-a","groupName":"Group A","domainsAdded":["example1.com","example2.com"]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}],"x-internal":true}},"/v1/domain-groups/{id}/domains/{domainId}":{"delete":{"tags":["Domains"],"summary":"Remove a domain from a domain group","operationId":"deleteDomain1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Domain removed from group successfully"},"404":{"$ref":"#/components/responses/NotFound"}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}],"x-internal":true}},"/v1/webhooks":{"post":{"tags":["Alerting"],"summary":"Create a new webhook","operationId":"createWebhook","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}}},"responses":{"201":{"description":"The webhook has been successfully created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"422":{"description":"Validation failed"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/webhooks/owner/{ownerId}":{"get":{"tags":["Alerting"],"summary":"Get webhook list for specific owner","operationId":"findAllWebhooks","parameters":[{"name":"ownerId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Returns all owned webhooks","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}},"404":{"description":"Owner not found or no webhooks exist for this owner"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/webhooks/{id}":{"get":{"tags":["Alerting"],"summary":"Get a specific webhook","operationId":"getWebhookByObjectId","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"put":{"tags":["Alerting"],"summary":"Update a webhook","operationId":"updateWebhook","parameters":[{"name":"id","in":"path","description":"Webhook object ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookRequest"}}}},"responses":{"200":{"description":"The webhook has been successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"422":{"description":"Validation failed"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]},"delete":{"tags":["Alerting"],"summary":"Delete a webhook","operationId":"deleteWebhook","parameters":[{"name":"id","in":"path","description":"Webhook object ID","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"The webhook has been successfully deleted"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/webhooks/{id}/regenerate-secret":{"post":{"tags":["Alerting"],"summary":"Regenerate webhook secret","operationId":"regenerateSecret","parameters":[{"name":"id","in":"path","description":"Webhook object ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The webhook secret has been successfully regenerated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/webhooks/{id}/deliveries":{"get":{"tags":["Alerting"],"summary":"Get the list of webhook deliveries","operationId":"getWebhookDeliveries","parameters":[{"name":"id","in":"path","description":"Webhook object ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Returns webhook delivery history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/dmarc/failure-reports":{"get":{"tags":["Failure Reports"],"summary":"Get failure reports","description":"Returns a paginated list of DMARC RUF (failure/forensic) reports with comprehensive filtering and sorting capabilities. Authentication required. Response is paginated.","operationId":"getFailureReports","parameters":[{"name":"organizationId","in":"query","description":"Organization ID to filter reports by","required":true,"schema":{"type":"string","maxLength":255,"examples":["org_6464de38ebf5b013b1928408"]}},{"name":"domains","in":"query","description":"Comma-separated list of domain names to filter reports by (minimum 1 required)","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,}(,[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,})*$","examples":["example.com,test.com"]}},{"name":"reportDate","in":"query","description":"Filter by specific report date (ISO 8601 format)","required":false,"schema":{"type":"string","format":"date-time","examples":["2024-01-15T00:00:00Z"]}},{"name":"sourceIp","in":"query","description":"Filter by source IPv4 address","required":false,"schema":{"type":"string","format":"ipv4","pattern":"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$","examples":["192.168.1.100"]}},{"name":"countryCode","in":"query","description":"Filter by country code (ISO 3166-1 alpha-2)","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","minLength":2,"maxLength":2,"examples":["US"]}},{"name":"reporterDomain","in":"query","description":"Filter by reporter domain (FQDN)","required":false,"schema":{"type":"string","pattern":"^[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,}$","examples":["reporter.com"]}},{"name":"ptr","in":"query","description":"Filter by PTR record (must be \"Unknown\" or a valid domain)","required":false,"schema":{"type":"string","examples":["mail.example.com"]}},{"name":"ptrGroup","in":"query","description":"Filter by PTR group (must be \"Unknown\" or a valid domain)","required":false,"schema":{"type":"string","examples":["example.com"]}},{"name":"dateFrom","in":"query","description":"Filter reports from this date (ISO 8601 format)","required":false,"schema":{"type":"string","format":"date-time","examples":["2024-01-01T00:00:00Z"]}},{"name":"dateTo","in":"query","description":"Filter reports until this date (ISO 8601 format)","required":false,"schema":{"type":"string","format":"date-time","examples":["2024-01-31T23:59:59Z"]}},{"name":"page","in":"query","description":"Page number for pagination (1-based)","required":false,"schema":{"type":"integer","minimum":1,"default":1,"examples":[1]}},{"name":"pageSize","in":"query","description":"Number of items per page","required":false,"schema":{"type":"integer","minimum":1,"maximum":1000,"default":10,"examples":[50]}},{"name":"field","in":"query","description":"Field to sort by","required":false,"schema":{"type":"string","enum":["report_id","domain","header_from","from","to","subject","date","headers_eml","report_domain","report_from","report_subject","report_email_body","report_email_body_urls","report_date","source_ip","ptr","ptr_group","country_code","created"],"default":"date","examples":["report_date"]}},{"name":"direction","in":"query","description":"Sort direction","required":false,"schema":{"type":"string","enum":["asc","desc"],"default":"desc","examples":["desc"]}}],"responses":{"200":{"description":"Returns paginated list of failure reports","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponse"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FailureReportListItem"}}}}]},"examples":{"success_response":{"summary":"Successful response with failure reports","value":{"data":[{"id":"507f1f77bcf86cd799439011","domain":"example.com","sourceIp":"192.168.1.100","ptr":"mail.sender.com","ptrGroup":"sender.com","countryCode":"US","reportDate":"2024-01-15T10:30:00Z","reporter":"reporter.com","fromAddress":"sender@example.com","toAddress":"recipient@example.com","subject":"Important Message","attachmentCount":2},{"id":"507f1f77bcf86cd799439012","domain":"test.com","sourceIp":"10.0.0.50","ptr":"Unknown","ptrGroup":"Unknown","countryCode":"GB","reportDate":"2024-01-15T11:45:00Z","reporter":"another-reporter.com","fromAddress":"user@test.com","toAddress":"info@test.com","subject":"Test Email","attachmentCount":0}],"meta":{"total":245,"page":1,"pageCount":1,"limit":10,"hasPreviousPage":true,"hasNextPage":true}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/dmarc/failure-reports/{id}":{"get":{"tags":["Failure Reports"],"summary":"Get failure report by ID","description":"Retrieves detailed information about a single DMARC failure report by its unique identifier. Authentication required.","operationId":"getFailureReportById","parameters":[{"name":"organizationId","in":"query","description":"Organization ID","required":true,"schema":{"type":"string","maxLength":255,"examples":["org_6464de38ebf5b013b1928408"]}},{"name":"include","in":"query","description":"Comma-separated list of optional fields to include in the response.\nAvailable options: rawHeaders, emailBody, addresses, downloadUrls","required":false,"schema":{"type":"string","pattern":"^(rawHeaders|emailBody|addresses|downloadUrls)(,(rawHeaders|emailBody|addresses|downloadUrls))*$","examples":["rawHeaders,emailBody,downloadUrls"]}},{"name":"redaction","in":"query","description":"Redaction level for sensitive information","required":false,"schema":{"type":"string","enum":["strict","none"],"default":"strict","examples":["strict"]}},{"name":"id","in":"path","description":"The MongoDB ObjectId of the failure report","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$","examples":["507f1f77bcf86cd799439011"]}}],"responses":{"200":{"description":"Returns detailed failure report metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailureReportMetadata"},"examples":{"complete_report":{"summary":"Complete report with all fields","value":{"id":"507f1f77bcf86cd799439011","domain":"example.com","receivedAt":"2024-01-15T10:30:00Z","message":{"from":"sender@example.com","to":"recipient@example.com","subject":"Important Message","headerFrom":"sender@example.com","sourceIp":"192.168.1.100","ptr":"mail.sender.com","ptrGroup":"sender.com","emailBody":"This is the email body content...","rawHeaders":"Received: from mail.sender.com...","extractedUrls":["https://example.com/link1","https://example.com/link2"],"attachments":[{"cloud":"s3","bucket":"ruf-reports","key":"attachments/507f1f77bcf86cd799439011/0/document.pdf","filename":"document.pdf","contentType":"application/pdf","size":102400}]},"reportMetadata":{"reportId":"report-12345","reporterDomain":"reporter.com","reportedBy":"noreply@reporter.com","reportSubject":"DMARC Failure Report","reportEmailBody":"This message failed DMARC authentication...","reportDate":"2024-01-15T10:30:00Z","countryCode":"US","location":{"coordinates":[-74.006,40.7128]}},"downloadLinks":{"emlFile":"https://api2.easydmarc.com/v1.0/dmarc/failure-reports/reports/507f1f77bcf86cd799439011/eml?organizationId=org_6464de38ebf5b013b1928408","attachments":[{"cloud":"s3","bucket":"ruf-reports","key":"attachments/507f1f77bcf86cd799439011/0/document.pdf","downloadUrl":"https://api2.easydmarc.com/v1.0/dmarc/failure-reports/reports/507f1f77bcf86cd799439011/attachments/0?organizationId=org_6464de38ebf5b013b1928408"}],"allAttachmentsZip":"https://api2.easydmarc.com/v1.0/dmarc/failure-reports/reports/507f1f77bcf86cd799439011/attachments/all?organizationId=org_6464de38ebf5b013b1928408"}}},"with_presigned_urls":{"summary":"Report with presigned download URLs","value":{"id":"507f1f77bcf86cd799439011","domain":"example.com","receivedAt":"2024-01-15T10:30:00Z","message":{"from":"sender@example.com","to":"recipient@example.com","subject":"Important Message","headerFrom":"sender@example.com","sourceIp":"192.168.1.100","ptr":"mail.sender.com","ptrGroup":"sender.com","attachments":[{"cloud":"s3","bucket":"ruf-reports","key":"attachments/507f1f77bcf86cd799439011/0/document.pdf","filename":"document.pdf","contentType":"application/pdf","size":102400}]},"reportMetadata":{"reportId":"report-12345","reporterDomain":"reporter.com","reportedBy":"noreply@reporter.com","reportSubject":"DMARC Failure Report","reportDate":"2024-01-15T10:30:00Z","countryCode":"US"},"presignedDownloadLinks":{"emlFile":"https://s3.amazonaws.com/ruf-reports/eml/report-12345?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...","attachments":[{"cloud":"s3","bucket":"ruf-reports","key":"attachments/507f1f77bcf86cd799439011/0/document.pdf","presignedUrl":"https://s3.amazonaws.com/ruf-reports/attachments/507f1f77bcf86cd799439011/0/document.pdf?X-Amz-Algorithm=...","expiresAt":"2024-01-15T10:35:00Z"}],"allAttachmentsZip":"https://s3.amazonaws.com/ruf-reports/zip/report-12345/all-attachments.zip?X-Amz-Algorithm=..."}}}}}},"headers":{"Cache-Control":{"schema":{"type":"string","example":"no-store, private"},"description":"Cache control header (set to 'no-store, private' when downloadUrls are included)"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/dmarc/failure-reports/{id}/eml":{"get":{"tags":["Failure Reports"],"summary":"Download EML file for a failure report","description":"Generates a presigned download URL for the original EML (email message) file associated with a failure report.\n\nThe URL is valid for 300 seconds (5 minutes) and must be used before expiration.\n\nAuthentication required.","operationId":"downloadEml","parameters":[{"name":"organizationId","in":"query","description":"Organization ID","required":true,"schema":{"type":"string","maxLength":255,"examples":["org_6464de38ebf5b013b1928408"]}},{"name":"id","in":"path","description":"The MongoDB ObjectId of the failure report","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$","examples":["507f1f77bcf86cd799439011"]}}],"responses":{"200":{"description":"Returns presigned download URL for EML file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlResponse"},"examples":{"eml_download":{"summary":"EML download URL","value":{"data":{"downloadUrl":"https://s3.amazonaws.com/ruf-reports/ruf-eml/report-12345?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...","expiresAt":"2024-01-15T10:35:00Z"}}}}}},"headers":{"Cache-Control":{"schema":{"type":"string","example":"no-store, private"},"description":"Cache control header"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/dmarc/failure-reports/{id}/attachments/{index}":{"get":{"tags":["Failure Reports"],"summary":"Download specific attachment from a failure report","description":"Generates a presigned download URL for a specific attachment from a failure report.\n\nThe URL is valid for 300 seconds (5 minutes) and must be used before expiration.\nAttachment index is 0-based.\n\nAuthentication required.","operationId":"downloadAttachment","parameters":[{"name":"organizationId","in":"query","description":"Organization ID","required":true,"schema":{"type":"string","maxLength":255,"examples":["org_6464de38ebf5b013b1928408"]}},{"name":"id","in":"path","description":"The MongoDB ObjectId of the failure report","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$","examples":["507f1f77bcf86cd799439011"]}},{"name":"index","in":"path","description":"Zero-based index of the attachment to download","required":true,"schema":{"type":"integer","minimum":0,"examples":[0]}}],"responses":{"200":{"description":"Returns presigned download URL for the attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlResponse"},"examples":{"attachment_download":{"summary":"Attachment download URL","value":{"data":{"downloadUrl":"https://s3.amazonaws.com/ruf-reports/attachments/507f1f77bcf86cd799439011/0/document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...","expiresAt":"2024-01-15T10:35:00Z"}}}}}},"headers":{"Cache-Control":{"schema":{"type":"string","example":"no-store, private"},"description":"Cache control header"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/dmarc/failure-reports/{id}/attachments/all":{"get":{"tags":["Failure Reports"],"summary":"Download all attachments as a ZIP archive","description":"Generates a presigned download URL for a ZIP archive containing all attachments from a failure report.\n\nThe URL is valid for 300 seconds (5 minutes) and must be used before expiration.\n\nAuthentication required.","operationId":"downloadAllAttachments","parameters":[{"name":"organizationId","in":"query","description":"Organization ID","required":true,"schema":{"type":"string","maxLength":255,"examples":["org_6464de38ebf5b013b1928408"]}},{"name":"id","in":"path","description":"The MongoDB ObjectId of the failure report","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$","examples":["507f1f77bcf86cd799439011"]}}],"responses":{"200":{"description":"Returns presigned download URL for ZIP archive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlResponse"},"examples":{"zip_download":{"summary":"ZIP archive download URL","value":{"data":{"downloadUrl":"https://s3.amazonaws.com/ruf-reports/ruf-zip/report-12345/all-attachments.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...","expiresAt":"2024-01-15T10:35:00Z"}}}}}},"headers":{"Cache-Control":{"schema":{"type":"string","example":"no-store, private"},"description":"Cache control header"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/dmarc/failure-reports/aggregates":{"get":{"tags":["Failure Reports"],"summary":"Get aggregated statistics for failure reports","description":"Returns aggregated statistics and dimensional breakdowns for DMARC failure reports.\n\nFeatures:\n- Aggregate by multiple dimensions (reporter, ptrGroup, countryCode, domain)\n- Filter by domain names, date range, source IP, country code, reporter domain\n- Control top N results per dimension\n- Set minimum count threshold\n- Sort by count or key\n- Summary statistics including total reports, unique domains, unique reporters\n\nAuthentication required.","operationId":"getFailureReportsAggregates","parameters":[{"name":"organizationId","in":"query","description":"Organization ID to filter reports by","required":true,"schema":{"type":"string","maxLength":255,"examples":["org_6464de38ebf5b013b1928408"]}},{"name":"domains","in":"query","description":"Comma-separated list of domain names to filter reports by (minimum 1 required)","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,}(,[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,})*$","examples":["example.com,test.com"]}},{"name":"dateFrom","in":"query","description":"Aggregate reports from this date (ISO 8601 format)","required":false,"schema":{"type":"string","format":"date-time","examples":["2024-01-01T00:00:00Z"]}},{"name":"dateTo","in":"query","description":"Aggregate reports until this date (ISO 8601 format)","required":false,"schema":{"type":"string","format":"date-time","examples":["2024-01-31T23:59:59Z"]}},{"name":"reporterDomain","in":"query","description":"Filter by reporter domain (FQDN)","required":false,"schema":{"type":"string","pattern":"^[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,}$","examples":["reporter.com"]}},{"name":"reportDate","in":"query","description":"Filter by specific report date (ISO 8601 format)","required":false,"schema":{"type":"string","format":"date-time","examples":["2024-01-15T00:00:00Z"]}},{"name":"ptr","in":"query","description":"Filter by PTR record (must be \"Unknown\" or a valid domain)","required":false,"schema":{"type":"string","examples":["mail.example.com"]}},{"name":"ptrGroup","in":"query","description":"Filter by PTR group (must be \"Unknown\" or a valid domain)","required":false,"schema":{"type":"string","examples":["example.com"]}},{"name":"countryCode","in":"query","description":"Filter by country code (ISO 3166-1 alpha-2)","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","minLength":2,"maxLength":2,"examples":["US"]}},{"name":"sourceIp","in":"query","description":"Filter by source IPv4 address","required":false,"schema":{"type":"string","format":"ipv4","pattern":"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$","examples":["192.168.1.100"]}},{"name":"dimensions","in":"query","description":"Comma-separated list of dimensions to aggregate by (minimum 1 required, must be unique)","required":true,"schema":{"type":"string","pattern":"^(reporter|ptrGroup|countryCode|domain)(,(reporter|ptrGroup|countryCode|domain))*$","examples":["reporter,countryCode"]}},{"name":"topN","in":"query","description":"Number of top results to return per dimension","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10,"examples":[20]}},{"name":"minCount","in":"query","description":"Minimum count threshold for results (filters out entries below this count)","required":false,"schema":{"type":"integer","minimum":1,"default":1,"examples":[5]}},{"name":"field","in":"query","description":"Field to sort aggregation results by","required":false,"schema":{"type":"string","enum":["count","key"],"default":"count","examples":["count"]}},{"name":"direction","in":"query","description":"Sort direction for aggregation results","required":false,"schema":{"type":"string","enum":["asc","desc"],"default":"desc","examples":["desc"]}},{"name":"hasAttachments","in":"query","description":"Filter reports by attachment presence","required":false,"schema":{"type":"boolean","examples":[true]}}],"responses":{"200":{"description":"Returns aggregated statistics and dimensional breakdowns","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailureReportsAggregates"},"examples":{"aggregates_response":{"summary":"Aggregated statistics response","value":{"dimensions":[{"dimension":"reporter","buckets":[{"key":"reporter1.com","count":150},{"key":"reporter2.com","count":89},{"key":"reporter3.com","count":45}]},{"dimension":"countryCode","buckets":[{"key":"US","count":180},{"key":"GB","count":67},{"key":"DE","count":37}]}],"summary":{"totalReports":284,"uniqueDomains":5,"uniqueReporters":12,"dateRange":{"from":"2024-01-01T00:00:00Z","to":"2024-01-31T23:59:59Z"}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://api2.easydmarc.com","description":"Live"}]}},"/v1/auth/magic-link":{"post":{"description":"Generates a short-lived, one-time URL that authenticates a specific user into a specific organization, then redirects them to your chosen EasyDMARC URI.\n\n## Using the Magic Link\n1. Your backend calls POST /auth/magic-link with userId, organizationId, redirectUri.\n2. API returns a single-use url and expiringAt.\n3. Redirect the user (HTTP 302) or render a button that navigates to url.\n4. The user is authenticated and then redirected to redirectUri within EasyDMARC.\n\nNotes\n- Treat the returned url as a credential: never log or expose it broadly.\n- The link expires at expiringAt; do not cache beyond that time.\n- A new link should be generated per session/initiation.\n\n\n## Examples\n\n**cURL**\n```\ncurl -X POST \"https://api2.easydmarc.com/auth/magic-link\" \\\n  -H \"Authorization: Bearer $EASYDMARC_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userId\": \"c99cf9f3-f946-4707-9984-a19bf2d57841\",\n    \"organizationId\": \"org_0987654321\",\n    \"redirectUri\": \"https://account-console.easydmarc.com\"\n  }'\n```\n\nSecurity Best Practices\n- Send the request server-to-server only; never expose your API token to the browser or client apps.\n- Do not log full magic links; if needed, mask them.\n- Prefer short validity windows for operational usage; launch the redirect immediately after generating the link.","operationId":"createMagicLink_2","parameters":[],"requestBody":{"required":true,"description":"Magic link generation request with user, organization, and redirect information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkRequest_2"}}}},"responses":{"200":{"description":"Successfully generated magic link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLink_2"}}}},"400":{"description":"Bad Request - Invalid input or missing parameters"},"401":{"description":"Unauthorized - Invalid or missing Bearer token"}},"security":[{"bearer":[]}],"summary":"Generate login magic link","tags":["Authentication"]}},"/v1/organizations":{"post":{"description":"Creates a new organization within the partner tenant with the specified name.","operationId":"createOrganization_2","parameters":[],"requestBody":{"required":true,"description":"Organization object that needs to be added","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrganization_2"}}}},"responses":{"201":{"description":"Organization created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShortOrganization_2"}}}},"400":{"description":"Invalid request parameters - Required parameter is missing or invalid"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions to create organizations"},"429":{"description":"Too Many Requests - Rate limit exceeded"},"500":{"description":"Internal Server Error"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Create a new organization","tags":["Organizations"]},"get":{"description":"Retrieves a paginated list of organizations within the partner tenant. Use page and limit parameters to control pagination.","operationId":"getOrganizations_2","parameters":[{"name":"order","required":false,"in":"query","schema":{"$ref":"#/components/schemas/OrderEnum_2"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":10,"example":20,"type":"number"}}],"responses":{"200":{"description":"A list of organizations with pagination metadata","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"Array of items for the current page","items":{"$ref":"#/components/schemas/ShortOrganization_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_3","description":"Pagination metadata including total count, page count, and navigation flags"}},"required":["data","meta"]}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"429":{"description":"Too Many Requests - Rate limit exceeded"},"500":{"description":"Internal Server Error"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List organizations","tags":["Organizations"]}},"/v1/organizations/{organizationId}":{"patch":{"description":"Updates the organization with the specified fields. Only provided fields will be updated.","operationId":"patchOrganization_2","parameters":[{"name":"organizationId","required":true,"in":"path","description":"Unique identifier of the organization","schema":{"example":"org_68231dcfeb8e9f092a052b88","type":"string"}}],"requestBody":{"required":true,"description":"Organization object with fields to be partially updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrganization_2"}}}},"responses":{"200":{"description":"Organization updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShortOrganization_2"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions to update this organization"},"404":{"description":"Organization not found"},"429":{"description":"Too Many Requests - Rate limit exceeded"},"500":{"description":"Internal Server Error"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Partially update existing organization","tags":["Organizations"]},"get":{"description":"Retrieves the organization details by the specified ID.","operationId":"getOrganizationById_2","parameters":[{"name":"organizationId","required":true,"in":"path","description":"Unique identifier of the organization","schema":{"example":"org_68231dcfeb8e9f092a052b88","type":"string"}}],"responses":{"200":{"description":"Organization details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShortOrganization_2"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions to view this organization"},"404":{"description":"Organization not found"},"429":{"description":"Too Many Requests - Rate limit exceeded"},"500":{"description":"Internal Server Error"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Get organization details","tags":["Organizations"]},"delete":{"description":"Deletes the organization by the specified ID. This action is irreversible.","operationId":"deleteOrganization_2","parameters":[{"name":"organizationId","required":true,"in":"path","description":"Unique identifier of the organization to delete","schema":{"example":"org_68231dcfeb8e9f092a052b88","type":"string"}}],"responses":{"204":{"description":"Organization deleted successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions to delete this organization"},"404":{"description":"Organization not found"},"500":{"description":"Internal Server Error"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Delete an organization","tags":["Organizations"]}},"/v1/partners/plans":{"get":{"description":"Returns all plans available to the partner, including pricing information, feature sets, and billing details. Use this endpoint to discover sellable plans and prices for subscription assignment.","operationId":"listPlans_2","parameters":[],"responses":{"200":{"description":"List of plans with their prices and features","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlanV2_2"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List plans","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/me":{"get":{"description":"Returns the partner the credentials belong to, including its billing-management type. Use this to discover whether the partner manages customer plans itself (RESELLER) or may only provision Trial (0 cost) plans (STANDARD) — this endpoint is the source of truth for that flag.","operationId":"getCurrentPartner_2","parameters":[],"responses":{"200":{"description":"The partner the credentials belong to","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerProfileV2_2"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Get the current partner","tags":["Partner - Profile"]}},"/v1/partners/subscriptions":{"get":{"description":"Retrieves all subscriptions for a given organization, including expired and cancelled subscriptions.","operationId":"listSubscriptions_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"maxLength":128,"example":"org_88xy77","type":"string"}}],"responses":{"200":{"description":"List of subscriptions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionV2_2"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"422":{"description":"Unprocessable Entity - Invalid organization ID format"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List subscriptions for an organization","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/subscriptions/bulk":{"post":{"description":"Retrieves subscriptions for multiple organizations in a single request, grouped by organization, including expired and cancelled subscriptions. Organizations that do not belong to the partner are omitted from the response.","operationId":"bulkListSubscriptions_2","parameters":[],"requestBody":{"required":true,"description":"External organization IDs to retrieve subscriptions for","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPartnerSubscriptionsBulkRequest_2"}}}},"responses":{"200":{"description":"Subscriptions grouped by organization","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationSubscriptionsV2_2"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - You don't have a partner account"},"422":{"description":"Unprocessable Entity - Invalid request body"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List subscriptions for multiple organizations","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/subscriptions/{subscriptionId}/cancel":{"post":{"description":"Cancels a subscription immediately. Cannot be applied to an already cancelled subscription.","operationId":"cancelSubscription_2","parameters":[{"name":"subscriptionId","required":true,"in":"path","description":"Subscription ID","schema":{"example":"sub_12ab34","type":"string"}}],"responses":{"200":{"description":"Subscription cancelled successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionV2_2"}}}},"401":{"description":"Unauthorized - You don't have a partner account"},"403":{"description":"Forbidden - Organization or price does not belong to the partner"},"404":{"description":"Subscription not found"},"422":{"description":"Unprocessable Entity - Subscription already cancelled"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Cancel a subscription","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/subscriptions/{subscriptionId}/renew":{"post":{"description":"Updates the expiration date of an active subscription based on the assigned price billing period. Cannot be applied to a cancelled subscription.","operationId":"renewSubscription_2","parameters":[{"name":"subscriptionId","required":true,"in":"path","description":"Subscription ID","schema":{"example":"sub_12ab34","type":"string"}}],"responses":{"200":{"description":"Subscription renewed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionV2_2"}}}},"400":{"description":"Invalid request or renewal not allowed"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"404":{"description":"Subscription not found"},"422":{"description":"Unprocessable Entity - Subscription is cancelled"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Renew the subscription","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/subscriptions/{subscriptionId}/auto-renew":{"patch":{"description":"Toggles automatic renewal for a subscription. When enabled, a scheduled job extends the expiration date based on the assigned price billing period once the term ends. Cannot be applied to a cancelled subscription.","operationId":"updateSubscriptionAutoRenew_2","parameters":[{"name":"subscriptionId","required":true,"in":"path","description":"Subscription ID","schema":{"example":"sub_12ab34","type":"string"}}],"requestBody":{"required":true,"description":"Automatic renewal setting","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubscriptionAutoRenewRequest_2"}}}},"responses":{"200":{"description":"Automatic renewal setting updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionV2_2"}}}},"400":{"description":"Invalid request"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"404":{"description":"Subscription not found"},"422":{"description":"Unprocessable Entity - Subscription is cancelled"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Enable or disable automatic renewal","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/subscriptions/assign":{"post":{"description":"Assigns a subscription for an organization using a priceId the partner is allowed to sell. Payment is handled by the partner; this endpoint only registers the assignment.","operationId":"assignSubscription_2","parameters":[],"requestBody":{"required":true,"description":"Subscription assignment data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerSubscriptionAssignRequest_2"}}}},"responses":{"201":{"description":"Subscription assigned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionV2_2"}}}},"400":{"description":"Validation error - Price not allowed for partner or would be a downgrade"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"404":{"description":"Organization or price not found"},"409":{"description":"Conflict - Organization already has an active incompatible subscription"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Assign a subscription (partner-admin flow)","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/subscriptions/{subscriptionId}":{"post":{"description":"Creates a new subscription with a new Plan/Price. The current active subscription is cancelled and replaced with the new one.","operationId":"updateSubscriptionPrice_2","parameters":[{"name":"subscriptionId","required":true,"in":"path","description":"Subscription ID","schema":{"example":"sub_12ab34","type":"string"}}],"requestBody":{"required":true,"description":"New price information for the subscription upgrade/downgrade","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePartnerSubscriptionRequest_2"}}}},"responses":{"200":{"description":"Subscription updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionV2_2"}}}},"401":{"description":"Unauthorized - You don't have a partner account"},"403":{"description":"Forbidden - Organization or price does not belong to the partner"},"404":{"description":"Subscription with given ID does not exist"},"422":{"description":"Unprocessable Entity - Subscription already cancelled or price ID is required"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Upgrade/downgrade plan","tags":["Billing - Subscriptions & Pricing"]}},"/v1/partners/payment-sources":{"get":{"description":"Retrieves all payment methods (credit cards, PayPal) for a given organization.","operationId":"listPaymentSources_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"responses":{"200":{"description":"List of payment sources"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List payment sources for an organization","tags":["Billing - Payment Methods"]},"post":{"description":"Adds a new payment method (credit card or PayPal) for an organization.","operationId":"addPaymentSource_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentSourceCreateRequest_2"}}}},"responses":{"201":{"description":"Payment source added successfully"},"400":{"description":"Invalid request - missing token or intent"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Add a payment source","tags":["Billing - Payment Methods"]}},"/v1/partners/payment-sources/{paymentMethodId}":{"delete":{"description":"Removes a payment method from an organization.","operationId":"removePaymentSource_2","parameters":[{"name":"paymentMethodId","required":true,"in":"path","description":"Payment method ID","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Payment source removed successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"404":{"description":"Payment source not found"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Remove a payment source","tags":["Billing - Payment Methods"]}},"/v1/partners/invoices":{"get":{"description":"Retrieves all invoices for a given organization.","operationId":"listInvoices_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of invoices to return","schema":{"type":"number"}}],"responses":{"200":{"description":"List of invoices"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List invoices for an organization","tags":["Billing - Invoices"]}},"/v1/partners/invoices/{invoiceId}":{"get":{"description":"Retrieves a specific invoice by ID.","operationId":"getInvoice_2","parameters":[{"name":"invoiceId","required":true,"in":"path","description":"Invoice ID","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Invoice details"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"404":{"description":"Invoice not found"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Get invoice details","tags":["Billing - Invoices"]}},"/v1/partners/invoices/{invoiceId}/pdf":{"get":{"description":"Returns a URL to download the invoice as PDF.","operationId":"getInvoicePdfUrl_2","parameters":[{"name":"invoiceId","required":true,"in":"path","description":"Invoice ID","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Invoice PDF URL","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"404":{"description":"Invoice not found"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Get invoice PDF URL","tags":["Billing - Invoices"]}},"/v1/partners/billing/info":{"get":{"description":"Retrieves billing address and payment details for a given organization.","operationId":"get_getBillingInfo_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Billing information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingInfo_2"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Get billing information for an organization","tags":["Billing - Billing Information"]},"post":{"description":"Creates or updates billing address and payment details for an organization.","operationId":"upsertBillingInfo_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"External organization ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Billing information updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingInfo_2"}}}},"400":{"description":"Invalid request body"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"Create or update billing information","tags":["Billing - Billing Information"]}},"/v1/partners/organizations/{organizationId}/users":{"get":{"description":"Returns the users that belong to one of the partner's organizations (across organisation, workspace and partner memberships). Used to determine whether an organization has any users.","operationId":"listOrganizationUsers_2","parameters":[{"name":"organizationId","required":true,"in":"path","description":"External organization ID","schema":{"example":"org_88xy77","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":50,"default":10,"type":"number"}}],"responses":{"200":{"description":"Paginated list of the organization users.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page_2"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PartnerOrganizationUser_2"}}}}]}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Organization does not belong to the partner"},"422":{"description":"Unprocessable Entity - Invalid organization ID format"},"503":{"description":"Service Unavailable - the authorization server could not be reached, so the members of a migrated organization could not be determined (`details.code: 'authorization_server_unavailable'`). This is a temporary failure and NOT an empty result — retry the request."}},"security":[{"oauth2":[]},{"bearer":[]}],"summary":"List users of an organization","tags":["Organizations - Users"]}},"/v1/audit-log":{"get":{"description":"\n      Query audit logs with comprehensive filtering options.\n\n      **Filtering by user:** Use 'userIds' parameter with comma-separated user IDs or 'userEmails' parameter with comma-separated user emails.\n\n      **Filtering by domain:** Use 'domainIds' parameter with comma-separated domain IDs.\n\n      **Filtering by domain group:** Use 'domainGroupIds' parameter with comma-separated domain group IDs.\n\n      **Filtering by action category:** Use 'actionCategories' parameter with one or more of:\n      - DOMAINS: Domain-related actions\n      - DOMAIN_GROUPS: Domain group actions\n      - MANAGED_SERVICES: Managed DMARC, BIMI, MTA-STS, EasySPF actions\n      - USER_MANAGEMENT: User invitation, revocation, permission changes\n      - BILLING: Billing details, plan upgrades, cancellations\n      - SECURITY_FEATURES: MFA setup/removal\n      - ORGANIZATION_SECURITY: SSO setup, account termination\n      - LOGIN_AND_LOGOUT: Login, logout, device actions\n      - INTEGRATIONS: Integration connections, token generation\n      - ALERTING: Alert creation, modification, deletion\n      - RUF: Failure report actions\n      - RUA: Aggregate report actions\n      - PERSONAL_SETTINGS: Name changes\n      - REPORTING: Scheduled report actions, whitelabel, SMTP setup\n      - LABEL_MANAGEMENT: Label creation, modification, deletion\n\n      **Filtering by specific actions:** Use 'actions' parameter with specific AuditLogAction values.\n\n      **Date range:** Use 'startDate' and 'endDate' parameters (ISO 8601 format).\n    ","operationId":"getAuditLogs_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"Organization ID to query audit logs for","schema":{"type":"string"}},{"name":"userIds","required":false,"in":"query","description":"Filter by user IDs","schema":{"type":"array","items":{"type":"string"}}},{"name":"userEmails","required":false,"in":"query","description":"Filter by user emails","schema":{"type":"array","items":{"type":"string"}}},{"name":"domainIds","required":false,"in":"query","description":"Filter by domain IDs","schema":{"type":"array","items":{"type":"string"}}},{"name":"domainGroupIds","required":false,"in":"query","description":"Filter by domain group IDs","schema":{"type":"array","items":{"type":"string"}}},{"name":"actions","required":false,"in":"query","description":"Filter by specific actions","schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogAction_2"}}},{"name":"actionCategories","required":false,"in":"query","description":"Filter by action categories (DOMAINS, DOMAIN_GROUPS, MANAGED_SERVICES, USER_MANAGEMENT, BILLING, SECURITY_FEATURES, ORGANIZATION_SECURITY, LOGIN_AND_LOGOUT, INTEGRATIONS, ALERTING, RUF, RUA, PERSONAL_SETTINGS, REPORTING, LABEL_MANAGEMENT)","schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogActionCategory_2"}}},{"name":"entityTypes","required":false,"in":"query","description":"Filter by entity types","schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityType_2"}}},{"name":"startDate","required":false,"in":"query","description":"Start date for the date range filter","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date for the date range filter","schema":{"format":"date-time","type":"string"}},{"name":"sortDirection","required":false,"in":"query","description":"Sort direction for results","schema":{"$ref":"#/components/schemas/SortDirection_2"}},{"name":"page","required":false,"in":"query","description":"Page number (1-indexed)","schema":{"default":1,"type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page","schema":{"default":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Free-text search across user name/email, entity labels, and old/new value labels (case-insensitive).","schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully returned audit logs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogPageResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"oauth2":[]}],"summary":"Get audit logs with filters","tags":["Audit Log"]}},"/v1/audit-log/export":{"get":{"description":"\n      Export audit logs with the same filtering options as the query endpoint.\n      Returns audit logs as a CSV file.\n    ","operationId":"exportAuditLogs_2","parameters":[{"name":"organizationId","required":true,"in":"query","description":"Organization ID to export audit logs for","schema":{"type":"string"}},{"name":"userIds","required":false,"in":"query","description":"Filter by user IDs","schema":{"type":"array","items":{"type":"string"}}},{"name":"userEmails","required":false,"in":"query","description":"Filter by user emails","schema":{"type":"array","items":{"type":"string"}}},{"name":"domainIds","required":false,"in":"query","description":"Filter by domain IDs","schema":{"type":"array","items":{"type":"string"}}},{"name":"domainGroupIds","required":false,"in":"query","description":"Filter by domain group IDs","schema":{"type":"array","items":{"type":"string"}}},{"name":"actions","required":false,"in":"query","description":"Filter by specific actions","schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogAction_2"}}},{"name":"actionCategories","required":false,"in":"query","description":"Filter by action categories","schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogActionCategory_2"}}},{"name":"entityTypes","required":false,"in":"query","description":"Filter by entity types","schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityType_2"}}},{"name":"startDate","required":false,"in":"query","description":"Start date for the date range filter","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date for the date range filter","schema":{"format":"date-time","type":"string"}},{"name":"sortDirection","required":false,"in":"query","description":"Sort direction for results","schema":{"$ref":"#/components/schemas/SortDirection_2"}},{"name":"search","required":false,"in":"query","description":"Free-text search across user name/email, entity labels, and old/new value labels (case-insensitive).","schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully exported audit logs. Returns CSV content as text."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"oauth2":[]}],"summary":"Export audit logs to CSV","tags":["Audit Log"]}},"/v1/dns-lookup/a":{"get":{"description":"DNS lookup for a record type","operationId":"dnsLookupForA_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ARecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for a record","tags":["DNS Lookup"]}},"/v1/dns-lookup/a/batch":{"post":{"description":"DNS lookup for a record type for a list of domains","operationId":"dnsLookupBatchA_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ABatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ARecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for a record","tags":["DNS Lookup"]}},"/v1/dns-lookup/dns-intelligence/checks":{"get":{"description":"Returns the camelCase identifiers of every check the worker registry advertises. Use them as `checks[].check` in `POST /dns-intelligence/checks`.","operationId":"listDnsIntelligenceChecks_2","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DnsIntelligenceCheckName_2"}}}}}},"security":[{"bearer":[]}],"summary":"List available DNS Intelligence checks","tags":["DNS Intelligence"]},"post":{"description":"Issues a single NATS request running every check in `checks` against `domain` under one deadline, and returns one result per check. Verdicts and per-check worker errors are returned as data; only transport, protocol, and whole-request failures map to non-2xx.","operationId":"runDnsIntelligenceChecks_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunChecksRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunChecksResponse_2"}}}},"422":{"description":"Request validation failed."},"502":{"description":"Whole-request worker error or protocol decode failure."},"503":{"description":"NATS unreachable or no worker subscribed."},"504":{"description":"Request or worker deadline exceeded."}},"security":[{"bearer":[]}],"summary":"Run a batch of DNS Intelligence checks against a domain","tags":["DNS Intelligence"]}},"/v1/dns-lookup/dns-intelligence/profiles":{"get":{"description":"Returns the wire-format (snake_case) names of every profile operation the worker registry serves. Use them as `profiles[].profile` in `POST /dns-intelligence/profiles`. Unlike checks there are no camelCase aliases — profile operations are named only by the worker.","operationId":"listDnsIntelligenceProfiles_2","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DnsIntelligenceProfileName_2"}}}}}},"security":[{"bearer":[]}],"summary":"List available DNS Intelligence profile operations","tags":["DNS Intelligence"]},"post":{"description":"Issues a single NATS request running every operation in `profiles` against `domain` under one deadline, and returns one result per operation. Answers are observations with typed evidence — there is no verdict and no score. Per-operation worker errors are returned as data; only transport, protocol, and whole-request failures map to non-2xx.","operationId":"runDnsIntelligenceProfiles_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunProfilesRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunProfilesResponse_2"}}}},"422":{"description":"Request validation failed."},"502":{"description":"Whole-request worker error or protocol decode failure."},"503":{"description":"NATS unreachable or no worker subscribed."},"504":{"description":"Request or worker deadline exceeded."}},"security":[{"bearer":[]}],"summary":"Run a batch of profile operations against a domain","tags":["DNS Intelligence"]}},"/v1/dns-lookup/dns-intelligence/lookups":{"get":{"description":"Returns the camelCase record-type tokens the worker can resolve. Use one as `type` in `POST /dns-intelligence/lookups`.","operationId":"listDnsIntelligenceLookups_2","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"bearer":[]}],"summary":"List available DNS lookup types","tags":["DNS Intelligence"]},"post":{"description":"Resolves a single record type for `domain`. Recursive by default; pass `mode: authoritative` with `nsAddress` to query a specific nameserver. Worker errors map to non-2xx since a lookup is a single operation.","operationId":"runDnsIntelligenceLookup_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunLookupRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunLookupResponse_2"}}}},"400":{"description":"Unknown lookup type, or authoritative mode without nsAddress."},"422":{"description":"Worker reported INVALID_INPUT."},"502":{"description":"Worker INTERNAL or protocol decode failure."},"503":{"description":"NATS unreachable or no worker subscribed."},"504":{"description":"Request or worker deadline exceeded."}},"security":[{"bearer":[]}],"summary":"Perform a DNS lookup against a domain","tags":["DNS Intelligence"]}},"/v1/dns-lookup/aaaa":{"get":{"description":"DNS lookup for aaaa record type","operationId":"dnsLookupForAaaa_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AaaaRecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for aaaa record","tags":["DNS Lookup"]}},"/v1/dns-lookup/aaaa/batch":{"post":{"description":"DNS lookup for aaaa record type for a list of domains","operationId":"dnsLookupBatchAaaa_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AaaaBatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AaaaRecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for aaaa record","tags":["DNS Lookup"]}},"/v1/dns-lookup/ns":{"get":{"description":"DNS lookup for ns record type","operationId":"dnsLookupForNs_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NsRecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for ns record","tags":["DNS Lookup"]}},"/v1/dns-lookup/ns/batch":{"post":{"description":"DNS lookup for ns record type for a list of domains","operationId":"dnsLookupBatchNs_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NsBatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NsRecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for ns record","tags":["DNS Lookup"]}},"/v1/dns-lookup/soa":{"get":{"description":"DNS lookup for soa record type","operationId":"dnsLookupForSoa_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoaRecord_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for soa record","tags":["DNS Lookup"]}},"/v1/dns-lookup/soa/batch":{"post":{"description":"DNS lookup for soa record type for a list of domains","operationId":"dnsLookupBatchSoa_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoaBatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SoaRecord_2"}}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for soa record","tags":["DNS Lookup"]}},"/v1/dns-lookup/mx":{"get":{"description":"DNS lookup for mx record type","operationId":"dnsLookupForMx_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}},{"name":"skipAddresses","required":false,"in":"query","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MxRecords_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for mx record","tags":["DNS Lookup"]}},"/v1/dns-lookup/mx/batch":{"post":{"description":"DNS lookup for mx record type for a list of domains","operationId":"dnsLookupBatchMx_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MxBatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MxRecords_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for mx record","tags":["DNS Lookup"]}},"/v1/dns-lookup/ptr":{"get":{"description":"DNS lookup for ptr record type","operationId":"dnsLookupForPtr_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"ip","required":true,"in":"query","schema":{"example":"8.8.8.8","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PtrRecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for ptr record","tags":["DNS Lookup"]}},"/v1/dns-lookup/ptr/batch":{"post":{"description":"DNS lookup for ptr record type for a list of domains","operationId":"dnsLookupBatchPtr_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PtrBatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PtrRecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for ptr record","tags":["DNS Lookup"]}},"/v1/dns-lookup/txt":{"get":{"description":"DNS lookup for txt record type","operationId":"dnsLookupForTxt_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TxtRecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for txt record","tags":["DNS Lookup"]}},"/v1/dns-lookup/txt/batch":{"post":{"description":"DNS lookup for txt record type for a list of domains","operationId":"dnsLookupBatchTxt_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TxtBatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TxtRecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for txt record","tags":["DNS Lookup"]}},"/v1/dns-lookup/cname":{"get":{"description":"DNS lookup for cname record type","operationId":"dnsLookupForCname_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CnameRecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for cname record","tags":["DNS Lookup"]}},"/v1/dns-lookup/cname/batch":{"post":{"description":"DNS lookup for cname record type for a list of domains","operationId":"dnsLookupBatchCname_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CnameRecordBatchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CnameRecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for cname record","tags":["DNS Lookup"]}},"/v1/dns-lookup/dmarc/records-raw":{"post":{"description":"Get raw DMARC records for a domain","operationId":"getDmarcRecordsRaw_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecord_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Get raw DMARC records","tags":["DNS Lookup"]}},"/v1/dns-lookup/dmarc":{"get":{"description":"DNS lookup for dmarc record type","operationId":"dnsLookupForDmarc_2","parameters":[{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}},{"name":"recommendedRua","required":false,"in":"query","description":"Recommended RUA address for record from platform.","schema":{"example":"a1b2c3d4@rua.easydmarc.com","type":"string"}},{"name":"skipOurAddresses","required":false,"in":"query","schema":{"default":false,"example":true,"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordResponse_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for dmarc record","tags":["DNS Lookup"]}},"/v1/dns-lookup/dmarc/record-by-structure":{"post":{"description":"Get DMARC record by providing a structure object","operationId":"getDmarcRecordByStructure_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordByStructureRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Get DMARC record by structure","tags":["DNS Lookup"]}},"/v1/dns-lookup/dmarc/record-structure":{"post":{"description":"Get DMARC record structure for a domain","operationId":"getDmarcRecordStructure_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordStructureRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordStructureResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Get DMARC record structure","tags":["DNS Lookup"]}},"/v1/dns-lookup/dmarc/batch":{"post":{"description":"DNS lookup for dmarc record type for a list of domains","operationId":"dnsLookupBatchDmarc_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRecordsBatchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DmarcRecordResponse_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for dmarc record","tags":["DNS Lookup"]}},"/v1/dns-lookup/dmarc/verification-status-batch":{"post":{"operationId":"getVerificationStatusBatch_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmarcRuxBatchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainVerificationStatusResponse_2"}}}}}},"security":[{"bearer":[]}],"tags":["DNS Lookup"]}},"/v1/dns-lookup/dkim":{"get":{"description":"DNS lookup for dkim record type","operationId":"dnsLookupForDkim_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}},{"name":"selectors","required":true,"in":"query","schema":{"example":["s1","s2","google"],"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DkimRecordsResponse_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for dkim record","tags":["DNS Lookup"]}},"/v1/dns-lookup/dkim/records-by-selectors":{"post":{"description":"Get DKIM records by selectors with domain name in request body","operationId":"getDkimRecordsBySelectorsWithDomain_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DkimBySelectorsWthDomainRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DkimRecordsResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Get DKIM records by selectors with domain","tags":["DNS Lookup"]}},"/v1/dns-lookup/dkim/batch":{"post":{"description":"DNS lookup for dkim record type for a list of domains","operationId":"dnsLookupBatchDkim_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DkimBySelectorsWthDomainBatchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DkimRecordsResponse_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for dkim record","tags":["DNS Lookup"]}},"/v1/dns-lookup/spf":{"post":{"description":"DNS lookup for spf record type","operationId":"dnsLookupForSpf_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpfRecordRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpfRecordResponse_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for spf record","tags":["DNS Lookup"]}},"/v1/dns-lookup/spf/batch":{"post":{"description":"DNS lookup for spf record type for a list of domains","operationId":"dnsLookupBatchSpf_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpfRecordBatchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpfRecordResponse_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for spf record","tags":["DNS Lookup"]}},"/v1/dns-lookup/spf/lookup-result":{"post":{"description":"Get SPF record lookup result for a domain","operationId":"getSpfRecordLookupResult_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpfRecordLookupResultRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpfRecordLookupResult_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Get SPF record lookup result","tags":["DNS Lookup"]}},"/v1/dns-lookup/bimi":{"get":{"description":"DNS lookup for bimi record type","operationId":"dnsLookupForBimi_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BimiRecord_2"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for bimi record","tags":["DNS Lookup"]}},"/v1/dns-lookup/bimi/batch":{"post":{"description":"DNS lookup for bimi record type for a list of domains","operationId":"dnsLookupBatchBimi_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRecordsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BimiRecord_2"}}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup batch for bimi record","tags":["DNS Lookup"]}},"/v1/dns-lookup/bimi/validation":{"post":{"description":"Validate a BIMI record for a domain","operationId":"validateBimiRecord_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BimiRecord_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Validate BIMI record","tags":["DNS Lookup"]}},"/v1/dns-lookup/tls-rpt":{"get":{"description":"Resolve and validate the _smtp._tls TXT record for a domain","operationId":"dnsLookupForTlsRpt_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TlsRptLookupResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for TLS-RPT record","tags":["DNS Lookup"]}},"/v1/dns-lookup/tls-rpt/cname":{"get":{"description":"Resolve the _smtp._tls CNAME record for a domain and validate its target","operationId":"dnsLookupForTlsRptCname_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TlsRptLookupResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"CNAME lookup for TLS-RPT record","tags":["DNS Lookup"]}},"/v1/dns-lookup/tls-rpt/generate":{"post":{"description":"Generate a TLS-RPT TXT record for a domain and RUA list","operationId":"generateTlsRptRecord_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TlsRptGenerateRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TlsRptGenerateResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Generate TLS-RPT record","tags":["DNS Lookup"]}},"/v1/dns-lookup/mta-sts":{"get":{"description":"Resolve and validate the _mta-sts TXT record and the MTA-STS policy file for a domain","operationId":"dnsLookupForMtaSts_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MtaStsLookupResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"MTA-STS lookup","tags":["DNS Lookup"]}},"/v1/dns-lookup/mta-sts/cname":{"get":{"description":"Resolve the _mta-sts CNAME record for a domain and validate its target","operationId":"dnsLookupForMtaStsCname_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MtaStsCnameResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"CNAME lookup for MTA-STS record","tags":["DNS Lookup"]}},"/v1/dns-lookup/mta-sts/policy-cname":{"get":{"description":"Resolve the mta-sts policy-host CNAME record for a domain and validate its target","operationId":"dnsLookupForMtaStsPolicyCname_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MtaStsCnameResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"CNAME lookup for MTA-STS policy host","tags":["DNS Lookup"]}},"/v1/dns-lookup/mta-sts/mx-records":{"get":{"description":"Resolve, normalize, and sort the MX records used for MTA-STS policy generation","operationId":"dnsLookupForMtaStsMxRecords_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MtaStsMxRecordsResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"MX records for MTA-STS","tags":["DNS Lookup"]}},"/v1/dns-lookup/mta-sts/generate":{"post":{"description":"Generate the _mta-sts TXT record and policy file content for a domain","operationId":"generateMtaStsRecord_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MtaStsGenerateRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MtaStsGenerateResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Generate MTA-STS record and policy file","tags":["DNS Lookup"]}},"/v1/dns-lookup/aprf":{"get":{"description":"Resolve and validate the `<selector>._aprf._domainkey.<domain>` TXT record for a domain, or `_aprf._domainkey.<domain>` when no selector is given","operationId":"dnsLookupForAprf_2","parameters":[{"name":"maxAgeMs","required":false,"in":"query","description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache","schema":{"example":5000,"type":"number"}},{"name":"domain","required":true,"in":"query","schema":{"example":"example.com","type":"string"}},{"name":"selector","required":false,"in":"query","description":"DKIM selector the record is anchored to; omit to look up the record covering every selector","schema":{"example":"selector1","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AprfLookupResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for APRF record","tags":["DNS Lookup"]}},"/v1/dns-lookup/aprf/records-by-selectors":{"post":{"description":"Resolves and validates the APRF record for each given DKIM selector of a domain in one call, for callers that have not yet narrowed a domain down to a single selector","operationId":"dnsLookupForAprfBySelectors_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AprfRecordsBySelectorsRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AprfLookupResponse_2"}}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for APRF record across several selectors","tags":["DNS Lookup"]}},"/v1/dns-lookup/aprf/batch":{"post":{"description":"Resolves and validates the APRF record for each given selector of each given domain in one call, mirroring `POST /dkim/batch`","operationId":"dnsLookupForAprfBatch_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AprfRecordsBySelectorsBatchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AprfBatchLookupResult_2"}}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"DNS lookup for APRF record across several domains","tags":["DNS Lookup"]}},"/v1/dns-lookup/aprf/generate":{"post":{"description":"Generate an APRF TXT record for a domain, an optional DKIM selector, a RUA list and an optional SDI declaration","operationId":"generateAprfRecord_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AprfGenerateRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AprfGenerateResponse_2"}}}},"400":{"description":"Bad Request"},"422":{"description":"Unprocessable Entity"}},"security":[{"bearer":[]}],"summary":"Generate APRF record","tags":["DNS Lookup"]}},"/v1/dmarc/rua/reports":{"post":{"description":"Returns parsed DMARC RUA (aggregate) reports with comprehensive\nfiltering and field selection capabilities.\n\nFeatures:\n- Filter by date range, domain names, report type, and custom filters\n- Optional field selection (properties parameter)\n- Flexible sorting with multiple order fields\n- Pagination support (page/pageSize based)\n- Advanced filtering with operators (eq, ne, in, nin, gt, lt, etc.)\n\nAuthentication required. Response is paginated.","operationId":"getReportRawData_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRawDataRequest_2"}}}},"responses":{"200":{"description":"Returns raw report data","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DmarcReport_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get RUA reports raw data","tags":["Aggregate Reports"]}},"/v1/dmarc/rua/reports/{id}":{"get":{"description":"Retrieves a single parsed DMARC RUA (aggregate) report by its\nunique UUID identifier.\n\nReturns the complete report data including authentication results,\npolicy information, and source details. Authentication required.","operationId":"getReportById_2","parameters":[{"name":"id","required":true,"in":"path","description":"The UUID v4 of the DMARC report","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Returns report by ID","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DmarcReport_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"404":{"description":"Report not found"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get aggregate report by ID","tags":["Aggregate Reports"]}},"/v1/dmarc/rua/properties":{"post":{"description":"Retrieves distinct values for a specific DMARC report field\nwithin the specified criteria.\n\nFeatures:\n- Get unique values for any DMARC report field\n  (policy_domain, org_name, country_code, etc.)\n- Filter by date range, domains, and report types\n- Advanced filtering with operators\n- Pagination support with configurable page size (max 100)\n- Useful for populating dropdowns, filters, and data exploration\n\nAuthentication required. Results are paginated.","operationId":"getDistinctProperty_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyRequest_2"}}}},"responses":{"200":{"description":"Returns distinct property values","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DistinctPropertyValue_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get distinct property values","tags":["Aggregate Reports"]}},"/v1/dmarc/rua/aggregations":{"post":{"description":"Returns aggregated DMARC authentication and disposition\nstatistics within specified criteria.\n\nFeatures:\n- Aggregate by SPF/DKIM authentication results (pass/fail counts)\n- Aggregate by DMARC disposition (none/quarantine/reject counts)\n- Filter by date range, domains, and report types\n- Group results by any DMARC report field\n- Advanced filtering with operators\n- Flexible sorting with multiple order fields\n- Pagination support\n- Returns structured aggregation counts for analysis and reporting\n\nAuthentication required. Results are paginated.","operationId":"getAggregations_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AggregationRequest_2"}}}},"responses":{"200":{"description":"Returns aggregation statistics","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AggregatedData_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get DMARC aggregations data","tags":["Aggregate Reports"]}},"/v1/dmarc/rua/volume":{"post":{"description":"Retrieves aggregated email volume data for domains within a\nspecified date range.\n\nFeatures:\n- Group results by any field except 'count'\n  (policy_domain, org_name, source_ip, etc.)\n- Filter by authentication results, disposition, country, and more\n- Support for multiple report types and domains\n- Flexible sorting with multiple order fields\n- Pagination with configurable page size (max 100)\n- Returns partial DmarcReportDto objects focused on volume aggregation\n\nAuthentication required. Results are paginated.","operationId":"getVolumeData_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeRequest_2"}}}},"responses":{"200":{"description":"Returns aggregated volume data","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DmarcReport_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get RUA email volume data","tags":["Aggregate Reports"]}},"/v1/dmarc/rua/volume-history":{"post":{"description":"Returns volume data aggregated by time periods (day, week, month)\nwithin a specified date range.\n\nFeatures:\n- Time-series volume data with configurable periods (day/week/month)\n- Group results by any DMARC report field\n  (policy_domain, country_code, etc.)\n- Filter by authentication results, disposition, source, and more\n- Support for multiple report types and domains\n- Flexible sorting with multiple order fields\n- Pagination support\n- Each result includes volume count, date period, and grouping fields\n\nAuthentication required. Results are paginated.","operationId":"getReportsForPeriod_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportsForPeriodRequest_2"}}}},"responses":{"200":{"description":"Returns volume data by report period","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DmarcReportVolumePerPeriod_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get volume data by report period","tags":["Aggregate Reports"]}},"/v1/dmarc/rua/auth-pass-rates":{"post":{"description":"Returns DKIM and SPF authentication pass rates for domains\nwithin a specified date range.\n\nFeatures:\n- Calculate pass rates for SPF and DKIM authentication\n- Support for sender domains and parked domains\n  (at least one must be provided)\n- Filter by date range and custom filters\n- Pagination support with configurable page size (max 100)\n- Returns percentage-based pass rates for analysis and reporting\n- Useful for domain authentication performance monitoring\n\nAuthentication required. Results are paginated.","operationId":"getAuthenticationPassRate_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassRateDataRequest_2"}}}},"responses":{"200":{"description":"Returns authentication pass rates","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PassRate_2"}},"meta":{"$ref":"#/components/schemas/PageMeta_5"}}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation errors"}},"security":[{"bearer":[]}],"summary":"Get authentication pass rates","tags":["Aggregate Reports"]}},"/v1/workspaces":{"get":{"tags":["Workspaces"],"summary":"List an organization's workspaces","description":"The workspaces of one organization that the caller can reach, one page at a time. Pages are 1-based. Sorted by name (default) or creation time. Requires membership on the organization: a caller who reaches none of its workspaces gets an empty page, not an error. `memberCount` is omitted unless `includeMemberCount=true`: counting resolves every member of every workspace on the page, which is slow for large organizations. An organization that is not migrated to the workspace model (or does not exist) is 409 `workspaces_not_available`.","operationId":"listWorkspaces","parameters":[{"name":"includeMemberCount","in":"query","description":"When true, each workspace carries memberCount. Default false: counting walks every member of every workspace on the page and costs about a second per workspace with a large membership.","schema":{"default":false,"type":"boolean"}},{"name":"order","in":"query","description":"Sort direction: ASC (default) or DESC.","schema":{"default":"ASC","type":"string"}},{"name":"organizationId","in":"query","description":"The owning organization's objectId.","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"1-based page number (default 1).","schema":{"format":"int32","default":1,"type":"integer"}},{"name":"pageSize","in":"query","description":"Page size (default 20, max 100).","schema":{"format":"int32","default":20,"type":"integer"}},{"name":"sortBy","in":"query","description":"Sort key: name (default) or createdAt.","schema":{"default":"name","type":"string"}}],"responses":{"200":{"description":"A page of workspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspacePage"}}}},"400":{"description":"Validation error (organizationId, paging or sorting)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing/invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"`workspaces_not_available` — the organization is not migrated to the workspace model, or does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Workspaces"],"summary":"Create a workspace","description":"Create a workspace under an organization. The id is minted by the server. Requires action__workspace__create on the organization. The name must be unique among the organization's workspaces (case-insensitive, trimmed): a clash is 409 `name_conflict`. An organization that is not migrated to the workspace model (or does not exist) is 409 `workspaces_not_available`.","operationId":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceCreateRequest"}}}},"responses":{"201":{"description":"Workspace created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Validation error (organizationId and name required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing/invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"`name_conflict` — the name is already used in this organization; `workspaces_not_available` — the organization is not migrated, or does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/workspaces/{id}":{"get":{"tags":["Workspaces"],"summary":"Get a workspace","description":"One workspace by id. Answered through the caller's accessible tenants, so a workspace the caller does not reach is 404 exactly like one that does not exist.","operationId":"getWorkspace","parameters":[{"name":"id","in":"path","description":"Workspace id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"401":{"description":"Missing/invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Workspace not found, or not reachable by the caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Workspaces"],"summary":"Delete a workspace","description":"Delete a workspace and everything under it. Requires action__workspace__delete on the organization. The organization's last workspace cannot be deleted (409 `min_children`).","operationId":"deleteWorkspace","parameters":[{"name":"id","in":"path","description":"Workspace id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted; no body"},"401":{"description":"Missing/invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Workspace not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"`min_children` — the organization must keep at least one workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["Workspaces"],"summary":"Rename a workspace","description":"Rename a workspace. Requires action__details__update on the workspace. The new name must be unique among the organization's workspaces (case-insensitive, trimmed); re-submitting the current name is accepted.","operationId":"updateWorkspace","parameters":[{"name":"id","in":"path","description":"Workspace id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceUpdateRequest"}}}},"responses":{"200":{"description":"The renamed workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Validation error (name required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing/invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Workspace not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"`name_conflict` — the name is already used in this organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/workspaces/{id}/members":{"get":{"tags":["Workspaces"],"summary":"List a workspace's members","description":"The members whose role reaches the workspace — assigned on it, on a sub-tenant, or inherited from the organization or partner — one 1-based page at a time. Requires action__member__read on the workspace.","operationId":"listWorkspaceMembers","parameters":[{"name":"id","in":"path","description":"Workspace id","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"1-based page number (default 1).","schema":{"format":"int32","default":1,"type":"integer"}},{"name":"pageSize","in":"query","description":"Page size (default 20, max 100).","schema":{"format":"int32","default":20,"type":"integer"}}],"responses":{"200":{"description":"A page of members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMemberPage"}}}},"400":{"description":"Validation error (paging)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing/invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Workspace not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/sender/domains/credit/stats":{"get":{"description":"Getting Credit stats for the given `ownerId`.","operationId":"es_domains_get_credit_stats_2","parameters":[],"responses":{"200":{"description":"Credit stats has successfully been got.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditStats_2"}}}}},"security":[{"bearer":[]}],"summary":"Get Credit stats for Domain.","tags":["Domains"]}},"/v1/sender/domains/{domainName}":{"get":{"description":"Retrieves a `Domain` by its value (domain name) for the current organization.","operationId":"es_domains_get_domain_2","parameters":[{"name":"domainName","required":true,"in":"path","description":"The domain name (e.g., example.com).","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The `Domain` has been successfully retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain_3"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The `Domain` cannot be found."}},"security":[{"bearer":[]}],"summary":"Get Domain by Name.","tags":["Domains"]}},"/v1/sender/domains/{domainName}/verification-details":{"get":{"description":"Get verification details for a specific domain.","operationId":"es_domains_get_domain_verification_details_2","parameters":[{"name":"domainName","required":true,"in":"path","description":"Domain name","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful retrieval of verification details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVerificationDetailsResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get Domain Verification Details.","tags":["Domains"]}},"/v1/sender/domains/{domainName}/dmarc-records":{"get":{"description":"Get current and new DMARC records for a domain.","operationId":"es_domains_get_domain_dmarc_records_2","parameters":[{"name":"domainName","required":true,"in":"path","description":"Domain name","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful retrieval of DMARC records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainDmarcRecordsResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get Domain DMARC Records.","tags":["Domains"]}},"/v1/sender/domains/search":{"post":{"description":"Search `Domains` based on the given request body.","operationId":"es_domains_search_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSearchRequest_3"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainListPageResponse_2"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainListPageResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Search Domains.","tags":["Domains"]}},"/v1/sender/domains/count":{"post":{"description":"Count `Domains` based on the given filter.","operationId":"es_domains_count_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCountFilterRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Count Domains.","tags":["Domains"]}},"/v1/sender/domains/composite/search":{"post":{"description":"Returns paginated domains with verification status, integrations, subdomains, and email statistics. When `x-request-source: platform`, items are additionally enriched with DMARC data and the `enabledColumns` whitelist is honored — every column not in the list is stripped.","operationId":"es_domains_search_composite_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCompositeSearchRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainsSearchResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Search composite domains.","tags":["Domains"]}},"/v1/sender/domains/breakdown/{dimension}":{"post":{"description":"Returns one row per group of the chosen `:dimension`, aggregating only the caller’s `enabledColumns` to the single value the FE shows: a per-column count for categorical columns (unverified / Sending / None / Blocklisted / Inactive / Invalid), the average per verified root for engagement columns, sums for subdomains / alerts / total DMARC volume, and the volume-weighted DMARC compliance rate. Aggregates respect the same filter and advancedFilterConditions as composite/search and the fromDate/toDate range. Platform scope only — other sources receive 403.","operationId":"es_domains_get_domain_breakdown_2","parameters":[{"name":"dimension","required":true,"in":"path","schema":{"$ref":"#/components/schemas/DomainBreakdownDimension_2"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainBreakdownRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainBreakdownPageResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Group domains by a curated dimension.","tags":["Domains"]}},"/v1/sender/domains/dns-record-state":{"post":{"description":"Returns per-record-type validity distribution and DMARC policy distribution for the organization's domains (sourced from synced domain state). Omit `domainNames` to aggregate all the org's domains.","operationId":"es_domains_get_dns_record_state_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordStateRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordStateResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get DNS record state aggregation.","tags":["Domains"]}},"/v1/sender/domains/composite/download/csv":{"post":{"description":"Downloads every domain matching the filter as a CSV file. Respects `enabledColumns` to project the user-customized column set; ignores any FE table pagination — every matching row is included.","operationId":"es_domains_download_composite_domains_csv_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainsCompositeDownloadRequest_2"}}}},"responses":{"200":{"description":"CSV file containing one row per matching domain.","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Request is invalid.","content":{"text/csv":{"schema":{"$ref":"#/components/schemas/ApiException_2"}}}}},"security":[{"bearer":[]}],"summary":"Download Domains table as CSV","tags":["Domains"]}},"/v1/sender/domains/discoverable/search":{"post":{"description":"Search discoverable `Domains` from Domains Hub that are not yet in EasySender.","operationId":"es_domains_search_discoverable_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverableDomainSearchRequest_2"}}}},"responses":{"200":{"description":"Discoverable `Domains` returned.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PageResponse_2"},{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverableDomainGateway_2"}}}}]}}}},"201":{"description":""},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Search Discoverable Domains.","tags":["Domains"]}},"/v1/sender/domains/discoverable/count":{"get":{"description":"Count discoverable `Domains` from Domains Hub that are not yet in EasySender.","operationId":"es_domains_count_discoverable_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Count Discoverable Domains.","tags":["Domains"]}},"/v1/sender/domains/discoverable/filter-options":{"get":{"description":"Get available source filter options for discoverable domains.","operationId":"es_domains_get_discoverable_domain_source_filter_options_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverableDomainSourceOption_2"}}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get Discoverable Domain Source Filter Options.","tags":["Domains"]}},"/v1/sender/domains/charge-notice/dismiss":{"put":{"description":"Dismiss the domain addition billing notice (\"domains will be incorporated into your current month's billing\") for the organization. Persists for 1 year.","operationId":"es_domains_dismiss_charge_notice_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Charge notice dismissed successfully."},"204":{"description":""},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Dismiss Domain Addition Billing Notice.","tags":["Domains"]}},"/v1/sender/domains/charge-notice/dismissed":{"get":{"description":"Check whether the organization has dismissed the domain addition billing notice.","operationId":"es_domains_is_charge_notice_dismissed_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the dismissed status.","content":{"application/json":{"schema":{"type":"object","properties":{"dismissed":{"type":"boolean","description":"Whether the charge notice has been dismissed."}},"required":["dismissed"]}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Check Domain Addition Billing Notice Dismissed.","tags":["Domains"]}},"/v1/sender/domains/discoverable/add":{"post":{"description":"Add domains from the discoverable domains list to EasySender.","operationId":"es_domains_add_discoverable_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdditionBulkRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdditionBulkResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Add Discoverable Domains.","tags":["Domains"]}},"/v1/sender/domains/add":{"post":{"description":"Manually add a single domain to EasySender.","operationId":"es_domains_add_domain_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdditionRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdditionSingleResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Add Domain.","tags":["Domains"]}},"/v1/sender/domains/bulk":{"post":{"description":"Manually add one or more domains to EasySender.","operationId":"es_domains_add_domains_bulk_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdditionBulkRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdditionBulkResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Add Domains in Bulk.","tags":["Domains"]},"delete":{"description":"Delete domains in bulk by domain names.","operationId":"es_domains_delete_domains_bulk_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainDeletionBulkRequest_2"}}}},"responses":{"200":{"description":"Domains have been deleted."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Delete Domains in Bulk.","tags":["Domains"]}},"/v1/sender/domains/auto-verify":{"post":{"description":"Checks DNS integrations and verifies domains with active integration. Activates DMARC managed solutions for verified domains.","operationId":"es_domains_verify_domains_via_integration_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainIntegrationCheckRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainIntegrationCheckResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Verify Domains via DNS Integration.","tags":["Domains"]}},"/v1/sender/domains/move":{"post":{"description":"Move domains from the current workspace to another workspace.","operationId":"es_domains_move_domain_to_workspace_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainMoveToWorkspaceRequest_2"}}}},"responses":{"200":{"description":"Domains have been moved to the target workspace."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Move Domains to Workspace.","tags":["Domains"]}},"/v1/sender/domains/change-mode":{"post":{"description":"Changes the `mode` (sending/parked) of one or more `Domains`. Per-domain failures (not found, ESP-bound, etc.) do not abort the request — they appear as `succeeded: false` rows with a human-readable `reason`.","operationId":"es_domains_change_domain_mode_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainChangeModeRequestGateway_2"}}}},"responses":{"200":{"description":"The domain mode change has been processed (per-domain results).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceRegistryDomainChangeModeResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Change Domain Mode.","tags":["Domains"]}},"/v1/sender/domains/can-park":{"post":{"description":"Returns, per `Domain`, whether it can be parked. A domain cannot be parked when DMARC-compliant emails were detected from it during the current billing period.","operationId":"es_domains_can_park_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainParkEligibilityRequest_2"}}}},"responses":{"200":{"description":"Per-domain park eligibility.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainParkEligibilityResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Check Domains Park Eligibility.","tags":["Domains"]}},"/v1/sender/domains/sync-now":{"post":{"operationId":"es_domains_sync_now_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSyncNowRequestGateway_2"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceRegistryDomainSyncNowResponse_2"}}}},"400":{"description":"Empty `domainNames` list or request exceeds the per-request domain cap."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Trigger on-demand sync of all 7 sync_types for the given domains (omit `domainNames` to sync all).","tags":["Domains"]}},"/v1/sender/domains/sync/last-synced":{"get":{"description":"MIN(`last_synced`) over every applicable (root domain × sync_type) schedule row of the org — verified roots count all sync_types, unverified roots count only the public-DNS ones (verification, dns_records). `lastSynced` is `null` when no root domain has completed an applicable sync yet.","operationId":"es_domains_last_synced_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceRegistryDomainsLastSyncedResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Returns the oldest last-synced timestamp across the org root domains.","tags":["Domains"]}},"/v1/sender/domains/check-integration":{"post":{"description":"Checks which domains have active DNS integration and returns their DNS providers.","operationId":"es_domains_check_domains_integration_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainIntegrationCheckRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainIntegrationCheckResponse_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Check Domains DNS Integration.","tags":["Domains"]}},"/v1/sender/domains/verify":{"post":{"operationId":"es_domains_verify_domains_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVerifyRequest_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVerifyResponse_2"}}}}},"security":[{"bearer":[]}],"tags":["Domains"]}},"/v1/sender/domains/aggregate-report/verify":{"post":{"operationId":"es_domains_verify_aggregate_report_access_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AggregateReportAccessDomainVerifyRequest_2"}}}},"responses":{"200":{"description":"Returns a list of domains that have EasyDMARC configured.","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"bearer":[]}],"tags":["Domains"]}},"/v1/sender/domains/{domainName}/labels":{"get":{"description":"Searches all `Labels` assigned to the specified domain.","operationId":"es_domains_search_domain_labels_2","parameters":[{"name":"domainName","required":true,"in":"path","description":"The domain name (e.g., example.com).","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The `Labels` for the domain have been successfully retrieved.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Label_2"}}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The `Domain` cannot be found."}},"security":[{"bearer":[]}],"summary":"Search Domain Labels.","tags":["Domains"]},"post":{"description":"Assigns an existing `Label` to the specified domain.","operationId":"es_domains_assign_label_2","parameters":[{"name":"domainName","required":true,"in":"path","description":"The domain name (e.g., example.com).","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainLabelAssignmentRequest_2"}}}},"responses":{"201":{"description":"The `Label` has been successfully assigned to the domain."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The `Domain` or `Label` cannot be found."},"409":{"description":"The `Label` is already assigned to this domain."}},"security":[{"bearer":[]}],"summary":"Assign Label to Domain.","tags":["Domains"]}},"/v1/sender/domains/labels/bulk-assign":{"post":{"description":"Assigns all specified `Labels` to all specified domains. Skips already-existing assignments (idempotent).","operationId":"es_domains_bulk_assign_labels_to_domains_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainLabelBulkAssignmentRequest_2"}}}},"responses":{"200":{"description":"The `Labels` have been successfully assigned to the domains."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Bulk Assign Labels to Domains.","tags":["Domains"]}},"/v1/sender/domains/{domainName}/labels/{labelId}":{"delete":{"description":"Removes the assignment of a `Label` from the specified domain.","operationId":"es_domains_unassign_label_2","parameters":[{"name":"domainName","required":true,"in":"path","description":"The domain name (e.g., example.com).","schema":{"type":"string"}},{"name":"labelId","required":true,"in":"path","description":"The unique identifier of the label.","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The `Label` has been successfully unassigned from the domain."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The `Domain` or `Label` cannot be found."}},"security":[{"bearer":[]}],"summary":"Unassign Label from Domain.","tags":["Domains"]}},"/v1/sender/labels/search":{"post":{"description":"Searches `Labels` belonging to the authenticated organisation with pagination and optional query filter.","operationId":"es_labels_search_labels_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelSearchRequest_2"}}}},"responses":{"200":{"description":"The `Labels` have been successfully retrieved.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PageResponse_2"},{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Label_2"}}}}]}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Search Labels.","tags":["Domains"]}},"/v1/sender/labels":{"post":{"description":"Creates a new `Label` for the authenticated organisation.","operationId":"es_labels_create_label_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelCreationRequest_2"}}}},"responses":{"201":{"description":"The `Label` has been successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Label_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Create Label.","tags":["Domains"]}},"/v1/sender/labels/{labelId}":{"put":{"description":"Updates the name and/or colors of an existing `Label`.","operationId":"es_labels_update_label_2","parameters":[{"name":"labelId","required":true,"in":"path","description":"The unique identifier of the label.","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelUpdateRequest_2"}}}},"responses":{"200":{"description":"The `Label` has been successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Label_2"}}}},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The `Label` cannot be found."}},"security":[{"bearer":[]}],"summary":"Update Label.","tags":["Domains"]},"delete":{"description":"Deletes a `Label` and removes all its domain assignments.","operationId":"es_labels_delete_label_2","parameters":[{"name":"labelId","required":true,"in":"path","description":"The unique identifier of the label.","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The `Label` has been successfully deleted."},"400":{"description":"Request is invalid."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The `Label` cannot be found."}},"security":[{"bearer":[]}],"summary":"Delete Label.","tags":["Domains"]}},"/v1/sender/alerting/alerts":{"post":{"description":"Creates a new alert for the authenticated organization.","operationId":"es_alerting_unified_create_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAlertRequestGateway_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse_2"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Create an alert.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/search":{"post":{"description":"Searches alerts with filters for the authenticated organization.","operationId":"es_alerting_unified_search_alerts_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSearchRequestGateway_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Search alerts.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/by-ids":{"post":{"description":"Retrieves multiple alerts by their IDs.","operationId":"es_alerting_unified_find_by_ids_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkIdsRequestGateway_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertResponse_2"}}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get alerts by IDs.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/bulk-delete":{"post":{"description":"Deletes multiple alerts by their IDs.","operationId":"es_alerting_unified_bulk_delete_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkIdsRequestGateway_2"}}}},"responses":{"200":{"description":"The alerts have been deleted."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Bulk delete alerts.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/bulk-enable":{"post":{"description":"Enables multiple alerts by their IDs.","operationId":"es_alerting_unified_bulk_enable_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkIdsRequestGateway_2"}}}},"responses":{"200":{"description":"The alerts have been enabled."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Bulk enable alerts.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/bulk-disable":{"post":{"description":"Disables multiple alerts by their IDs.","operationId":"es_alerting_unified_bulk_disable_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkIdsRequestGateway_2"}}}},"responses":{"200":{"description":"The alerts have been disabled."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Bulk disable alerts.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/available-sources":{"get":{"description":"Retrieves all available domains for the organization with their selection state relative to an alert.","operationId":"es_alerting_unified_get_available_sources_2","parameters":[{"name":"category","required":false,"in":"query","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}},{"name":"alertId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Available sources retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableSourcesResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get available sources.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/available-blocklists":{"get":{"description":"Retrieves all available blocklist hosts for the organization (reputation-monitoring RBL list).","operationId":"es_alerting_unified_get_available_blocklists_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Available blocklists retrieved successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Host_2"}}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get available blocklists.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/{id}":{"put":{"description":"Modifies an existing alert by its ID.","operationId":"es_alerting_unified_modify_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyAlertRequestGateway_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert cannot be found."}},"security":[{"bearer":[]}],"summary":"Modify an alert.","tags":["Alerting"]},"delete":{"description":"Removes an alert by its ID.","operationId":"es_alerting_unified_remove_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The alert has been removed."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert cannot be found."}},"security":[{"bearer":[]}],"summary":"Remove an alert.","tags":["Alerting"]},"get":{"description":"Retrieves an alert by its ID.","operationId":"es_alerting_unified_find_by_id_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert cannot be found."}},"security":[{"bearer":[]}],"summary":"Get an alert.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/{id}/disable":{"post":{"description":"Disables an alert by its ID.","operationId":"es_alerting_unified_disable_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The alert has been disabled."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert cannot be found."}},"security":[{"bearer":[]}],"summary":"Disable an alert.","tags":["Alerting"]}},"/v1/sender/alerting/alerts/{id}/enable":{"post":{"description":"Enables an alert by its ID.","operationId":"es_alerting_unified_enable_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The alert has been enabled."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert cannot be found."}},"security":[{"bearer":[]}],"summary":"Enable an alert.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/search":{"post":{"description":"Searches alert logs with filters for the authenticated organization.","operationId":"es_alerting_unified_log_search_alert_logs_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertLogSearchRequestGateway_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Search alert logs.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/by-ids":{"post":{"description":"Retrieves multiple alert logs by their IDs.","operationId":"es_alerting_unified_log_find_by_ids_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkIdsRequestGateway_2"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertLogDetailResponse_2"}}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Get alert logs by IDs.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/bulk-delete":{"post":{"description":"Deletes multiple alert logs by their IDs.","operationId":"es_alerting_unified_log_bulk_delete_2","parameters":[{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkIdsRequestGateway_2"}}}},"responses":{"200":{"description":"The alert logs have been deleted."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Bulk delete alert logs.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/count":{"post":{"description":"Returns the total count of alert logs matching the filter.","operationId":"es_alerting_unified_log_count_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertLogCountResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Count alert logs.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/count/by-domain":{"post":{"description":"Returns the count of alert logs whose sources contain the given domain.","operationId":"es_alerting_unified_log_count_by_domain_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertLogCountByDomainResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Count alert logs by domain.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/digits":{"post":{"description":"Returns daily alert log counts for the last 7 days.","operationId":"es_alerting_unified_log_digits_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertLogDigitsResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Alert log digits.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/statistics":{"post":{"description":"Returns alert log counts grouped by source.","operationId":"es_alerting_unified_log_statistics_2","parameters":[{"name":"x-request-source","required":false,"in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","schema":{"type":"string","enum":["easysender","platform"]}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertLogSourceStat_2"}}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."}},"security":[{"bearer":[]}],"summary":"Alert log statistics.","tags":["Alerting"]}},"/v1/sender/alerting/alert-logs/{id}":{"delete":{"description":"Removes an alert log by its ID.","operationId":"es_alerting_unified_log_remove_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The alert log has been removed."},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert log cannot be found."}},"security":[{"bearer":[]}],"summary":"Remove an alert log.","tags":["Alerting"]},"get":{"description":"Retrieves an alert log by its ID.","operationId":"es_alerting_unified_log_find_by_id_2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"X-EasySender-OrganisationId","in":"header","description":"Scopes the request to the specified organisation.","required":false,"schema":{"type":"string"}},{"name":"X-EasySender-WorkspaceId","in":"header","description":"Scopes the request to the specified workspace within the organisation.","required":false,"schema":{"type":"string"}},{"name":"x-request-source","in":"header","description":"Caller-product scope. Required on Resource Registry domain add/delete and on read endpoints that source-isolate per product (search, count, composite/search). Accepted values: \"easysender\" or \"platform\" (case-insensitive).","required":false,"schema":{"type":"string","enum":["easysender","platform"]}},{"name":"workspaceIds","required":false,"in":"query","description":"Scopes the request to workspaces within the organisation.","schema":{"type":"array","items":{"type":"string"}}},{"name":"workspaceId","required":false,"in":"query","description":"Scopes the request to workspace within the organisation.","schema":{"type":"string"}}],"responses":{"200":{"description":"The alert log has been found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertLogDetailResponse_2"}}}},"401":{"description":"Request authentication is required."},"403":{"description":"Request is not authorized."},"404":{"description":"The alert log cannot be found."}},"security":[{"bearer":[]}],"summary":"Get an alert log.","tags":["Alerting"]}},"/v1/users/invite":{"post":{"description":"Invites one or more users to join an organization by sending them invitation emails. The invited users will receive an email with a link to accept the invitation and set up their account.\n\n**Features:**\n- Bulk user invitation support\n- Role assignment during invitation\n- Custom redirect URL after invitation acceptance\n- Automatic email notification to invited users\n\n**Permissions Required:**\n- Must have admin role in the organization\n- Must have user management permissions","operationId":"invite_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicInviteUsersV1_2"}}}},"responses":{"200":{"description":"User invitation(s) sent successfully. Invitation emails have been dispatched to all specified addresses."},"400":{"description":"Bad request - Invalid input parameters, malformed email addresses, or missing required fields"},"401":{"description":"Unauthorized - Missing or invalid authentication token"},"403":{"description":"Forbidden - Authenticated but lacking permission to invite users to this organization"}},"security":[{"oauth2":[]}],"summary":"Invite user","tags":["Users"]}},"/v1/users":{"post":{"description":"Creates one or more new users in the organization with specified roles and permissions. Unlike the invite endpoint, this creates users directly without requiring them to accept an invitation.\n\n**Key Differences from Invite:**\n- Creates users immediately without invitation flow\n- Users are active immediately\n- No email invitation is sent\n\n**Use Cases:**\n- Bulk user import from external systems\n- Automated user provisioning via integrations\n- Pre-creating accounts for known team members\n\n**Permissions Required:**\n- Must have admin role in the organization\n- Must have user creation permissions","operationId":"create_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUsers_2"}}}},"responses":{"201":{"description":"User(s) created successfully. Returns a mapping of email addresses to their newly created user IDs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUsersResponse_2"}}}},"400":{"description":"Bad request - Invalid input parameters, malformed email addresses, or missing required fields"},"401":{"description":"Unauthorized - Missing or invalid authentication token"},"403":{"description":"Forbidden - Authenticated but lacking permission to create users in this organization"},"409":{"description":"Conflict - One or more users already exist with the provided email addresses"}},"security":[{"oauth2":[]}],"summary":"Create user","tags":["Users"]}},"/v1/users/{userId}":{"get":{"description":"Retrieves detailed information about a specific user by their user ID within an organization context. Returns comprehensive user profile data including personal information, verification status, and avatar details.\n\n**Returned Information:**\n- User identification (ID, username, email)\n- Personal details (first name, last name)\n- Account status (email verification)\n- Profile customization (avatar, avatar color)\n\n**Permissions Required:**\n- Must have access to the specified organization\n- Must have user read permissions","operationId":"getUser_2","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","description":"The unique identifier (UUID) of the organization context. Used to verify the user's membership and access permissions.","schema":{"format":"uuid","example":"8a7b9c2d-1e3f-4a5b-9c8d-7e6f5a4b3c2d","type":"string"}}],"responses":{"200":{"description":"User information retrieved successfully. Returns complete user profile data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBasicInfo_2"}}}},"400":{"description":"Bad request - Invalid user ID or organization ID format"},"401":{"description":"Unauthorized - Missing or invalid authentication token"},"403":{"description":"Forbidden - Authenticated but lacking permission to view this user's information"},"404":{"description":"Not found - User does not exist or is not a member of the specified organization"}},"security":[{"oauth2":[]}],"summary":"Get User","tags":["Users"]}},"/v1/users/revoke-organization-access":{"post":{"description":"Revokes organization access for one or more specified users. This removes users from the organization and terminates their access to all organization resources.\n\n**Important Notes:**\n- This action is immediate and cannot be undone\n- Users will lose access to all organization resources\n- User accounts are not deleted, only their organization membership is removed\n- Users can be re-invited or re-added to the organization later\n\n**Permissions Required:**\n- Must have admin role in the organization\n- Cannot revoke access for yourself\n- Cannot revoke access for the organization owner","operationId":"post_revokeOrganizationAccess_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRevokeOrganizationAccessRequest_2"}}}},"responses":{"200":{"description":"Access revoked successfully. The specified users no longer have access to the organization."},"400":{"description":"Bad request - Invalid input parameters, malformed user IDs, or empty user list"},"401":{"description":"Unauthorized - Missing or invalid authentication token"},"403":{"description":"Forbidden - Authenticated but lacking permission to revoke access, or attempting to revoke own access"},"404":{"description":"Not found - One or more specified users or the organization does not exist"}},"security":[{"oauth2":[]}],"summary":"Revoke org access","tags":["Users"]}},"/v1/users/info":{"patch":{"description":"Updates personal information for a specific user. This endpoint allows modification of user profile details such as first name and last name.\n\n**Updatable Fields:**\n- First name\n- Last name\n\n**Non-Updatable Fields:**\n- Email address (requires separate verification flow)\n- User ID\n- Username\n- Email verification status\n\n**Permissions Required:**\n- Must be the user themselves, or\n- Must have admin role in the organization","operationId":"patch_changePersonalInfo_2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePersonalInfo_2"}}}},"responses":{"200":{"description":"User information updated successfully. Returns the updated user data."},"400":{"description":"Bad request - Invalid input parameters, empty update object, or validation errors"},"401":{"description":"Unauthorized - Missing or invalid authentication token"},"403":{"description":"Forbidden - Authenticated but lacking permission to update this user's information"},"404":{"description":"Not found - User with the specified ID does not exist"}},"security":[{"oauth2":[]}],"summary":"Update User Info","tags":["Users"]}}},"components":{"parameters":{"page":{"name":"page","in":"query","description":"Page number for pagination","required":false,"schema":{"type":"integer","minimum":1,"default":1}},"pageSize":{"name":"pageSize","in":"query","description":"Number of items per page","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},"organizationId":{"name":"organizationId","in":"query","description":"The ID of the organization owning the resources","required":true,"schema":{"$ref":"#/components/schemas/OrganizationIdField","example":"org_682b42c954f790f7230b3ad5"}}},"securitySchemes":{"BearerAuth":{"type":"http","description":"Generate your access token using authentica","scheme":"bearer","bearerFormat":"JWT"},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"responses":{"Conflict":{"description":"The request conflicts with the current state of the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"409","error":"ResourceConflict","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T17:45:00.000Z","details":{"message":"A resource with this identifier already exists","property":"id"}}}}}}},"NotFound":{"description":"The requested resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"404","error":"ResourceNotFound","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T17:50:00.000Z","details":{"message":"Resource of type 'User' with ID '12345' was not found","property":"id"}}}}}}},"Forbidden":{"description":"The client doesn't have sufficient permissions to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"403","error":"PermissionDenied","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T12:00:00.000Z","details":{"message":"You don't have permission to access this resource","property":"id"}}}}}}},"BadRequest":{"description":"Invalid request parameters. E.g. the required parameter is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"400","error":"ValidationError","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T12:30:00.000Z","details":{"message":"The request contains invalid parameters","property":"id"}}}}}}},"Unauthorized":{"description":"Authentication is required or credentials are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"401","error":"AuthenticationError","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T12:45:00.000Z","details":{"message":"Authentication required to access this resource","property":"id"}}}}}}},"TooManyRequests":{"description":"The client has sent too many requests in a given time period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"429","error":"RateLimitExceeded","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T13:00:00.000Z","details":{"message":"You have exceeded the rate limit for this API","property":"id"}}}}}}},"InternalServerError":{"description":"An unexpected error occurred on the server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"500","error":"InternalServerError","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T13:15:00.000Z","details":{"message":"An unexpected error occurred while processing your request","property":"id"}}}}}}},"UnprocessableEntity":{"description":"The server understands the content type but cannot process the data. \nE.g. the organization with the provided `organization_id` doesn't exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"statusCode":"422","error":"UnprocessableEntity","traceId":"abc-123-xyz-789","timestamp":"2025-10-14T13:30:00.000Z","details":{"message":"Unprocessable Entity","property":"id"}}}}}}}},"schemas":{"OrganizationIdField":{"type":"string","examples":["org_689ccbd84f05b4a824134330"]},"FilterCondition":{"description":"A filter condition supporting nested logical operators.","oneOf":[{"type":"object","additionalProperties":false,"properties":{"field":{"type":"string","examples":["policy"]},"value":{},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","in","nin","starts_with","ends_with","contains"]}},"required":["field","value","operator"]},{"type":"object","additionalProperties":false,"properties":{"operator":{"type":"string","enum":["AND","OR"]},"conditions":{"type":"array","items":{"$ref":"#/components/schemas/FilterCondition"}}},"required":["operator","conditions"]}]},"DomainOverview":{"type":"object","description":"Represents Domain Group","properties":{"domain":{"type":"string"},"policy":{"type":"string","enum":["none","missing","quarantine","reject"]},"spf":{"$ref":"#/components/schemas/RecordStatus"},"bimi":{"$ref":"#/components/schemas/RecordStatus"},"dmarc":{"$ref":"#/components/schemas/RecordStatus"},"dkim":{"$ref":"#/components/schemas/RecordStatus"},"domain_logo_url":{"type":"string"},"volume":{"type":"number"},"spf_pass_rate":{"type":"number"},"dkim_pass_rate":{"type":"number"},"dmarc_compliance":{"type":"object","properties":{"compliant":{"$ref":"#/components/schemas/Compliant"},"none_compliant":{"$ref":"#/components/schemas/Compliant"},"overall_compliance":{"type":"number"}}},"domain_group":{"type":"string"},"domain_verified":{"type":"boolean"},"type":{"$ref":"#/components/schemas/DomainType"}}},"RecordStatus":{"type":"string","enum":["no-record","warning","valid"],"description":"Validation status of the record."},"Compliant":{"type":"object","properties":{"trend":{"type":"string"},"value":{"type":"number"},"percentage":{"type":"number"}}},"DomainType":{"type":"string","enum":["sending","parked"],"description":"Either sending or parked"},"PaginationMeta":{"type":"object","title":"PaginationMeta","description":"Contains pagination and other meta data for the returned data","properties":{"total":{"type":"integer","description":"Total items","examples":[123]},"limit":{"type":"integer","description":"maximum number of items per page","examples":[20]},"page":{"type":"integer","description":"Page number for pagination","examples":[2]},"pageCount":{"type":"integer","description":"Total pages"},"hasPreviousPage":{"type":"boolean"},"hasNextPage":{"type":"boolean"}},"x-examples":{"Example 1":{"total":35,"limit":20,"page":1,"pageCount":2,"hasPreviousPage":false,"hasNextPage":true}}},"Domain":{"type":"object","title":"Domain","properties":{"domain":{"$ref":"#/components/schemas/DomainName"},"type":{"type":"string","enum":["sending","parked"]},"policy":{"type":"string","enum":["none","reject","missing","invalid","quarantine"]},"domainVerified":{"type":"boolean"},"logoUrl":{"type":"string","format":"uri","examples":["https://assets.easydmarc.com/favicons/2025-04/easydmarc_1744732732290.png"]},"domainGroup":{"type":"string","examples":["Default Group"]},"domainGroupId":{"type":"string","pattern":"^dmngrp_[a-f0-9]{24,}$","examples":["dmngrp_67457f052750d56713945475"]}},"x-examples":{"Example 1":{"domain":"easydmarc.com","domainGroup":"dmngrp_68267f052750d56713945475","domainVerified":false,"type":"sending","policy":"reject","logoUrl":"https://assets.easydmarc.com/favicons/2025-04/easydmarc_1744732732290.png"}}},"DomainName":{"type":"string","title":"DomainName","examples":["easydmarc.com"],"x-examples":{"Example 1":"domain1.com"}},"CreateDomainRequest":{"type":"object","properties":{"organizationId":{"$ref":"#/components/schemas/OrganizationIdField"},"domain":{"type":"string"},"groupId":{"type":"string"},"type":{"type":"string","enum":["sending","parked"]}},"required":["organizationId","domain","groupId","type"]},"DomainSearchRequest":{"type":"object","description":"Request payload for searching domains with filters and ordering.","properties":{"organizationId":{"$ref":"#/components/schemas/OrganizationIdField"},"page":{"type":"integer","description":"Page number for pagination.","default":1},"order":{"type":"array","description":"Ordering instructions for the search.","items":{"$ref":"#/components/schemas/Order"}},"filter":{"description":"Filter conditions for the search.","oneOf":[{"$ref":"#/components/schemas/FilterCondition"},{"type":"array","items":{"$ref":"#/components/schemas/FilterCondition"}}]},"domains":{"type":"array","description":"List of domains to filter.","items":{"type":"string"}},"pageSize":{"type":"integer","description":"Number of items per page.","default":50},"properties":{"type":"array","description":"List of domain properties to include in the response.","items":{"type":"string"}}}},"Order":{"type":"object","description":"Ordering instruction.","properties":{"orderBy":{"type":"string","description":"The field to order by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Order direction."}},"required":["orderBy","direction"]},"DomainGroup":{"type":"object","title":"DomainGroup","properties":{"id":{"type":"string","description":"Unique ID of the domain group"},"name":{"type":"string","description":"Domain group name"},"domains":{"type":"array","description":"List of Domains assigned to the Domain Group","items":{"type":"string"}}},"required":["id","name"],"x-examples":{"Success":{"id":"dmngrp_68267f052750d56713945475","name":"group1","domains":["domain1.com","domain2.com","linnea.net","anderson.biz"]}}},"CreateDomainGroupRequest":{"type":"object","title":"CreateDomainGroupRequest","properties":{"organizationId":{"$ref":"#/components/schemas/OrganizationIdField"},"name":{"type":"string"}},"required":["organizationId","name"]},"ErrorResponse":{"type":"object","properties":{"statusCode":{"type":"string","description":"Request status code","examples":["404"]},"error":{"type":"string","description":"Error code or type identifier","examples":["ResourceNotFound"]},"traceId":{"type":"string","description":"Request identifier for tracking and debugging","examples":["048ddaa9-0273-4aa9-9a26-5b1e28e2bbc0"]},"timestamp":{"type":"string","description":"Timestamp in ISO format","format":"date-time","examples":["2025-05-16T15:35:48.863Z"]},"details":{"type":"object","description":"Additional context-specific error details"}},"x-examples":{"Example 1":{"statusCode":"404","error":"ResourceNotFound","message":"Organization Not Found","traceId":"048ddaa9-0273-4aa9-9a26-5b1e28e2bbc0","timestamp":"2025-05-16T15:35:48.863Z","details":{"message":"Organization Not Found","error":"Not Found"}}}},"CreateWebhookRequest":{"type":"object","properties":{"name":{"type":"string","description":"Name of the webhook","examples":["Domain Events Webhook"]},"ownerId":{"type":"string","description":"Object Id of Owner of the webhook","examples":["partner_1234567890"]},"url":{"type":"string","description":"URL where webhook events will be sent","examples":["https://example.com/webhooks/easydmarc"]},"events":{"type":"array","description":"List of event names this webhook should subscribe to","examples":[["domain.created","domain.verified","report.received"]],"items":{"type":"string"}},"active":{"type":"boolean","description":"Whether the webhook is active","default":true,"examples":[true]}},"required":["name","ownerId","url","events"]},"Webhook":{"type":"object","properties":{"objectId":{"type":"string","description":"Unique identifier for the webhook","examples":["a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6"]},"name":{"type":"string","description":"Name of the webhook","examples":["Domain Events Webhook"]},"ownerId":{"type":"string","description":"Object Id of Owner of the webhook","examples":["partner_1234567890"]},"url":{"type":"string","description":"URL where webhook events will be sent","examples":["https://example.com/webhooks/easydmarc"]},"events":{"type":"array","description":"List of event names this webhook subscribes to","examples":[["domain.created","domain.verified","report.received"]],"items":{"type":"string"}},"active":{"type":"boolean","description":"Whether the webhook is active","examples":[true]},"createdAt":{"type":"string","description":"Timestamp when the webhook was created","format":"date-time","examples":["2023-01-01T00:00:00.000Z"]},"updatedAt":{"type":"string","description":"Timestamp when the webhook was last updated","format":"date-time","examples":["2023-01-01T00:00:00.000Z"]}},"required":["objectId","name","ownerId","url","events","active","createdAt","updatedAt"]},"UpdateWebhookRequest":{"type":"object","properties":{"name":{"type":"string","description":"Name of the webhook","examples":["Updated Domain Events Webhook"]},"url":{"type":"string","description":"URL where webhook events will be sent","examples":["https://new-example.com/webhooks/easydmarc"]},"events":{"type":"array","description":"List of event names this webhook should subscribe to","examples":[["domain.created","domain.verified","report.received"]],"items":{"type":"string"}},"active":{"type":"boolean","description":"Whether the webhook is active","examples":[false]}}},"WebhookDelivery":{"type":"object","properties":{"webhookObjectId":{"type":"number","description":"Object ID of the webhook that was triggered"},"eventName":{"type":"string","description":"Name of the event that triggered the webhook"},"payload":{"description":"Data sent with the webhook","allOf":[{"$ref":"#/components/schemas/WebhookEventData"}]},"attempts":{"type":"number","description":"Number of delivery attempts made"},"maxAttempts":{"type":"number","description":"Maximum number of delivery attempts allowed"},"nextRetryAt":{"type":"number","description":"Timestamp for next retry attempt"},"status":{"type":"string","enum":["failed","pending","success"],"description":"Current status of the delivery"},"statusCode":{"type":"number","description":"HTTP status code from the delivery attempt"},"error":{"type":"string","description":"Error message if delivery failed"},"deliveredAt":{"type":"string","description":"Timestamp when delivery was successful","format":"date-time"},"createdAt":{"type":"string","description":"Timestamp when delivery record was created","format":"date-time"}},"required":["webhookObjectId","eventName","payload","attempts","maxAttempts","status","createdAt"]},"WebhookEventData":{"type":"object","properties":{"data":{"examples":[{"domain":"example.com","verificationStatus":"verified"}],"allOf":[{"$ref":"#/components/schemas/DomainVerificationEvent"}]},"metadata":{"description":"Metadata of the webhook event","allOf":[{"$ref":"#/components/schemas/WebhookEventMetadata"}]}},"required":["data","metadata"]},"DomainVerificationEvent":{"type":"object","properties":{"domain":{"type":"string","description":"The domain that was verified","examples":["example.com"]},"verificationStatus":{"type":"string","description":"The verification status of the domain","examples":["verified"]}},"required":["domain","verificationStatus"]},"WebhookEventMetadata":{"type":"object","properties":{"eventName":{"type":"string","description":"Name of the event","examples":["domain.created"]},"ownerId":{"type":"string","description":"Object ID of the owner of the webhook","examples":["partner_1234567890"]}},"required":["eventName","ownerId"]},"ApiResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]},"PageMeta":{"type":"object","properties":{"total":{"type":"number","default":0},"page":{"type":"number","default":0},"pageCount":{"type":"number","default":0},"limit":{"type":"number","default":0},"hasPreviousPage":{"type":"boolean","default":false},"hasNextPage":{"type":"boolean","default":false}},"required":["total","page","pageCount","limit","hasPreviousPage","hasNextPage"]},"FailureReportListItem":{"type":"object","description":"Summary information for a failure report in list view","properties":{"id":{"type":"string","description":"Unique report identifier (MongoDB ObjectId)","examples":["507f1f77bcf86cd799439011"]},"domain":{"type":"string","description":"Domain name associated with the report","examples":["example.com"]},"sourceIp":{"type":"string","description":"Source IP address of the email sender","format":"ipv4","examples":["192.168.1.100"]},"ptr":{"type":"string","description":"PTR record for the source IP","examples":["mail.sender.com"]},"ptrGroup":{"type":"string","description":"PTR group (typically the root domain of the PTR record)","examples":["sender.com"]},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code","examples":["US"]},"reportDate":{"type":"string","description":"Date and time when the report was generated","format":"date-time","examples":["2024-01-15T10:30:00Z"]},"reporter":{"type":"string","description":"Domain of the entity that generated the report","examples":["reporter.com"]},"fromAddress":{"type":"string","description":"Email address in the From header","format":"email","examples":["sender@example.com"]},"toAddress":{"type":"string","description":"Email address in the To header","format":"email","examples":["recipient@example.com"]},"subject":{"type":"string","description":"Email subject line","examples":["Important Message"]},"attachmentCount":{"type":"integer","description":"Number of attachments in the email","examples":[2]}},"required":["id","domain","sourceIp","ptr","ptrGroup","countryCode","reportDate","reporter","fromAddress","toAddress","subject","attachmentCount"]},"FailureReportMetadata":{"type":"object","description":"Detailed metadata for a single failure report","properties":{"id":{"type":"string","description":"Unique report identifier (MongoDB ObjectId)","examples":["507f1f77bcf86cd799439011"]},"domain":{"type":"string","description":"Domain name associated with the report","examples":["example.com"]},"receivedAt":{"type":"string","description":"Timestamp when the report was received","format":"date-time","examples":["2024-01-15T10:30:00Z"]},"message":{"$ref":"#/components/schemas/MessageDetails"},"reportMetadata":{"$ref":"#/components/schemas/ReportMetadata"},"downloadLinks":{"$ref":"#/components/schemas/DownloadLinks"},"presignedDownloadLinks":{"$ref":"#/components/schemas/PresignedDownloadLinks"}},"required":["id","domain","receivedAt","message","reportMetadata"]},"MessageDetails":{"type":"object","description":"Details about the email message that failed DMARC authentication","properties":{"from":{"type":"string","description":"From email address","format":"email","examples":["sender@example.com"]},"to":{"type":"string","description":"To email address","format":"email","examples":["recipient@example.com"]},"subject":{"type":"string","description":"Email subject line","examples":["Important Message"]},"headerFrom":{"type":"string","description":"From address from email headers","format":"email","examples":["sender@example.com"]},"sourceIp":{"type":"string","description":"Source IP address","format":"ipv4","examples":["192.168.1.100"]},"ptr":{"type":"string","description":"PTR record for the source IP","examples":["mail.sender.com"]},"ptrGroup":{"type":"string","description":"PTR group (root domain)","examples":["sender.com"]},"emailBody":{"type":"string","description":"Email body content (included when 'emailBody' is in include parameter)","examples":["This is the email body content..."]},"rawHeaders":{"type":"string","description":"Raw email headers (included when 'rawHeaders' is in include parameter)","examples":["Received: from mail.sender.com by mx.example.com..."]},"extractedUrls":{"type":"array","description":"URLs extracted from the email body","examples":[["https://example.com/link1","https://example.com/link2"]],"items":{"type":"string","format":"uri"}},"attachments":{"type":"array","description":"Email attachments metadata","items":{"$ref":"#/components/schemas/AttachmentMetadata"}}},"required":["from","to","subject","headerFrom","sourceIp","ptr","ptrGroup"]},"AttachmentMetadata":{"type":"object","description":"Metadata for an email attachment","properties":{"cloud":{"type":"string","description":"Cloud storage provider","examples":["s3"]},"bucket":{"type":"string","description":"Storage bucket name","examples":["ruf-reports"]},"key":{"type":"string","description":"Storage key/path for the attachment","examples":["attachments/507f1f77bcf86cd799439011/0/document.pdf"]},"filename":{"type":"string","description":"Original filename of the attachment","examples":["document.pdf"]},"contentType":{"type":"string","description":"MIME type of the attachment","examples":["application/pdf"]},"size":{"type":"integer","description":"File size in bytes","examples":[102400]}},"required":["cloud","bucket","key"]},"ReportMetadata":{"type":"object","description":"Metadata about the DMARC failure report itself","properties":{"reportId":{"type":"string","description":"Unique identifier for the report","examples":["report-12345"]},"reporterDomain":{"type":"string","description":"Domain of the reporting entity","examples":["reporter.com"]},"reportedBy":{"type":"string","description":"Email address of the reporting entity","format":"email","examples":["noreply@reporter.com"]},"reportSubject":{"type":"string","description":"Subject line of the report email","examples":["DMARC Failure Report"]},"reportEmailBody":{"type":"string","description":"Body content of the report email","examples":["This message failed DMARC authentication..."]},"reportDate":{"type":"string","description":"Date and time when the report was generated","format":"date-time","examples":["2024-01-15T10:30:00Z"]},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code","examples":["US"]},"location":{"$ref":"#/components/schemas/GeoLocation"}},"required":["reportId","reporterDomain","reportedBy","reportSubject","reportDate","countryCode"]},"GeoLocation":{"type":"object","description":"Geographic location coordinates","properties":{"coordinates":{"type":"array","description":"[longitude, latitude] coordinates","minItems":2,"maxItems":2,"examples":[[-74.006,40.7128]],"items":{"type":"number"}}},"required":["coordinates"]},"DownloadLinks":{"type":"object","description":"Download links for report files (API URLs, not presigned)","properties":{"emlFile":{"type":"string","description":"API endpoint URL to download the EML file","format":"uri","examples":["https://api2.easydmarc.com/v1.0/dmarc/failure-reports/reports/507f1f77bcf86cd799439011/eml?organizationId=org_6464de38ebf5b013b1928408"]},"attachments":{"type":"array","description":"Download links for individual attachments","items":{"$ref":"#/components/schemas/AttachmentDownloadLink"}},"allAttachmentsZip":{"type":"string","description":"API endpoint URL to download all attachments as a ZIP archive","format":"uri","examples":["https://api2.easydmarc.com/v1.0/dmarc/failure-reports/reports/507f1f77bcf86cd799439011/attachments/all?organizationId=org_6464de38ebf5b013b1928408"]}}},"AttachmentDownloadLink":{"type":"object","description":"Download link for a single attachment","properties":{"cloud":{"type":"string","description":"Cloud storage provider","examples":["s3"]},"bucket":{"type":"string","description":"Storage bucket name","examples":["ruf-reports"]},"key":{"type":"string","description":"Storage key/path","examples":["attachments/507f1f77bcf86cd799439011/0/document.pdf"]},"downloadUrl":{"type":"string","description":"API endpoint URL to download the attachment","format":"uri","examples":["https://api2.easydmarc.com/v1.0/dmarc/failure-reports/reports/507f1f77bcf86cd799439011/attachments/0?organizationId=org_6464de38ebf5b013b1928408"]}},"required":["cloud","bucket","key","downloadUrl"]},"PresignedDownloadLinks":{"type":"object","description":"Presigned download links for report files (direct S3 URLs with expiration)","properties":{"emlFile":{"type":"string","description":"Presigned S3 URL for the EML file","format":"uri","examples":["https://s3.amazonaws.com/ruf-reports/eml/report-12345?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=..."]},"attachments":{"type":"array","description":"Presigned download links for individual attachments","items":{"$ref":"#/components/schemas/PresignedAttachmentLink"}},"allAttachmentsZip":{"type":"string","description":"Presigned S3 URL for ZIP archive of all attachments","format":"uri","examples":["https://s3.amazonaws.com/ruf-reports/zip/report-12345/all-attachments.zip?X-Amz-Algorithm=..."]}}},"PresignedAttachmentLink":{"type":"object","description":"Presigned download link for a single attachment","properties":{"cloud":{"type":"string","description":"Cloud storage provider","examples":["s3"]},"bucket":{"type":"string","description":"Storage bucket name","examples":["ruf-reports"]},"key":{"type":"string","description":"Storage key/path","examples":["attachments/507f1f77bcf86cd799439011/0/document.pdf"]},"presignedUrl":{"type":"string","description":"Presigned S3 URL for direct download","format":"uri","examples":["https://s3.amazonaws.com/ruf-reports/attachments/507f1f77bcf86cd799439011/0/document.pdf?X-Amz-Algorithm=..."]},"expiresAt":{"type":"string","description":"ISO 8601 timestamp when the presigned URL expires","format":"date-time","examples":["2024-01-15T10:35:00Z"]}},"required":["cloud","bucket","key","presignedUrl","expiresAt"]},"DownloadUrlResponse":{"type":"object","description":"Response containing a presigned download URL","properties":{"data":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Presigned download URL","format":"uri","examples":["https://s3.amazonaws.com/ruf-reports/ruf-eml/report-12345?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=..."]},"expiresAt":{"type":"string","description":"ISO 8601 timestamp when the URL expires","format":"date-time","examples":["2024-01-15T10:35:00Z"]}},"required":["downloadUrl","expiresAt"]}},"required":["data"]},"FailureReportsAggregates":{"type":"object","description":"Aggregated statistics for failure reports","properties":{"dimensions":{"type":"array","description":"Aggregated data organized by requested dimensions","items":{"$ref":"#/components/schemas/AggregateDimension"}},"summary":{"$ref":"#/components/schemas/AggregateSummary"}},"required":["dimensions","summary"]},"AggregateDimension":{"type":"object","description":"Aggregated data for a single dimension","properties":{"dimension":{"type":"string","enum":["reporter","ptrGroup","countryCode","domain"],"description":"Dimension name","examples":["reporter"]},"buckets":{"type":"array","description":"Buckets containing aggregated counts","items":{"$ref":"#/components/schemas/AggregateBucket"}}},"required":["dimension","buckets"]},"AggregateBucket":{"type":"object","description":"A single bucket in aggregated data","properties":{"key":{"type":"string","description":"Bucket key (the dimension value)","examples":["reporter1.com"]},"count":{"type":"integer","description":"Number of reports in this bucket","examples":[150]}},"required":["key","count"]},"AggregateSummary":{"type":"object","description":"Summary statistics for the aggregated data","properties":{"totalReports":{"type":"integer","description":"Total number of reports matching the filters","examples":[284]},"uniqueDomains":{"type":"integer","description":"Number of unique domains in the results","examples":[5]},"uniqueReporters":{"type":"integer","description":"Number of unique reporter domains","examples":[12]},"dateRange":{"type":"object","description":"Date range for the aggregated data","properties":{"from":{"type":"string","description":"Start date of the range","format":"date-time","examples":["2024-01-01T00:00:00Z"]},"to":{"type":"string","description":"End date of the range","format":"date-time","examples":["2024-01-31T23:59:59Z"]}},"required":["from","to"]}},"required":["totalReports","uniqueDomains","uniqueReporters","dateRange"]},"MagicLinkRequest_2":{"type":"object","properties":{"userId":{"type":"string","description":"Unique identifier of the user.","example":"c99cf9f3-f946-4707-9984-a19bf2d57841"},"organizationId":{"type":"string","description":"Organization identifier associated with the user.","example":"org_0987654321"},"redirectUri":{"type":"string","description":"URI to redirect after login.","example":"https://account-console.easydmarc.com","format":"uri"}},"required":["userId","organizationId"]},"MagicLink_2":{"type":"object","properties":{"url":{"type":"string","description":"Generated magic link URL.","example":"https://uac.easydmarc.com/...","format":"uri"},"expiringAt":{"type":"string","description":"Expiration time of the generated link.","example":"2025-10-16T12:34:56Z","format":"date-time"}},"required":["url","expiringAt"]},"VendorEnum_2":{"type":"string","enum":["stripe_eu","stripe","chargebee","chargebee_eu","azure","huawei"]},"BillingInfo_2":{"type":"object","properties":{"name":{"type":"string","nullable":true},"email":{"type":"string","nullable":true},"billingEmail":{"type":"string","nullable":true},"addressLine":{"type":"string","nullable":true},"addressCountry":{"type":"string","nullable":true},"addressCity":{"type":"string","nullable":true},"addressState":{"type":"string","nullable":true},"addressZip":{"type":"string","nullable":true},"misc":{"type":"string","nullable":true},"customerVendor":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/VendorEnum_2"}]},"customerId":{"type":"string","nullable":true},"billingDay":{"type":"number","nullable":true},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["name","email","billingEmail","addressLine","addressCountry","addressCity","addressState","addressZip","misc","customerVendor","customerId","billingDay","createdAt","updatedAt"]},"PartnerType_2":{"type":"string","enum":["standard","reseller"]},"PageMeta_3":{"type":"object","properties":{"page":{"type":"number","description":"Current page number","example":1},"limit":{"type":"number","description":"Maximum number of items per page","example":20},"total":{"type":"number","description":"Total number of items across all pages","example":123},"pageCount":{"type":"number","description":"Total number of pages","example":7},"hasPreviousPage":{"type":"boolean","description":"Whether there is a previous page available","example":false},"hasNextPage":{"type":"boolean","description":"Whether there is a next page available","example":true}},"required":["page","limit","total","pageCount","hasPreviousPage","hasNextPage"]},"Page_2":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"$ref":"#/components/schemas/PageMeta_3"}},"required":["data","meta"]},"OrderEnum_2":{"type":"string","enum":["ASC","DESC"]},"CreateOrganization_2":{"type":"object","properties":{"name":{"type":"string","maxLength":128,"description":"Name of the organization","example":"Acme Inc."},"countryCode":{"type":"string","maxLength":2,"description":"Country code of the organization in ISO 3166-1 alpha-2 format","example":"US","minLength":2}},"required":["name"]},"ShortOrganization_2":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the organization","example":"org_68231dcfeb8e9f092a052b88"},"name":{"type":"string","description":"Name of the organization","example":"Acme Inc."},"createdAt":{"format":"date-time","type":"string","description":"Timestamp when the organization was created","example":"2025-05-13T10:24:15.408Z"},"updatedAt":{"format":"date-time","type":"string","description":"Timestamp when the organization was last updated","example":"2025-05-17T11:35:15.567Z"},"ownerUserId":{"type":"string","description":"User objectId of the organization owner","example":"user_68231dcfeb8e9f092a052b88","nullable":true}},"required":["id","name","createdAt","updatedAt","ownerUserId"]},"UpdateOrganization_2":{"type":"object","properties":{"name":{"type":"string","maxLength":128,"description":"New name of the organization","example":"Acme Inc. Updated"},"partnerId":{"type":"string","description":"Partner object ID to link to this organization","example":"partner_abc123"}},"required":["name"]},"PaymentSourceCreateRequest_2":{"type":"object","properties":{}},"PlanFeatures_2":{"type":"object","properties":{"domain_count":{"type":"number","description":"Maximum number of domains that can be monitored under this plan","example":10},"email_volume_count":{"type":"number","description":"Maximum email volume count allowed per month (in millions or total emails)","example":1000000},"verification_count":{"type":"number","description":"Number of email verifications available per month","example":500},"data_retention_days":{"type":"number","description":"Number of days the user can look back when viewing data. Does not affect data retention — only limits the visible date range (e.g., 30, 90, 365)","example":90},"public_api":{"type":"boolean","description":"Whether public API access is enabled for programmatic integration","example":true},"bimi_reporting":{"type":"boolean","description":"Whether BIMI reporting is enabled","example":true},"saml":{"type":"boolean","description":"Whether SAML-based Single Sign-On authentication is available","example":true},"alerting":{"type":"boolean","description":"Whether email alerting and notification features are enabled","example":true},"api_access":{"type":"boolean","description":"Whether API access is granted for this plan (legacy field, prefer public_api)","example":true},"reputation_monitoring":{"type":"boolean","description":"Whether reputation monitoring and blacklist checking features are available","example":true},"mailbox_count":{"type":"number","description":"Number of mailboxes that can be configured for inbox placement testing","example":5},"inbox_placement_test_count":{"type":"number","description":"Number of inbox placement tests that can be run per month","example":50},"email_preview_count":{"type":"number","description":"Number of email previews available per month","example":200},"easy_spf":{"type":"boolean","description":"Whether EasySPF feature for simplified SPF record management is enabled","example":true},"managed_mta_sts":{"type":"boolean","description":"Whether Managed MTA-STS is enabled","example":true},"tls_reports":{"type":"boolean","description":"Whether TLS reporting (TLS-RPT) is enabled","example":true},"domain_access":{"type":"boolean","description":"Whether domain-level access control and permissions are available","example":true},"audit_log":{"type":"boolean","description":"Whether audit logging functionality for compliance and security tracking is enabled","example":true},"audit_log_duration":{"type":"number","description":"Duration in days that audit logs are retained (e.g., 30, 90, 365)","example":365},"email_investigation":{"type":"boolean","description":"Whether email investigation and forensics features are available","example":true},"touchpoint":{"type":"boolean","description":"Whether touchpoint tracking and engagement analytics are available","example":true},"touchpoint_limit":{"type":"number","description":"Touchpoint usage limit","example":10000},"email_investigation_report_count":{"type":"number","description":"Number of email investigations allowed"},"custom_dashboards":{"type":"boolean","description":"Whether custom dashboards feature is enabled"},"reputation_intelligence_integrations":{"type":"boolean","description":"Whether reputation intelligence integrations feature is enabled"},"email_preview_suite":{"type":"boolean","description":"Whether email preview suite feature is enabled"},"alert_management":{"type":"boolean","description":"Whether alert management feature is enabled"},"sso":{"type":"boolean","description":"Whether SSO (Single Sign-On) feature is enabled"},"esp_integrations":{"type":"boolean","description":"Whether ESP integrations (Amazon SES, SendGrid, Mailgun) are enabled"},"managed_dmarc":{"type":"boolean","description":"Whether Managed DMARC is enabled"},"managed_dkim":{"type":"boolean","description":"Whether Managed DKIM is enabled"},"managed_bimi":{"type":"boolean","description":"Whether Managed BIMI is enabled"},"aggregate_reports":{"type":"boolean","description":"Whether DMARC aggregate (RUA) reports are enabled"},"failure_reports":{"type":"boolean","description":"Whether DMARC failure (RUF) reports are enabled"},"uptime_monitoring":{"type":"boolean","description":"Whether uptime monitoring is enabled"},"dns_monitoring":{"type":"boolean","description":"Whether DNS monitoring is enabled"},"vmc_monitoring":{"type":"boolean","description":"Whether VMC monitoring is enabled"},"ssl_certificate_monitoring":{"type":"boolean","description":"Whether SSL certificate monitoring is enabled"},"dns_management":{"type":"boolean","description":"Whether DNS management is enabled"},"dns_insights":{"type":"boolean","description":"Whether DNS insights are enabled"},"sender_reporting":{"type":"boolean","description":"Whether sender reporting is enabled"},"threat_intelligence":{"type":"boolean","description":"Whether threat intelligence is enabled"},"blocklist_monitoring":{"type":"boolean","description":"Whether blocklist monitoring is enabled"},"reputation_intelligence":{"type":"boolean","description":"Whether reputation intelligence is enabled"},"ai_assistant":{"type":"boolean","description":"Whether the AI assistant is enabled"},"event_logs":{"type":"boolean","description":"Whether event logs are enabled"},"ip_safelisting":{"type":"boolean","description":"Whether IP safelisting is enabled"},"dns_integrations":{"type":"boolean","description":"Whether DNS provider integrations are enabled"},"messaging_integrations":{"type":"boolean","description":"Whether messaging (e.g. Slack, Teams) integrations are enabled"},"mailgun_integration":{"type":"boolean","description":"Whether the Mailgun integration is enabled"},"sendgrid_integration":{"type":"boolean","description":"Whether the SendGrid integration is enabled"},"amazon_ses_integration":{"type":"boolean","description":"Whether the Amazon SES integration is enabled"}}},"PlanFeaturesV2_2":{"type":"object","properties":{"domainCount":{"type":"number","description":"Number of domains included in the plan","example":2},"emailVolumeCount":{"type":"number","description":"Monthly email volume limit","example":100000},"verificationCount":{"type":"number","description":"Number of verifications allowed"},"dataRetentionDays":{"type":"number","description":"Data retention period in days"},"publicApi":{"type":"boolean","description":"Whether public API access is enabled"},"bimiReporting":{"type":"boolean","description":"Whether BIMI reporting is enabled"},"saml":{"type":"boolean","description":"Whether SAML SSO is enabled"},"alerting":{"type":"boolean","description":"Whether alerting features are enabled"},"apiAccess":{"type":"boolean","description":"Whether API access is enabled"},"reputationMonitoring":{"type":"boolean","description":"Whether reputation monitoring is enabled"},"mailboxCount":{"type":"number","description":"Number of mailboxes included"},"inboxPlacementTestCount":{"type":"number","description":"Number of inbox placement tests allowed"},"easySpf":{"type":"boolean","description":"Whether EasySPF feature is enabled"},"domainAccess":{"type":"boolean","description":"Whether domain access feature is enabled"},"auditLog":{"type":"boolean","description":"Whether audit log feature is enabled"},"auditLogDuration":{"type":"number","description":"Audit log retention duration in days"},"emailInvestigation":{"type":"boolean","description":"Whether email investigation feature is enabled"},"touchpoint":{"type":"boolean","description":"Whether touchpoint feature is enabled"},"touchpointLimit":{"type":"number","description":"Touchpoint usage limit"},"espIntegrations":{"type":"boolean","description":"Whether ESP integrations (Amazon SES, SendGrid, Mailgun) are enabled"}}},"PriceV2_2":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the price","example":"price_plus_monthly_001"},"name":{"type":"string","description":"The display name of the price","example":"Plus — Monthly"},"amount":{"type":"number","description":"The price amount","example":99},"currency":{"type":"string","description":"ISO 4217 currency code","example":"USD","enum":["USD","EUR","GBP"]},"frequency":{"type":"string","description":"Billing frequency (month or year)","example":"month","enum":["m","y","d"]},"minimumBillableItems":{"type":"object","description":"Minimum number of billable items required for this price. Used for MSP/volume-based pricing.","example":10,"nullable":true},"billingCycles":{"type":"object","description":"Number of billing cycles for the price. If null, the subscription renews indefinitely.","example":1,"nullable":true},"billingPeriod":{"type":"number","description":"The billing period value combined with frequency. For example, 1 with frequency \"month\" means monthly billing.","example":1},"deprecated":{"type":"boolean","description":"Indicates whether the price has been soft-deleted (deprecated). Deprecated prices remain assigned to the partner and are still returned, but should no longer be offered for new subscriptions.","example":false},"createdAt":{"format":"date-time","type":"string","description":"Timestamp when the price was created","example":"2023-03-08T08:37:05.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Timestamp when the price was last updated","example":"2023-03-08T08:37:05.000Z"}},"required":["id","name","amount","currency","frequency","billingPeriod","deprecated","createdAt","updatedAt"]},"PlanV2_2":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the plan","example":"plan_plus"},"name":{"type":"string","description":"The display name of the plan","example":"Plus"},"features":{"description":"The feature set of the plan including domain limits, email volume, and feature flags","allOf":[{"$ref":"#/components/schemas/PlanFeaturesV2_2"}]},"prices":{"description":"The list of prices associated with the plan. Each price represents a different billing cycle (monthly, yearly) with its amount, currency, and billing period.","type":"array","items":{"$ref":"#/components/schemas/PriceV2_2"}},"createdAt":{"format":"date-time","type":"string","description":"Timestamp when the plan was created","example":"2023-03-08T08:37:05.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Timestamp when the plan was last updated","example":"2023-03-08T08:37:05.000Z"}},"required":["id","name","features","prices","createdAt","updatedAt"]},"PartnerProfileV2_2":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the partner","example":"partner_123"},"name":{"type":"string","description":"The display name of the partner","example":"Acme Security"},"partnerType":{"description":"Billing-management mode of the partner. RESELLER partners manage their customers’ plans themselves; STANDARD partners may only provision Trial (0 cost) plans and the end customer upgrades in EasyDMARC.","example":"reseller","allOf":[{"$ref":"#/components/schemas/PartnerType_2"}]}},"required":["id","name","partnerType"]},"SubscriptionItemV2_2":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the subscription item","example":"si_aa11"},"quantity":{"type":"number","description":"The quantity of the subscription item. Default is 1, mainly used for MSP prices.","example":1,"minimum":1},"features":{"description":"The feature set of the subscription item. This is denormalized from the plan features but can be changed during subscription updates.","example":{"domainCount":10,"emailVolumeCount":100000},"allOf":[{"$ref":"#/components/schemas/PlanFeatures_2"}]},"priceId":{"type":"string","description":"The unique identifier of the price this subscription item belongs to","example":"price_9f39c0b7"},"planName":{"type":"string","description":"The name of the plan this subscription item is priced under. Returned so a partner can name the plan even when the price is not in its own catalogue — which is the case whenever the customer changed its own plan in EasyDMARC. Null if the price is not linked to a plan.","example":"Plus","nullable":true},"amount":{"type":"number","description":"The price amount for this subscription item, as a number — 0 for a trial. Returned so a partner can tell a paid plan from a trial without looking the price up in its own catalogue. Null if the amount is unknown; never assume 0 in that case. Note this is a real JSON number, unlike the amount on the plans endpoint, which is still serialised as a decimal string.","example":99,"nullable":true},"createdAt":{"format":"date-time","type":"string","description":"Timestamp when the subscription item was created","example":"2023-03-08T08:37:05.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Timestamp when the subscription item was last updated","example":"2023-03-08T08:37:05.000Z"}},"required":["id","quantity","features","priceId","planName","amount","createdAt","updatedAt"]},"SubscriptionV2_2":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the subscription","example":"sub_12ab34"},"expireDate":{"format":"date-time","type":"string","description":"When the subscription will expire","example":"2026-01-01T00:00:00Z"},"cancelledAt":{"type":"object","description":"Timestamp when the subscription was cancelled. If null, the subscription is active.","example":null,"format":"date-time","nullable":true},"autoRenew":{"type":"boolean","description":"Whether the subscription renews automatically when its term ends. When true, a scheduled job extends the expiration date based on the assigned price billing period.","example":true,"nullable":true},"items":{"description":"The list of subscription items. Each subscription has at least one item.","type":"array","items":{"$ref":"#/components/schemas/SubscriptionItemV2_2"}},"createdAt":{"format":"date-time","type":"string","description":"Timestamp when the subscription was created","example":"2023-03-08T08:37:05.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Timestamp when the subscription was last updated","example":"2023-03-08T08:37:05.000Z"}},"required":["id","expireDate","items","createdAt","updatedAt"]},"GetPartnerSubscriptionsBulkRequest_2":{"type":"object","properties":{"organizationIds":{"description":"External organization IDs to retrieve subscriptions for","example":["org_88xy77","org_45zz12"],"type":"array","items":{"type":"string"}}},"required":["organizationIds"]},"OrganizationSubscriptionsV2_2":{"type":"object","properties":{"organizationId":{"type":"string","description":"External organization ID","example":"org_88xy77"},"subscriptions":{"description":"Subscriptions for this organization, including expired and cancelled ones. Empty if the organization has none.","type":"array","items":{"$ref":"#/components/schemas/SubscriptionV2_2"}}},"required":["organizationId","subscriptions"]},"UpdateSubscriptionAutoRenewRequest_2":{"type":"object","properties":{"autoRenew":{"type":"boolean","description":"Whether the subscription should be renewed automatically when its term ends. When true, a scheduled job extends the expiration date based on the assigned price billing period.","example":true}},"required":["autoRenew"]},"PartnerSubscriptionAssignRequest_2":{"type":"object","properties":{"priceId":{"type":"string","description":"The unique identifier of the price to assign to the organization","example":"price_9f39c0b7"},"organizationId":{"type":"string","description":"The unique identifier of the organization to assign the subscription to","example":"org_88xy77"},"autoRenew":{"type":"boolean","description":"Whether the subscription should be renewed automatically when its term ends. When true, a scheduled job extends the expiration date based on the assigned price billing period. Defaults to true.","example":true,"default":true}},"required":["priceId","organizationId"]},"UpdatePartnerSubscriptionRequest_2":{"type":"object","properties":{"priceId":{"type":"string","description":"The unique identifier of the new price for the subscription upgrade/downgrade","example":"price_premium_monthly_123"}},"required":["priceId"]},"PartnerOrganizationUser_2":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the user.","example":"4a3d6dd3-6694-a41b-9abc-a46fa810a298"},"email":{"type":"string","description":"Email address of the user.","example":"jane.doe@example.com"},"name":{"type":"object","description":"Display name of the user. May be empty if not set.","example":"Jane Doe","nullable":true}},"required":["id","email","name"]},"UserRole_2":{"type":"string","enum":["Organization Owner","Organization Admin","Product Admin","Product Editor","Domain Group Admin","Domain Group Editor","Domain Admin","Domain Editor","Domain Group Viewer","Domain Viewer"]},"ActionPerformerResponse_2":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"role":{"allOf":[{"$ref":"#/components/schemas/UserRole_2"}]},"avatar":{"type":"string"},"avatarColor":{"type":"string"}},"required":["id","email","fullName","role"]},"CountryResponse_2":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"flagUrl":{"type":"string"}},"required":["name","code"]},"AuditLogAction_2":{"type":"string","enum":["UNKNOWN","DOMAIN_ADDED","DOMAIN_REMOVED","DOMAIN_MOVED_TO_GROUP","GROUP_MOVE_TO_WORKSPACE","DOMAIN_GROUP_ADDED","DOMAIN_GROUP_REMOVED","DOMAIN_GROUP_NAME_EDITED","MANAGED_DMARC_ACTIVATED","MANAGED_DMARC_RECORD_CHANGED","FAILURE_REPORT_DISABLED","FAILURE_REPORT_ENABLED","MANAGED_BIMI_ACTIVATED","MANAGED_BIMI_RECORD_CHANGED","MANAGED_MTA_STS_ACTIVATED","MANAGED_MTA_STS_RECORD_CHANGED","EASY_SPF_SOURCE_ADDED","EASY_SPF_SOURCE_REMOVED","EASY_SPF_SOURCE_NAME_UPDATED","EASY_SPF_PART_TYPE_UPDATED","EASY_SPF_PART_VALUE_UPDATED","EASY_SPF_SOURCE_ENABLED","EASY_SPF_SOURCE_DISABLED","EASY_SPF_ACTIVATED","USER_INVITED_AS_ADMIN","USER_INVITED_AS_EDITOR","USER_INVITED_AS_VIEWER","USER_REVOKED_FROM_ORGANIZATION","USER_PERMISSION_CHANGED","BILLING_DETAILS_ADDED","PRODUCT_PLAN_UPGRADED","BILLING_CANCELLATION_REQUESTED","INTEGRATION_TOKEN_GENERATED","INTEGRATION_CONNECTED","INTEGRATION_DISCONNECTED","LOGGED_IN","LOGGED_OUT","LOGGED_IN_ERROR","ADDED_MFA","REMOVED_MFA","SETUP_SSO","LOGGED_IN_SSO","REGISTERED_SSO","CHANGED_FULL_NAME","CHANGED_LAST_NAME","CHANGED_FIRST_NAME","REQUESTED_ACCOUNT_TERMINATION","LOGGED_IN_NEW_DEVICE","LOGGED_OUT_DEVICE","LOGGED_OUT_FROM_ALL_DEVICES","DISCONNECTED_SOCIAL_ACCOUNT","LEFT_ORGANIZATION","AGGREGATE_REPORT_FILE_UPLOADED","TLS_REPORT_FILE_UPLOADED","DOMAIN_OR_IP_REPUTATION_MONITORING_ADDED","DOMAIN_OR_IP_REPUTATION_MONITORING_REMOVED","CREATED_ALERT","EDITED_ALERT_NAME","ADDED_RECIPIENTS_FOR_ALERT","REMOVED_RECIPIENTS_FOR_ALERT","ADDED_DOMAINS_FOR_ALERT","REMOVED_DOMAINS_FOR_ALERT","DELETED_ALERT","ENABLED_ALERT","DISABLED_ALERT","DELETED_ALERT_LOG","MARKED_ALERT_LOG_RESOLVED","APPLIED_LABEL","REMOVED_LABEL","CREATED_LABEL","EDITED_LABEL_NAME","DELETED_LABEL","CREATED_SCHEDULED_REPORT","ADDED_ENTITY_FOR_SCHEDULED_REPORT","REMOVED_ENTITY_FOR_SCHEDULED_REPORT","DELETED_SCHEDULED_REPORT","EDITED_TIMEZONE_FOR_SCHEDULED_REPORT","EDITED_FREQUENCY_FOR_SCHEDULED_REPORT","FEDERATED_IDENTITY_LINK","ENABLED_WHITELABEL_SETTINGS_FOR_REPORTING","DISABLED_WHITELABEL_SETTINGS_FOR_REPORTING","CREATED_SMTP_SETUP_FOR_REPORTING","EDITED_SMTP_SETUP_FOR_REPORTING","DELETED_SMTP_SETUP_FOR_REPORTING","RENEWED_SUBSCRIPTION"]},"EntityType_2":{"type":"string","enum":["domain","domain_group","workspace","partner","organization","vendor","sso","login","user","link","product","role","plan","record","source_name","source_type","source_value","logout","text","social","device","ip","email","slack","ms_teams","alert_name","label_name","timezone","frequency","dns_record","dns_domain"]},"ActionItemResponse_2":{"type":"object","properties":{"label":{"type":"string"},"entityType":{"allOf":[{"$ref":"#/components/schemas/EntityType_2"}]},"id":{"type":"string"},"imgPath":{"type":"string"}},"required":["label","entityType"]},"SortDirection_2":{"type":"string","enum":["ASC","DESC"]},"AuditLogOs_2":{"type":"string","enum":["MAC","WINDOWS","LINUX","OTHER"]},"AuditLogBrowser_2":{"type":"string","enum":["CHROME","SAFARI","OPERA","FIREFOX","OTHER"]},"AuditLogDevice_2":{"type":"string","enum":["PC","PHONE","OTHER"]},"PlatformResponse_2":{"type":"object","properties":{"os":{"allOf":[{"$ref":"#/components/schemas/AuditLogOs_2"}]},"browser":{"allOf":[{"$ref":"#/components/schemas/AuditLogBrowser_2"}]},"device":{"allOf":[{"$ref":"#/components/schemas/AuditLogDevice_2"}]}},"required":["os","browser","device"]},"AuditLogResponse_2":{"type":"object","properties":{"id":{"type":"string"},"user":{"$ref":"#/components/schemas/ActionPerformerResponse_2"},"date":{"format":"date-time","type":"string"},"actionDate":{"format":"date-time","type":"string"},"action":{"allOf":[{"$ref":"#/components/schemas/AuditLogAction_2"}]},"entities":{"type":"array","items":{"$ref":"#/components/schemas/ActionItemResponse_2"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ActionItemResponse_2"}},"country":{"$ref":"#/components/schemas/CountryResponse_2"},"ip":{"type":"string"},"platform":{"$ref":"#/components/schemas/PlatformResponse_2"},"os":{"type":"string"},"browser":{"type":"string"},"device":{"type":"string"},"onData":{"type":"array","items":{"$ref":"#/components/schemas/ActionItemResponse_2"}},"from":{"$ref":"#/components/schemas/ActionItemResponse_2"},"to":{"$ref":"#/components/schemas/ActionItemResponse_2"}},"required":["id","user","date","actionDate","action","entities","entity","country","ip","platform","os","browser","device"]},"AuditLogPageResponse_2":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogResponse_2"}},"totalCount":{"type":"number","description":"Total number of records matching the query"},"currentPage":{"type":"number","description":"Current page number (1-based)"},"totalPages":{"type":"number","description":"Total number of pages"}},"required":["data","totalCount","currentPage","totalPages"]},"AuditLogActionCategory_2":{"type":"string","enum":["DOMAINS","DOMAIN_GROUPS","MANAGED_SERVICES","USER_MANAGEMENT","BILLING","SECURITY_FEATURES","ORGANIZATION_SECURITY","LOGIN_AND_LOGOUT","INTEGRATIONS","ALERTING","RUF","RUA","PERSONAL_SETTINGS","REPORTING","LABEL_MANAGEMENT"]},"ARecordObject_2":{"type":"object","properties":{}},"ValidationMessage_2":{"type":"object","properties":{"key":{"type":"string","description":"The key of the validation message."},"message":{"type":"string","description":"The description of the validation."}},"required":["key","message"]},"DnsValidationResult_2":{"type":"object","properties":{"errors":{"description":"The validation messages for the DNS record.","type":"array","items":{"$ref":"#/components/schemas/ValidationMessage_2"}},"warnings":{"description":"The warning messages for the DNS record.","type":"array","items":{"$ref":"#/components/schemas/ValidationMessage_2"}},"info":{"description":"The info messages for the DNS record.","type":"array","items":{"$ref":"#/components/schemas/ValidationMessage_2"}}},"required":["errors","warnings","info"]},"DnsRecordStatus_2":{"type":"string","enum":["SUCCESS","NODATA","NOTFOUND","TIMEOUT","ERROR","SERVFAIL","NXDOMAIN"],"description":"The status of the A record."},"ARecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the A record.","example":"example.com"},"raw":{"nullable":false,"description":"The raw A records.","example":["127.0.0.1","127.0.0.2"],"type":"array","items":{"type":"string"}},"object":{"description":"The parsed A record.","allOf":[{"$ref":"#/components/schemas/ARecordObject_2"}]},"validation":{"description":"The validation of the A record.","allOf":[{"$ref":"#/components/schemas/DnsValidationResult_2"}]},"queryStatus":{"description":"The status of the A record.","example":"SUCCESS","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the A record lookup.","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"ABatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}}},"required":["domains"]},"DnsIntelligenceCheckName_2":{"type":"string","enum":["dnssecNotEnabled","dnskeySyntax","dnssecChain","nsecVsNsec3","algorithmStrength","edns0Support","mxMissing","mxPointsToIp","mxFcrdnsMismatch","mxNoRedundancy","mxAsnDiversity","mxBlocklists","mtaSts","spfLookupOverflow","spfMultipleRecords","dmarcPolicyWeak","dkimKeyStrength","dkimDuplicateSelectors","staleVerificationTxt","cnameAtApex","wildcardMxTxt","ttlOutOfRange","ttlCrossType","soaTimingValues","caaMissing","caaIssuewild","caaIodef","caaCertificateMismatch","nsCountInsufficient","nsGeoAsnDiversity","soaSerialConsistency","lameDelegation","nsQueryLatency","parkedConfiguration","abuseMailbox","securityTxt","dnssecRrsigFreshness","dnssecRsaKeyLength","infoLeakRecords","zoneTransferOpen","httpSecurityHeaders","httpsRedirect","httpCookieFlags","httpCorsPolicy","tlsCertificateExpiry","tlsProtocolVersion","spfPolicyQualifier","tlsRpt","m365Baseline"],"description":"Camel-case check name from `GET /dns-intelligence/checks`."},"CheckSpec_2":{"type":"object","properties":{"check":{"description":"Camel-case check name from `GET /dns-intelligence/checks`.","example":"caaMissing","allOf":[{"$ref":"#/components/schemas/DnsIntelligenceCheckName_2"}]},"params":{"type":"object","description":"Per-check parameters. Shape depends on `check`; omit when the check needs no input.","example":{}}},"required":["check"]},"RunChecksRequest_2":{"type":"object","properties":{"region":{"type":"string","description":"Worker region tag. Absent ⇒ global routing (the default for nearly every call).","example":"local"},"timeoutMs":{"type":"number","description":"Per-call timeout in ms. Wins over the service default (10s).","example":5000},"tenantId":{"type":"string","description":"Tenant identifier propagated to the worker as `tenant_id`."},"traceparent":{"type":"string","description":"W3C `traceparent` header pass-through."},"tracestate":{"type":"string","description":"W3C `tracestate` header pass-through."},"requestId":{"type":"string","description":"Optional client-supplied request id. Auto-generated UUID v4 when absent."},"correlationId":{"type":"string","description":"Payload-level correlation id, distinct from the `request_id` header."},"idempotencyKey":{"type":"string","description":"Header `idempotency_key`. Pass a stable value to dedupe retries upstream."},"domain":{"type":"string","example":"easydmarc.com"},"checks":{"description":"One or more checks to run against the domain in a single batched worker request. A per-domain deadline applies to the whole batch (see `timeoutMs`).","type":"array","items":{"$ref":"#/components/schemas/CheckSpec_2"}}},"required":["domain","checks"]},"Note_2":{"type":"object","properties":{"severity":{"type":"string","enum":["unspecified","info","warn","error"],"description":"Note severity — info / warn / error."},"text":{"type":"string","description":"Human-readable note text."}},"required":["severity","text"]},"DnssecNotEnabledEvidence_2":{"type":"object","properties":{"dnskeyPresent":{"type":"boolean"},"dsPresent":{"type":"boolean"},"dnskeyCount":{"type":"number"},"dsCount":{"type":"number"}},"required":["dnskeyPresent","dsPresent","dnskeyCount","dsCount"]},"DnssecNotEnabledReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DnssecNotEnabledEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"WorkerError_2":{"type":"object","properties":{"code":{"type":"string","description":"Worker error code, e.g. INVALID_INPUT, UNKNOWN_CHECK, VERSION_MISMATCH, TIMEOUT, INTERNAL."},"message":{"type":"string","description":"Worker-supplied error message."},"traceId":{"type":"string","description":"Worker-side trace id for correlating logs."}},"required":["code","message","traceId"]},"DnssecNotEnabledResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dnssecNotEnabled"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DnssecNotEnabledReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DnskeySyntaxEvidenceParsed_2":{"type":"object","properties":{"flags":{"type":"number"},"protocol":{"type":"number"},"algorithm":{"type":"number"},"keyPresent":{"type":"boolean"}},"required":["flags","protocol","algorithm","keyPresent"]},"DnskeySyntaxEvidence_2":{"type":"object","properties":{"dnskeys":{"type":"array","items":{"$ref":"#/components/schemas/DnskeySyntaxEvidenceParsed_2"}},"invalidCount":{"type":"number"}},"required":["dnskeys","invalidCount"]},"DnskeySyntaxReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DnskeySyntaxEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DnskeySyntaxResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dnskeySyntax"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DnskeySyntaxReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DnssecChainEvidenceDsRow_2":{"type":"object","properties":{"keyTag":{"type":"number"},"algorithm":{"type":"number"},"digestType":{"type":"number"},"digestHex":{"type":"string"}},"required":["keyTag","algorithm","digestType","digestHex"]},"DnssecChainEvidenceDnskeyRow_2":{"type":"object","properties":{"keyTag":{"type":"number"},"algorithm":{"type":"number"},"flags":{"type":"number"}},"required":["keyTag","algorithm","flags"]},"DnssecChainEvidence_2":{"type":"object","properties":{"dsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DnssecChainEvidenceDsRow_2"}},"dnskeyRecords":{"type":"array","items":{"$ref":"#/components/schemas/DnssecChainEvidenceDnskeyRow_2"}},"matchedKeyTags":{"type":"array","items":{"type":"number"}},"validatingResolverSecure":{"type":"boolean"}},"required":["dsRecords","dnskeyRecords","matchedKeyTags","validatingResolverSecure"]},"DnssecChainReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DnssecChainEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DnssecChainResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dnssecChain"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DnssecChainReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"NsecVsNsec3Evidence_2":{"type":"object","properties":{"mode":{"type":"string","enum":["unspecified","nsec","nsec3","unknown"]},"iterations":{"type":"number"},"saltLength":{"type":"number"},"optOut":{"type":"boolean"}},"required":["mode","iterations","saltLength","optOut"]},"NsecVsNsec3Reply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/NsecVsNsec3Evidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"NsecVsNsec3Result_2":{"type":"object","properties":{"check":{"type":"string","enum":["nsecVsNsec3"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/NsecVsNsec3Reply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"AlgorithmStrengthEvidenceAlgo_2":{"type":"object","properties":{"algorithm":{"type":"number"},"label":{"type":"string"},"strength":{"type":"string"}},"required":["algorithm","label","strength"]},"AlgorithmStrengthEvidence_2":{"type":"object","properties":{"algorithms":{"type":"array","items":{"$ref":"#/components/schemas/AlgorithmStrengthEvidenceAlgo_2"}}},"required":["algorithms"]},"AlgorithmStrengthReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/AlgorithmStrengthEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"AlgorithmStrengthResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["algorithmStrength"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/AlgorithmStrengthReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"Edns0SupportEvidence_2":{"type":"object","properties":{"ednsPresent":{"type":"boolean"},"udpPayloadSize":{"type":"number"},"dnssecOkSupported":{"type":"boolean"},"nameserverTested":{"type":"string"}},"required":["ednsPresent","udpPayloadSize","dnssecOkSupported","nameserverTested"]},"Edns0SupportReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/Edns0SupportEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"Edns0SupportResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["edns0Support"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/Edns0SupportReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MxMissingEvidence_2":{"type":"object","properties":{"mxCount":{"type":"number"},"parked":{"type":"boolean"}},"required":["mxCount","parked"]},"MxMissingReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MxMissingEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MxMissingResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mxMissing"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MxMissingReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MxPointsToIpEvidenceBad_2":{"type":"object","properties":{"exchange":{"type":"string"},"ip":{"type":"string"}},"required":["exchange","ip"]},"MxPointsToIpEvidence_2":{"type":"object","properties":{"offenders":{"type":"array","items":{"$ref":"#/components/schemas/MxPointsToIpEvidenceBad_2"}},"mxCount":{"type":"number"}},"required":["offenders","mxCount"]},"MxPointsToIpReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MxPointsToIpEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MxPointsToIpResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mxPointsToIp"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MxPointsToIpReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MxFcrdnsMismatchEvidenceHost_2":{"type":"object","properties":{"exchange":{"type":"string"},"ip":{"type":"string"},"ptr":{"type":"string"},"matches":{"type":"boolean"}},"required":["exchange","ip","ptr","matches"]},"MxFcrdnsMismatchEvidence_2":{"type":"object","properties":{"hosts":{"type":"array","items":{"$ref":"#/components/schemas/MxFcrdnsMismatchEvidenceHost_2"}},"mismatchCount":{"type":"number"}},"required":["hosts","mismatchCount"]},"MxFcrdnsMismatchReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MxFcrdnsMismatchEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MxFcrdnsMismatchResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mxFcrdnsMismatch"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MxFcrdnsMismatchReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MxNoRedundancyEvidence_2":{"type":"object","properties":{"mxCount":{"type":"number"}},"required":["mxCount"]},"MxNoRedundancyReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MxNoRedundancyEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MxNoRedundancyResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mxNoRedundancy"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MxNoRedundancyReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MxAsnDiversityEvidenceMxHost_2":{"type":"object","properties":{"host":{"type":"string"},"ip":{"type":"string"},"asn":{"type":"number"},"subnet24":{"type":"string"}},"required":["host","ip","asn","subnet24"]},"MxAsnDiversityEvidence_2":{"type":"object","properties":{"hosts":{"type":"array","items":{"$ref":"#/components/schemas/MxAsnDiversityEvidenceMxHost_2"}},"sameAsn":{"type":"boolean"},"sameSubnet":{"type":"boolean"}},"required":["hosts","sameAsn","sameSubnet"]},"MxAsnDiversityReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MxAsnDiversityEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MxAsnDiversityResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mxAsnDiversity"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MxAsnDiversityReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MxBlocklistsEvidenceListing_2":{"type":"object","properties":{"ip":{"type":"string"},"blocklist":{"type":"string"},"listed":{"type":"boolean"}},"required":["ip","blocklist","listed"]},"MxBlocklistsEvidence_2":{"type":"object","properties":{"listings":{"type":"array","items":{"$ref":"#/components/schemas/MxBlocklistsEvidenceListing_2"}},"listedCount":{"type":"number"}},"required":["listings","listedCount"]},"MxBlocklistsReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MxBlocklistsEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MxBlocklistsResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mxBlocklists"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MxBlocklistsReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"MtaStsEvidence_2":{"type":"object","properties":{"txtPresent":{"type":"boolean"},"policyPresent":{"type":"boolean"},"policyMode":{"type":"string"},"policyMaxAge":{"type":"number"}},"required":["txtPresent","policyPresent","policyMode","policyMaxAge"]},"MtaStsReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/MtaStsEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"MtaStsResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["mtaSts"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/MtaStsReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"SpfLookupOverflowEvidence_2":{"type":"object","properties":{"lookupCount":{"type":"number"},"limit":{"type":"number"},"visited":{"type":"array","items":{"type":"string"}},"recursionDetected":{"type":"boolean"}},"required":["lookupCount","limit","visited","recursionDetected"]},"SpfLookupOverflowReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/SpfLookupOverflowEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"SpfLookupOverflowResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["spfLookupOverflow"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/SpfLookupOverflowReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"SpfMultipleRecordsEvidence_2":{"type":"object","properties":{"records":{"type":"array","items":{"type":"string"}},"spfRecordCount":{"type":"number"}},"required":["records","spfRecordCount"]},"SpfMultipleRecordsReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/SpfMultipleRecordsEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"SpfMultipleRecordsResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["spfMultipleRecords"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/SpfMultipleRecordsReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DmarcPolicyWeakEvidence_2":{"type":"object","properties":{"present":{"type":"boolean"},"policy":{"type":"string"},"subdomainPolicy":{"type":"string"},"recordCount":{"type":"number"},"ruaPresent":{"type":"boolean"},"pct":{"type":"number"}},"required":["present","policy","subdomainPolicy","recordCount","ruaPresent","pct"]},"DmarcPolicyWeakReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DmarcPolicyWeakEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DmarcPolicyWeakResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dmarcPolicyWeak"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DmarcPolicyWeakReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DkimKeyStrengthEvidenceSelector_2":{"type":"object","properties":{"selector":{"type":"string"},"algorithm":{"type":"string"},"bits":{"type":"number"},"revoked":{"type":"boolean"}},"required":["selector","algorithm","bits","revoked"]},"DkimKeyStrengthEvidence_2":{"type":"object","properties":{"selectors":{"type":"array","items":{"$ref":"#/components/schemas/DkimKeyStrengthEvidenceSelector_2"}}},"required":["selectors"]},"DkimKeyStrengthReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DkimKeyStrengthEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DkimKeyStrengthResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dkimKeyStrength"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DkimKeyStrengthReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DkimDuplicateSelectorsEvidenceSel_2":{"type":"object","properties":{"selector":{"type":"string"},"recordCount":{"type":"number"}},"required":["selector","recordCount"]},"DkimDuplicateSelectorsEvidence_2":{"type":"object","properties":{"selectors":{"type":"array","items":{"$ref":"#/components/schemas/DkimDuplicateSelectorsEvidenceSel_2"}},"duplicateCount":{"type":"number"}},"required":["selectors","duplicateCount"]},"DkimDuplicateSelectorsReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DkimDuplicateSelectorsEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DkimDuplicateSelectorsResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dkimDuplicateSelectors"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DkimDuplicateSelectorsReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"StaleVerificationTxtEvidenceToken_2":{"type":"object","properties":{"tokenType":{"type":"string"},"service":{"type":"string"},"value":{"type":"string"}},"required":["tokenType","service","value"]},"StaleVerificationTxtEvidence_2":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/StaleVerificationTxtEvidenceToken_2"}}},"required":["tokens"]},"StaleVerificationTxtReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/StaleVerificationTxtEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"StaleVerificationTxtResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["staleVerificationTxt"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/StaleVerificationTxtReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"CnameAtApexEvidence_2":{"type":"object","properties":{"cnamePresent":{"type":"boolean"},"target":{"type":"string"}},"required":["cnamePresent","target"]},"CnameAtApexReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/CnameAtApexEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"CnameAtApexResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["cnameAtApex"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/CnameAtApexReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"WildcardMxTxtEvidence_2":{"type":"object","properties":{"wildcardMx":{"type":"boolean"},"wildcardTxt":{"type":"boolean"}},"required":["wildcardMx","wildcardTxt"]},"WildcardMxTxtReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/WildcardMxTxtEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"WildcardMxTxtResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["wildcardMxTxt"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/WildcardMxTxtReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"TtlOutOfRangeEvidenceRow_2":{"type":"object","properties":{"recordType":{"type":"string"},"name":{"type":"string"},"ttl":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"outOfRange":{"type":"boolean"}},"required":["recordType","name","ttl","min","max","outOfRange"]},"TtlOutOfRangeEvidence_2":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/TtlOutOfRangeEvidenceRow_2"}}},"required":["rows"]},"TtlOutOfRangeReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/TtlOutOfRangeEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"TtlOutOfRangeResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["ttlOutOfRange"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/TtlOutOfRangeReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"TtlCrossTypeEvidenceOutlier_2":{"type":"object","properties":{"recordType":{"type":"string"},"ttl":{"type":"number"}},"required":["recordType","ttl"]},"TtlCrossTypeEvidence_2":{"type":"object","properties":{"medianTtl":{"type":"number"},"outliers":{"type":"array","items":{"$ref":"#/components/schemas/TtlCrossTypeEvidenceOutlier_2"}}},"required":["medianTtl","outliers"]},"TtlCrossTypeReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/TtlCrossTypeEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"TtlCrossTypeResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["ttlCrossType"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/TtlCrossTypeReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"SoaTimingValuesEvidence_2":{"type":"object","properties":{"serial":{"type":"number"},"refresh":{"type":"number"},"retry":{"type":"number"},"expire":{"type":"number"},"minimum":{"type":"number"},"outOfRangeFields":{"type":"array","items":{"type":"string"}},"serialStale":{"type":"boolean"}},"required":["serial","refresh","retry","expire","minimum","outOfRangeFields","serialStale"]},"SoaTimingValuesReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/SoaTimingValuesEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"SoaTimingValuesResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["soaTimingValues"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/SoaTimingValuesReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"CaaMissingEvidence_2":{"type":"object","properties":{"caaPresent":{"type":"boolean"},"respondingName":{"type":"string"}},"required":["caaPresent","respondingName"]},"CaaMissingReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/CaaMissingEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"CaaMissingResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["caaMissing"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/CaaMissingReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"CaaIssuewildEvidence_2":{"type":"object","properties":{"issueValues":{"type":"array","items":{"type":"string"}},"issuewildValues":{"type":"array","items":{"type":"string"}}},"required":["issueValues","issuewildValues"]},"CaaIssuewildReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/CaaIssuewildEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"CaaIssuewildResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["caaIssuewild"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/CaaIssuewildReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"CaaIodefEvidence_2":{"type":"object","properties":{"iodefValues":{"type":"array","items":{"type":"string"}}},"required":["iodefValues"]},"CaaIodefReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/CaaIodefEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"CaaIodefResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["caaIodef"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/CaaIodefReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"CaaCertificateMismatchEvidence_2":{"type":"object","properties":{"allowedIssuers":{"type":"array","items":{"type":"string"}},"certIssuer":{"type":"string"},"matched":{"type":"boolean"}},"required":["allowedIssuers","certIssuer","matched"]},"CaaCertificateMismatchReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/CaaCertificateMismatchEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"CaaCertificateMismatchResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["caaCertificateMismatch"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/CaaCertificateMismatchReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"NsCountInsufficientEvidence_2":{"type":"object","properties":{"nsCount":{"type":"number"}},"required":["nsCount"]},"NsCountInsufficientReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/NsCountInsufficientEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"NsCountInsufficientResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["nsCountInsufficient"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/NsCountInsufficientReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"NsGeoAsnDiversityEvidenceNsHost_2":{"type":"object","properties":{"host":{"type":"string"},"ip":{"type":"string"},"asn":{"type":"number"},"country":{"type":"string"}},"required":["host","ip","asn","country"]},"NsGeoAsnDiversityEvidence_2":{"type":"object","properties":{"hosts":{"type":"array","items":{"$ref":"#/components/schemas/NsGeoAsnDiversityEvidenceNsHost_2"}},"sameAsn":{"type":"boolean"},"sameCountry":{"type":"boolean"}},"required":["hosts","sameAsn","sameCountry"]},"NsGeoAsnDiversityReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/NsGeoAsnDiversityEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"NsGeoAsnDiversityResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["nsGeoAsnDiversity"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/NsGeoAsnDiversityReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"SoaSerialConsistencyEvidenceNsSerial_2":{"type":"object","properties":{"ns":{"type":"string"},"serial":{"type":"number"},"reachable":{"type":"boolean"}},"required":["ns","serial","reachable"]},"SoaSerialConsistencyEvidence_2":{"type":"object","properties":{"serials":{"type":"array","items":{"$ref":"#/components/schemas/SoaSerialConsistencyEvidenceNsSerial_2"}},"consistent":{"type":"boolean"}},"required":["serials","consistent"]},"SoaSerialConsistencyReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/SoaSerialConsistencyEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"SoaSerialConsistencyResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["soaSerialConsistency"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/SoaSerialConsistencyReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"LameDelegationEvidenceNsResult_2":{"type":"object","properties":{"ns":{"type":"string"},"authoritative":{"type":"boolean"},"reachable":{"type":"boolean"}},"required":["ns","authoritative","reachable"]},"LameDelegationEvidence_2":{"type":"object","properties":{"nameservers":{"type":"array","items":{"$ref":"#/components/schemas/LameDelegationEvidenceNsResult_2"}},"lameCount":{"type":"number"}},"required":["nameservers","lameCount"]},"LameDelegationReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/LameDelegationEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"LameDelegationResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["lameDelegation"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/LameDelegationReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"NsQueryLatencyEvidenceNsLatency_2":{"type":"object","properties":{"ns":{"type":"string"},"meanMs":{"type":"number"},"p95Ms":{"type":"number"},"samples":{"type":"number"}},"required":["ns","meanMs","p95Ms","samples"]},"NsQueryLatencyEvidence_2":{"type":"object","properties":{"latencies":{"type":"array","items":{"$ref":"#/components/schemas/NsQueryLatencyEvidenceNsLatency_2"}}},"required":["latencies"]},"NsQueryLatencyReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/NsQueryLatencyEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"NsQueryLatencyResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["nsQueryLatency"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/NsQueryLatencyReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"ParkedConfigurationEvidence_2":{"type":"object","properties":{"noMx":{"type":"boolean"},"spfLocked":{"type":"boolean"},"dmarcReject":{"type":"boolean"},"noDkim":{"type":"boolean"},"dnssecEnabled":{"type":"boolean"},"noWildcardCname":{"type":"boolean"}},"required":["noMx","spfLocked","dmarcReject","noDkim","dnssecEnabled","noWildcardCname"]},"ParkedConfigurationReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/ParkedConfigurationEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"ParkedConfigurationResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["parkedConfiguration"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/ParkedConfigurationReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"AbuseMailboxEvidence_2":{"type":"object","properties":{"mailboxAccepted":{"type":"boolean"},"smtpResponse":{"type":"string"}},"required":["mailboxAccepted","smtpResponse"]},"AbuseMailboxReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/AbuseMailboxEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"AbuseMailboxResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["abuseMailbox"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/AbuseMailboxReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"SecurityTxtEvidence_2":{"type":"object","properties":{"present":{"type":"boolean"},"expiresPresent":{"type":"boolean"},"contactPresent":{"type":"boolean"},"expiresIso":{"type":"string"},"expired":{"type":"boolean"}},"required":["present","expiresPresent","contactPresent","expiresIso","expired"]},"SecurityTxtReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/SecurityTxtEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"SecurityTxtResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["securityTxt"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/SecurityTxtReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DnssecRrsigFreshnessEvidenceRrsig_2":{"type":"object","properties":{"typeCovered":{"type":"string"},"keyTag":{"type":"number"},"inceptionUnix":{"type":"number"},"expirationUnix":{"type":"number"},"secondsUntilExpiry":{"type":"number"}},"required":["typeCovered","keyTag","inceptionUnix","expirationUnix","secondsUntilExpiry"]},"DnssecRrsigFreshnessEvidence_2":{"type":"object","properties":{"rrsigs":{"type":"array","items":{"$ref":"#/components/schemas/DnssecRrsigFreshnessEvidenceRrsig_2"}}},"required":["rrsigs"]},"DnssecRrsigFreshnessReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DnssecRrsigFreshnessEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DnssecRrsigFreshnessResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dnssecRrsigFreshness"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DnssecRrsigFreshnessReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"DnssecRsaKeyLengthEvidenceKey_2":{"type":"object","properties":{"algorithm":{"type":"number"},"measuredBits":{"type":"number"},"verdict":{"type":"string"}},"required":["algorithm","measuredBits","verdict"]},"DnssecRsaKeyLengthEvidence_2":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/DnssecRsaKeyLengthEvidenceKey_2"}}},"required":["keys"]},"DnssecRsaKeyLengthReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/DnssecRsaKeyLengthEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"DnssecRsaKeyLengthResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["dnssecRsaKeyLength"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/DnssecRsaKeyLengthReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"InfoLeakRecordsEvidence_2":{"type":"object","properties":{"hinfoPresent":{"type":"boolean"},"hinfoCpu":{"type":"string"},"hinfoOs":{"type":"string"},"rpPresent":{"type":"boolean"},"locPresent":{"type":"boolean"},"samples":{"type":"array","items":{"type":"string"}}},"required":["hinfoPresent","hinfoCpu","hinfoOs","rpPresent","locPresent","samples"]},"InfoLeakRecordsReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/InfoLeakRecordsEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"InfoLeakRecordsResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["infoLeakRecords"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/InfoLeakRecordsReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"ZoneTransferOpenEvidenceNs_2":{"type":"object","properties":{"nameserver":{"type":"string"},"rcode":{"type":"number"},"transferAllowed":{"type":"boolean"},"closedWithoutReply":{"type":"boolean"}},"required":["nameserver","rcode","transferAllowed","closedWithoutReply"]},"ZoneTransferOpenEvidence_2":{"type":"object","properties":{"nameservers":{"type":"array","items":{"$ref":"#/components/schemas/ZoneTransferOpenEvidenceNs_2"}}},"required":["nameservers"]},"ZoneTransferOpenReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/ZoneTransferOpenEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"ZoneTransferOpenResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["zoneTransferOpen"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/ZoneTransferOpenReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"HttpSecurityHeadersEvidence_2":{"type":"object","properties":{"headersPresent":{"type":"array","items":{"type":"string"}},"headersMissing":{"type":"array","items":{"type":"string"}},"status":{"type":"number"},"finalUrl":{"type":"string"}},"required":["headersPresent","headersMissing","status","finalUrl"]},"HttpSecurityHeadersReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/HttpSecurityHeadersEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"HttpSecurityHeadersResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["httpSecurityHeaders"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/HttpSecurityHeadersReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"HttpsRedirectEvidence_2":{"type":"object","properties":{"status":{"type":"number"},"location":{"type":"string"},"redirectsToHttps":{"type":"boolean"},"servedOverPlainHttp":{"type":"boolean"}},"required":["status","location","redirectsToHttps","servedOverPlainHttp"]},"HttpsRedirectReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/HttpsRedirectEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"HttpsRedirectResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["httpsRedirect"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/HttpsRedirectReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"HttpCookieFlagsEvidenceCookie_2":{"type":"object","properties":{"name":{"type":"string"},"secure":{"type":"boolean"},"httpOnly":{"type":"boolean"},"sameSite":{"type":"string"},"sessionShaped":{"type":"boolean"}},"required":["name","secure","httpOnly","sameSite","sessionShaped"]},"HttpCookieFlagsEvidence_2":{"type":"object","properties":{"cookies":{"type":"array","items":{"$ref":"#/components/schemas/HttpCookieFlagsEvidenceCookie_2"}}},"required":["cookies"]},"HttpCookieFlagsReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/HttpCookieFlagsEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"HttpCookieFlagsResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["httpCookieFlags"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/HttpCookieFlagsReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"HttpCorsPolicyEvidence_2":{"type":"object","properties":{"allowOrigin":{"type":"string"},"allowCredentials":{"type":"boolean"},"reflectsRequestOrigin":{"type":"boolean"},"wildcardOrigin":{"type":"boolean"},"status":{"type":"number"}},"required":["allowOrigin","allowCredentials","reflectsRequestOrigin","wildcardOrigin","status"]},"HttpCorsPolicyReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/HttpCorsPolicyEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"HttpCorsPolicyResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["httpCorsPolicy"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/HttpCorsPolicyReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"TlsCertificateExpiryEvidence_2":{"type":"object","properties":{"notBefore":{"type":"number"},"notAfter":{"type":"number"},"daysRemaining":{"type":"number"},"issuer":{"type":"string"},"wildcard":{"type":"boolean"}},"required":["notBefore","notAfter","daysRemaining","issuer","wildcard"]},"TlsCertificateExpiryReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/TlsCertificateExpiryEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"TlsCertificateExpiryResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["tlsCertificateExpiry"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/TlsCertificateExpiryReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"TlsProtocolVersionEvidence_2":{"type":"object","properties":{"negotiated":{"type":"string"},"acceptedDeprecated":{"type":"array","items":{"type":"string"}},"unprobed":{"type":"array","items":{"type":"string"}}},"required":["negotiated","acceptedDeprecated","unprobed"]},"TlsProtocolVersionReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/TlsProtocolVersionEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"TlsProtocolVersionResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["tlsProtocolVersion"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/TlsProtocolVersionReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"SpfPolicyQualifierEvidence_2":{"type":"object","properties":{"recordPresent":{"type":"boolean"},"allTerm":{"type":"string"},"qualifier":{"type":"string"}},"required":["recordPresent","allTerm","qualifier"]},"SpfPolicyQualifierReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/SpfPolicyQualifierEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"SpfPolicyQualifierResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["spfPolicyQualifier"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/SpfPolicyQualifierReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"TlsRptEvidence_2":{"type":"object","properties":{"recordPresent":{"type":"boolean"},"recordCount":{"type":"number"},"rua":{"type":"array","items":{"type":"string"}},"invalidRua":{"type":"array","items":{"type":"string"}},"mtaStsPresent":{"type":"boolean"}},"required":["recordPresent","recordCount","rua","invalidRua","mtaStsPresent"]},"TlsRptReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/TlsRptEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"TlsRptResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["tlsRpt"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/TlsRptReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"M365BaselineEvidence_2":{"type":"object","properties":{"m365Detected":{"type":"boolean"},"mxHost":{"type":"string"},"autodiscoverPresent":{"type":"boolean"},"autodiscoverTarget":{"type":"string"},"selector1Present":{"type":"boolean"},"selector2Present":{"type":"boolean"}},"required":["m365Detected","mxHost","autodiscoverPresent","autodiscoverTarget","selector1Present","selector2Present"]},"M365BaselineReply_2":{"type":"object","properties":{"verdict":{"type":"string","enum":["unspecified","pass","warn","fail","inconclusive"],"description":"pass / warn / fail / inconclusive / unspecified."},"checkName":{"type":"string","description":"Wire-format check name (snake_case)."},"checkLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"reasonCodes":{"description":"Machine-readable reason codes backing the verdict.","type":"array","items":{"type":"string"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"evidence":{"$ref":"#/components/schemas/M365BaselineEvidence_2"}},"required":["verdict","checkName","checkLogicVersion","region","elapsedMs","reasonCodes","notes"]},"M365BaselineResult_2":{"type":"object","properties":{"check":{"type":"string","enum":["m365Baseline"]},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/M365BaselineReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["check","status"]},"RunChecksResponse_2":{"type":"object","properties":{"correlationId":{"type":"string","description":"Correlation id echoed from the request (batch-level)."},"results":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/DnssecNotEnabledResult_2"},{"$ref":"#/components/schemas/DnskeySyntaxResult_2"},{"$ref":"#/components/schemas/DnssecChainResult_2"},{"$ref":"#/components/schemas/NsecVsNsec3Result_2"},{"$ref":"#/components/schemas/AlgorithmStrengthResult_2"},{"$ref":"#/components/schemas/Edns0SupportResult_2"},{"$ref":"#/components/schemas/MxMissingResult_2"},{"$ref":"#/components/schemas/MxPointsToIpResult_2"},{"$ref":"#/components/schemas/MxFcrdnsMismatchResult_2"},{"$ref":"#/components/schemas/MxNoRedundancyResult_2"},{"$ref":"#/components/schemas/MxAsnDiversityResult_2"},{"$ref":"#/components/schemas/MxBlocklistsResult_2"},{"$ref":"#/components/schemas/MtaStsResult_2"},{"$ref":"#/components/schemas/SpfLookupOverflowResult_2"},{"$ref":"#/components/schemas/SpfMultipleRecordsResult_2"},{"$ref":"#/components/schemas/DmarcPolicyWeakResult_2"},{"$ref":"#/components/schemas/DkimKeyStrengthResult_2"},{"$ref":"#/components/schemas/DkimDuplicateSelectorsResult_2"},{"$ref":"#/components/schemas/StaleVerificationTxtResult_2"},{"$ref":"#/components/schemas/CnameAtApexResult_2"},{"$ref":"#/components/schemas/WildcardMxTxtResult_2"},{"$ref":"#/components/schemas/TtlOutOfRangeResult_2"},{"$ref":"#/components/schemas/TtlCrossTypeResult_2"},{"$ref":"#/components/schemas/SoaTimingValuesResult_2"},{"$ref":"#/components/schemas/CaaMissingResult_2"},{"$ref":"#/components/schemas/CaaIssuewildResult_2"},{"$ref":"#/components/schemas/CaaIodefResult_2"},{"$ref":"#/components/schemas/CaaCertificateMismatchResult_2"},{"$ref":"#/components/schemas/NsCountInsufficientResult_2"},{"$ref":"#/components/schemas/NsGeoAsnDiversityResult_2"},{"$ref":"#/components/schemas/SoaSerialConsistencyResult_2"},{"$ref":"#/components/schemas/LameDelegationResult_2"},{"$ref":"#/components/schemas/NsQueryLatencyResult_2"},{"$ref":"#/components/schemas/ParkedConfigurationResult_2"},{"$ref":"#/components/schemas/AbuseMailboxResult_2"},{"$ref":"#/components/schemas/SecurityTxtResult_2"},{"$ref":"#/components/schemas/DnssecRrsigFreshnessResult_2"},{"$ref":"#/components/schemas/DnssecRsaKeyLengthResult_2"},{"$ref":"#/components/schemas/InfoLeakRecordsResult_2"},{"$ref":"#/components/schemas/ZoneTransferOpenResult_2"},{"$ref":"#/components/schemas/HttpSecurityHeadersResult_2"},{"$ref":"#/components/schemas/HttpsRedirectResult_2"},{"$ref":"#/components/schemas/HttpCookieFlagsResult_2"},{"$ref":"#/components/schemas/HttpCorsPolicyResult_2"},{"$ref":"#/components/schemas/TlsCertificateExpiryResult_2"},{"$ref":"#/components/schemas/TlsProtocolVersionResult_2"},{"$ref":"#/components/schemas/SpfPolicyQualifierResult_2"},{"$ref":"#/components/schemas/TlsRptResult_2"},{"$ref":"#/components/schemas/M365BaselineResult_2"}],"discriminator":{"propertyName":"check","mapping":{"dnssecNotEnabled":"#/components/schemas/DnssecNotEnabledResult_2","dnskeySyntax":"#/components/schemas/DnskeySyntaxResult_2","dnssecChain":"#/components/schemas/DnssecChainResult_2","nsecVsNsec3":"#/components/schemas/NsecVsNsec3Result_2","algorithmStrength":"#/components/schemas/AlgorithmStrengthResult_2","edns0Support":"#/components/schemas/Edns0SupportResult_2","mxMissing":"#/components/schemas/MxMissingResult_2","mxPointsToIp":"#/components/schemas/MxPointsToIpResult_2","mxFcrdnsMismatch":"#/components/schemas/MxFcrdnsMismatchResult_2","mxNoRedundancy":"#/components/schemas/MxNoRedundancyResult_2","mxAsnDiversity":"#/components/schemas/MxAsnDiversityResult_2","mxBlocklists":"#/components/schemas/MxBlocklistsResult_2","mtaSts":"#/components/schemas/MtaStsResult_2","spfLookupOverflow":"#/components/schemas/SpfLookupOverflowResult_2","spfMultipleRecords":"#/components/schemas/SpfMultipleRecordsResult_2","dmarcPolicyWeak":"#/components/schemas/DmarcPolicyWeakResult_2","dkimKeyStrength":"#/components/schemas/DkimKeyStrengthResult_2","dkimDuplicateSelectors":"#/components/schemas/DkimDuplicateSelectorsResult_2","staleVerificationTxt":"#/components/schemas/StaleVerificationTxtResult_2","cnameAtApex":"#/components/schemas/CnameAtApexResult_2","wildcardMxTxt":"#/components/schemas/WildcardMxTxtResult_2","ttlOutOfRange":"#/components/schemas/TtlOutOfRangeResult_2","ttlCrossType":"#/components/schemas/TtlCrossTypeResult_2","soaTimingValues":"#/components/schemas/SoaTimingValuesResult_2","caaMissing":"#/components/schemas/CaaMissingResult_2","caaIssuewild":"#/components/schemas/CaaIssuewildResult_2","caaIodef":"#/components/schemas/CaaIodefResult_2","caaCertificateMismatch":"#/components/schemas/CaaCertificateMismatchResult_2","nsCountInsufficient":"#/components/schemas/NsCountInsufficientResult_2","nsGeoAsnDiversity":"#/components/schemas/NsGeoAsnDiversityResult_2","soaSerialConsistency":"#/components/schemas/SoaSerialConsistencyResult_2","lameDelegation":"#/components/schemas/LameDelegationResult_2","nsQueryLatency":"#/components/schemas/NsQueryLatencyResult_2","parkedConfiguration":"#/components/schemas/ParkedConfigurationResult_2","abuseMailbox":"#/components/schemas/AbuseMailboxResult_2","securityTxt":"#/components/schemas/SecurityTxtResult_2","dnssecRrsigFreshness":"#/components/schemas/DnssecRrsigFreshnessResult_2","dnssecRsaKeyLength":"#/components/schemas/DnssecRsaKeyLengthResult_2","infoLeakRecords":"#/components/schemas/InfoLeakRecordsResult_2","zoneTransferOpen":"#/components/schemas/ZoneTransferOpenResult_2","httpSecurityHeaders":"#/components/schemas/HttpSecurityHeadersResult_2","httpsRedirect":"#/components/schemas/HttpsRedirectResult_2","httpCookieFlags":"#/components/schemas/HttpCookieFlagsResult_2","httpCorsPolicy":"#/components/schemas/HttpCorsPolicyResult_2","tlsCertificateExpiry":"#/components/schemas/TlsCertificateExpiryResult_2","tlsProtocolVersion":"#/components/schemas/TlsProtocolVersionResult_2","spfPolicyQualifier":"#/components/schemas/SpfPolicyQualifierResult_2","tlsRpt":"#/components/schemas/TlsRptResult_2","m365Baseline":"#/components/schemas/M365BaselineResult_2"}}},"description":"One entry per requested check. Discriminated on `check`: narrowing on that field narrows `reply.evidence` to the matching evidence shape."}},"required":["correlationId","results"]},"DnsIntelligenceProfileName_2":{"type":"string","enum":["awareness","dmarc_vendor","dns_provider","email_security","esp","lead_intel","productivity","tech_stack","waf_cdn"],"description":"Profile operation wire name from `GET /dns-intelligence/profiles`, e.g. `dns_provider`. Snake_case, exactly as the worker’s registry knows it — profile operations have no camelCase aliases."},"VendorProfileParams_2":{"type":"object","properties":{"maxDkimSelectors":{"type":"number","description":"Cap on DKIM selectors probed for this request. 0 (or omitted) means the worker’s configured default set.","example":12}}},"ProfileParams_2":{"type":"object","properties":{"vendor":{"$ref":"#/components/schemas/VendorProfileParams_2"}}},"ProfileSpec_2":{"type":"object","properties":{"profile":{"description":"Profile operation wire name from `GET /dns-intelligence/profiles`, e.g. `dns_provider`. Snake_case, exactly as the worker’s registry knows it — profile operations have no camelCase aliases.","example":"dns_provider","allOf":[{"$ref":"#/components/schemas/DnsIntelligenceProfileName_2"}]},"params":{"description":"Per-operation parameters. Omit unless the operation’s mechanism takes input; vendor categories accept `{ vendor: { maxDkimSelectors } }`.","allOf":[{"$ref":"#/components/schemas/ProfileParams_2"}]}},"required":["profile"]},"RunProfilesRequest_2":{"type":"object","properties":{"region":{"type":"string","description":"Worker region tag. Absent ⇒ global routing (the default for nearly every call).","example":"local"},"timeoutMs":{"type":"number","description":"Per-call timeout in ms. Wins over the service default (10s).","example":5000},"tenantId":{"type":"string","description":"Tenant identifier propagated to the worker as `tenant_id`."},"traceparent":{"type":"string","description":"W3C `traceparent` header pass-through."},"tracestate":{"type":"string","description":"W3C `tracestate` header pass-through."},"requestId":{"type":"string","description":"Optional client-supplied request id. Auto-generated UUID v4 when absent."},"correlationId":{"type":"string","description":"Payload-level correlation id, distinct from the `request_id` header."},"idempotencyKey":{"type":"string","description":"Header `idempotency_key`. Pass a stable value to dedupe retries upstream."},"domain":{"type":"string","example":"easydmarc.com"},"profiles":{"description":"One or more profile operations to run against the domain in a single batched worker request. Batching is what makes a multi-operation profile cheap — operations reading the same record share one DNS query through request-scoped dedup. A per-domain deadline applies to the whole batch (see `timeoutMs`).","type":"array","items":{"$ref":"#/components/schemas/ProfileSpec_2"}}},"required":["domain","profiles"]},"MatchSource_2":{"type":"object","properties":{"scope":{"type":"string","enum":["unspecified","ns_suffix","mx_suffix","spf_include","dkim_selector","dmarc_rua","apex_cname","txt_token","asn","html","dmarc_cname","www_cname"]},"pattern":{"type":"string"},"observedValue":{"type":"string"}},"required":["scope","pattern","observedValue"]},"Detection_2":{"type":"object","properties":{"id":{"type":"string"},"confidence":{"type":"string","enum":["unspecified","possible","probable","confirmed"]},"matchedOn":{"$ref":"#/components/schemas/MatchSource_2"},"competitor":{"type":"boolean"}},"required":["id","confidence","competitor"]},"Completeness_2":{"type":"object","properties":{"kind":{"type":"string","enum":["unspecified","full","partial"]},"missingInputs":{"type":"array","items":{"type":"string"}}},"required":["kind","missingInputs"]},"VendorObservation_2":{"type":"object","properties":{"nsSuffixes":{"type":"array","items":{"type":"string"}},"mxExchanges":{"type":"array","items":{"type":"string"}},"spfIncludes":{"type":"array","items":{"type":"string"}},"dkimSelectorsFound":{"type":"array","items":{"type":"string"}},"dmarcRua":{"type":"array","items":{"type":"string"}},"apexCname":{"type":"string"},"txtTokens":{"type":"array","items":{"type":"string"}},"asns":{"type":"array","items":{"type":"number"}},"dmarcCname":{"type":"string"},"wwwCname":{"type":"string"}},"required":["nsSuffixes","mxExchanges","spfIncludes","dkimSelectorsFound","dmarcRua","apexCname","txtTokens","asns","dmarcCname","wwwCname"]},"TechDetectionCategory_2":{"type":"object","properties":{"detectionId":{"type":"string"},"category":{"type":"string","enum":["unspecified","cms","analytics","ecommerce","framework","hosting","advertising","chat"]}},"required":["detectionId","category"]},"TechStackObservation_2":{"type":"object","properties":{"fetchedUrl":{"type":"string"},"status":{"type":"number"},"bytesRead":{"type":"number"},"truncated":{"type":"boolean"},"contentType":{"type":"string"},"categories":{"type":"array","items":{"$ref":"#/components/schemas/TechDetectionCategory_2"}}},"required":["fetchedUrl","status","bytesRead","truncated","contentType","categories"]},"SocialProfile_2":{"type":"object","properties":{"platform":{"type":"string","enum":["unspecified","linkedin","facebook","x","instagram","youtube","tiktok","pinterest","github"]},"url":{"type":"string"}},"required":["platform","url"]},"LeadIntelObservation_2":{"type":"object","properties":{"fetchedUrl":{"type":"string"},"status":{"type":"number"},"bytesRead":{"type":"number"},"truncated":{"type":"boolean"},"contentType":{"type":"string"},"contactEmails":{"type":"array","items":{"type":"string"}},"socialProfiles":{"type":"array","items":{"$ref":"#/components/schemas/SocialProfile_2"}},"careersLink":{"type":"boolean"},"ecommerce":{"type":"boolean"},"adPlatforms":{"type":"array","items":{"type":"string"}}},"required":["fetchedUrl","status","bytesRead","truncated","contentType","contactEmails","socialProfiles","careersLink","ecommerce","adPlatforms"]},"ProfileObservation_2":{"type":"object","properties":{"vendor":{"$ref":"#/components/schemas/VendorObservation_2"},"techStack":{"$ref":"#/components/schemas/TechStackObservation_2"},"leadIntel":{"$ref":"#/components/schemas/LeadIntelObservation_2"}}},"ProfileReply_2":{"type":"object","properties":{"profileName":{"type":"string","description":"Wire-format operation name (snake_case), echoing the spec."},"profileLogicVersion":{"type":"string"},"queriedAt":{"type":"string","format":"date-time"},"region":{"type":"string"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"detections":{"description":"What the domain was observed to use. Empty is a valid answer, not an error — interpret it through `completeness`.","type":"array","items":{"$ref":"#/components/schemas/Detection_2"}},"notes":{"description":"Structured worker notes.","type":"array","items":{"$ref":"#/components/schemas/Note_2"}},"completeness":{"$ref":"#/components/schemas/Completeness_2"},"observation":{"description":"What the matcher actually read, so a disputed detection is reproducible without re-querying. Exactly one arm is set, matching the operation’s mechanism.","allOf":[{"$ref":"#/components/schemas/ProfileObservation_2"}]}},"required":["profileName","profileLogicVersion","region","elapsedMs","detections","notes"]},"ProfileResult_2":{"type":"object","properties":{"profile":{"type":"string","description":"Wire-format operation name (snake_case). A plain string rather than an enum: operation names live in the worker’s registry, and a worker newer than this API can return operations it has never heard of."},"status":{"type":"string","enum":["ok","error"],"description":"`ok` ⇒ `reply` is set; `error` ⇒ `error` is set."},"reply":{"$ref":"#/components/schemas/ProfileReply_2"},"error":{"$ref":"#/components/schemas/WorkerError_2"}},"required":["profile","status"]},"RunProfilesResponse_2":{"type":"object","properties":{"correlationId":{"type":"string","description":"Correlation id echoed from the request (batch-level)."},"results":{"description":"One entry per requested operation. A per-operation failure is an `error` entry, not a non-2xx response, so one unknown operation does not discard the answers that succeeded.","type":"array","items":{"$ref":"#/components/schemas/ProfileResult_2"}}},"required":["correlationId","results"]},"RunLookupRequest_2":{"type":"object","properties":{"region":{"type":"string","description":"Worker region tag. Absent ⇒ global routing (the default for nearly every call).","example":"local"},"timeoutMs":{"type":"number","description":"Per-call timeout in ms. Wins over the service default (10s).","example":5000},"tenantId":{"type":"string","description":"Tenant identifier propagated to the worker as `tenant_id`."},"traceparent":{"type":"string","description":"W3C `traceparent` header pass-through."},"tracestate":{"type":"string","description":"W3C `tracestate` header pass-through."},"requestId":{"type":"string","description":"Optional client-supplied request id. Auto-generated UUID v4 when absent."},"correlationId":{"type":"string","description":"Payload-level correlation id, distinct from the `request_id` header."},"idempotencyKey":{"type":"string","description":"Header `idempotency_key`. Pass a stable value to dedupe retries upstream."},"type":{"type":"string","description":"Camel-case lookup type from `GET /dns-intelligence/lookups` (e.g. a, aaaa, mx, txt, ns, soa, caa, cname, srv, ptr).","example":"mx"},"domain":{"type":"string","example":"easydmarc.com"},"mode":{"type":"string","enum":["recursive","authoritative"],"description":"Resolver strategy. Default `recursive`. `authoritative` requires `nsAddress`."},"nsAddress":{"type":"string","description":"Authoritative nameserver address. Required when `mode` is `authoritative`."},"provider":{"type":"string","enum":["google","cloudflare","quad9"],"description":"Recursive upstream to query. Absent ⇒ the worker-configured default. Only valid with `mode: recursive` (the default); rejected otherwise."}},"required":["type","domain"]},"RunLookupResponse_2":{"type":"object","properties":{"lookupName":{"type":"string","description":"Record-type token echoed by the worker.","example":"mx"},"records":{"description":"Typed answer records; shape varies by lookup `type` (see the proto `LookupReply` body oneof). Each record includes `ttl` (seconds) plus type-specific fields. Empty on NXDOMAIN / NOERROR-empty / SERVFAIL.","type":"array","items":{"type":"object"}},"rcode":{"type":"number","description":"DNS response code (0 = NOERROR, 3 = NXDOMAIN, …)."},"authoritativeAnswer":{"type":"boolean","description":"AA bit — authoritative answer."},"authenticatedData":{"type":"boolean","description":"AD bit — DNSSEC authenticated data."},"truncated":{"type":"boolean","description":"TC bit — set only when the TCP retry was itself truncated."},"queriedAt":{"type":"string","format":"date-time"},"elapsedMs":{"type":"number","description":"Worker-reported elapsed milliseconds."},"correlationId":{"type":"string"},"region":{"type":"string"}},"required":["lookupName","records","rcode","authoritativeAnswer","authenticatedData","truncated","elapsedMs","correlationId","region"]},"AaaaRecordObject_2":{"type":"object","properties":{}},"AaaaRecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the AAAA record.","example":"example.com"},"raw":{"nullable":false,"description":"The raw AAAA records.","example":["2001:0000:130F:0000:0000:09C0:876A:130B","::1"],"type":"array","items":{"type":"string"}},"object":{"description":"The parsed AAAA record.","allOf":[{"$ref":"#/components/schemas/AaaaRecordObject_2"}]},"validation":{"description":"The validation of the AAAA record.","allOf":[{"$ref":"#/components/schemas/DnsValidationResult_2"}]},"queryStatus":{"description":"The status of the AAAA record.","example":"SUCCESS","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the AAAA record lookup.","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"AaaaBatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}}},"required":["domains"]},"NsRecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the NS record.","example":"example.com"},"raw":{"nullable":false,"description":"The raw NS records.","example":["jessica.ns.cloudflare.com","john.ns.cloudflare.com"],"type":"array","items":{"type":"string"}},"object":{"type":"object","description":"The parsed NS record."},"validation":{"description":"The validation of the NS record.","allOf":[{"$ref":"#/components/schemas/DnsValidationResult_2"}]},"queryStatus":{"type":"string","description":"The status of the NS record.","example":"SUCCESS"},"timestamp":{"type":"number","description":"The timestamp of the NS record lookup.","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"NsBatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}}},"required":["domains"]},"SoaRecord_2":{"type":"object","properties":{"domain":{"type":"string","description":"The queried domain.","example":"example.com"},"mname":{"type":"string","nullable":true,"description":"Primary nameserver (MNAME).","example":"ns1.example.com"},"rname":{"type":"string","nullable":true,"description":"Mailbox of the zone administrator (RNAME), dots for \"@\".","example":"hostmaster.example.com"},"serial":{"type":"number","nullable":true,"example":2026102301},"refresh":{"type":"number","nullable":true,"example":7200},"retry":{"type":"number","nullable":true,"example":3600},"expire":{"type":"number","nullable":true,"example":1209600},"minimum":{"type":"number","nullable":true,"example":3600},"ttl":{"type":"number","nullable":true,"example":3600},"queryStatus":{"description":"The status of the SOA lookup.","example":"SUCCESS","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the SOA lookup.","example":1704067200000}},"required":["domain","mname","rname","serial","refresh","retry","expire","minimum","ttl","queryStatus","timestamp"]},"SoaBatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}}},"required":["domains"]},"MxRecordObject_2":{"type":"object","properties":{"priority":{"type":"number","description":"The priority of the MX record","example":10},"exchange":{"type":"string","description":"The exchange server domain","example":"mail.example.com"},"addresses":{"description":"The list of IP addresses associated with the exchange server","example":["1.1.1.1","8.8.8.8"],"type":"array","items":{"type":"string"}},"isValidAddresses":{"type":"boolean","description":"Is valid addresses","example":true}},"required":["priority","exchange","addresses","isValidAddresses"]},"MxObject_2":{"type":"object","properties":{"mxRecords":{"description":"Array of MX records","type":"array","items":{"$ref":"#/components/schemas/MxRecordObject_2"}}},"required":["mxRecords"]},"MxRecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the MX record.","example":"example.com"},"raw":{"type":"string","nullable":false,"description":"The raw MX record.","example":""},"object":{"description":"The parsed MX record object.","allOf":[{"$ref":"#/components/schemas/MxObject_2"}]},"validation":{"description":"The validation of the MX record.","type":"array","items":{"$ref":"#/components/schemas/ValidationMessage_2"}},"queryStatus":{"description":"The status of the MX record lookup.","example":"SUCCESS","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the MX record lookup.","example":1747224799766}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"MxRecords_2":{"type":"object","properties":{"domain":{"type":"string","example":"example.com","description":"The domain name for which MX records were retrieved"},"records":{"description":"List of MX records for the domain","type":"array","items":{"$ref":"#/components/schemas/MxRecord_2"}}},"required":["domain","records"]},"MxBatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}},"skipAddresses":{"type":"boolean","example":true}},"required":["domains"]},"PtrRecordObject_2":{"type":"object","properties":{"ptrRecords":{"description":"Array of PTR records","example":["mail.example.com","server.example.org"],"type":"array","items":{"type":"string"}}},"required":["ptrRecords"]},"PtrRecord_2":{"type":"object","properties":{"ip":{"type":"string","nullable":false,"description":"The domain name of the PTR record.","example":"8.8.8.8"},"raw":{"type":"string","nullable":false,"description":"The raw PTR record.","example":""},"object":{"description":"The parsed PTR record object.","allOf":[{"$ref":"#/components/schemas/PtrRecordObject_2"}]},"validation":{"description":"The validation of the PTR record.","type":"array","items":{"$ref":"#/components/schemas/ValidationMessage_2"}},"queryStatus":{"type":"string","enum":["SUCCESS","NODATA","NOTFOUND","TIMEOUT","ERROR","SERVFAIL","NXDOMAIN"],"description":"The status of the PTR record lookup.","example":"SUCCESS"},"timestamp":{"type":"number","description":"The timestamp of the PTR record lookup.","example":1747224799762}},"required":["ip","raw","object","validation","queryStatus","timestamp"]},"PtrBatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"ips":{"example":["8.8.8.8","1.1.1."],"type":"array","items":{"type":"string"}}},"required":["ips"]},"TxtRecordObject_2":{"type":"object","properties":{"records":{"nullable":false,"description":"The raw TXT records.","example":[["v=spf1 include:_spf.google.com","~all"],["google-site-verification=abcdef12345"]],"type":"array","items":{"type":"string"}}},"required":["records"]},"TxtRecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the TXT record.","example":"example.com"},"raw":{"nullable":false,"description":"The raw TXT records.","example":[["v=spf1 include:_spf.google.com","~all"],["google-site-verification=abcdef12345"]],"type":"array","items":{"type":"string"}},"object":{"description":"The parsed TXT record object.","allOf":[{"$ref":"#/components/schemas/TxtRecordObject_2"}]},"validation":{"description":"The validation of the TXT record.","allOf":[{"$ref":"#/components/schemas/DnsValidationResult_2"}]},"queryStatus":{"description":"The status of the TXT record lookup.","example":"SUCCESS","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the TXT record lookup.","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"TxtBatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}}},"required":["domains"]},"CnameRecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the CNAME record.","example":"example.com"},"raw":{"type":"string","nullable":false,"description":"The raw CNAME record.","example":"target.example.com."},"object":{"type":"object","description":"The parsed CNAME record."},"validation":{"description":"The validation of the CNAME record.","allOf":[{"$ref":"#/components/schemas/ValidationMessage_2"}]},"queryStatus":{"description":"The status of the CNAME record.","example":"NOTFOUND","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the CNAME record lookup.","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"CnameRecordBatchRequest_2":{"type":"object","properties":{"domains":{"example":["example.com","easydmarc.com"],"type":"array","items":{"type":"string"}},"maxAgeMs":{"type":"number","description":"Max age of the cache -1:[from cache] 0:[force lookup] ( in ms)","example":3000}},"required":["domains"]},"DmarcRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"generate_dmarc_host":{"type":"boolean","example":true,"default":true}},"required":["domain"]},"DmarcRecord_2":{"type":"object","properties":{"domain":{"type":"string","example":"example.com"},"records":{"example":["v=DMARC1; p=none; rua=mailto:adsd@mail.ru"],"type":"array","items":{"type":"string"}}},"required":["domain","records"]},"DmarcRecordTerm_2":{"type":"object","properties":{"type":{"type":"number","description":"The type of the DMARC record term","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]},"tag":{"type":"string","description":"The tag associated with the DMARC record term","example":"v"},"value":{"type":"string","description":"The value of the DMARC record term"}},"required":["type","tag","value"]},"DmarcDeserializedRecord_2":{"type":"object","properties":{"v":{"type":"string","description":"The DMARC version.","example":"DMARC1"},"p":{"type":"string","description":"The DMARC policy for the domain.","enum":["none","reject","quarantine"]},"rua":{"description":"The aggregate report URIs (RUA).","example":["mailto:dmarc@example.com"],"type":"array","items":{"type":"string"}},"ruf":{"description":"The forensic report URIs (RUF).","example":["mailto:forensics@example.com"],"type":"array","items":{"type":"string"}},"pct":{"type":"string","description":"The percentage of messages subjected to DMARC policy.","example":"100"},"sp":{"type":"string","description":"The subdomain policy for the domain.","enum":["none","reject","quarantine"]},"np":{"type":"string","description":"The non-compliant policy for the domain.","enum":["none","reject","quarantine"]},"psd":{"type":"string","description":"The PSD policy.","enum":["n","y"]},"aspf":{"type":"string","description":"The alignment type for SPF.","example":"r"},"adkim":{"type":"string","description":"The alignment type for DKIM.","example":"s"},"ri":{"type":"string","description":"The reporting interval in seconds.","example":"86400"},"fo":{"description":"Failure options for forensic reporting.","example":["0","1"],"type":"array","items":{"type":"string"}}},"required":["v","rua","ruf","pct"]},"DmarcLookupResult_2":{"type":"object","properties":{"policyStatus":{"type":"string","description":"The policy status for the domain.","enum":["none","reject","missing","invalid","quarantine"]},"subdomainPolicyStatus":{"type":"string","description":"The policy status for subdomains.","enum":["none","reject","missing","invalid","quarantine"]},"status":{"type":"number","description":"The DNS lookup status.","enum":[0,1,2,3]},"pct":{"type":"string","description":"The percentage of messages subjected to DMARC policy.","example":"100"},"reportingStatus":{"type":"boolean","description":"Indicates whether DMARC reporting is enabled.","example":true}},"required":["policyStatus","subdomainPolicyStatus","status","pct","reportingStatus"]},"DmarcRecordObj_2":{"type":"object","properties":{"terms":{"type":"array","items":{"$ref":"#/components/schemas/DmarcRecordTerm_2"}},"deserializedRecord":{"description":"The deserialized DMARC record.","allOf":[{"$ref":"#/components/schemas/DmarcDeserializedRecord_2"}]},"lookupResult":{"description":"The DMARC lookup result.","allOf":[{"$ref":"#/components/schemas/DmarcLookupResult_2"}]}},"required":["terms","deserializedRecord","lookupResult"]},"DmarcMessage_2":{"type":"object","properties":{"key":{"type":"string","description":"Key of the error message","enum":["ERROR_VERIFICATION_FAILURE","ERROR_NO_MANAGED_CNAME_FOUND","ERROR_NO_VALID_RECORD_FOUND","ERROR_PUT_SPF_RECORD","ERROR_INVALID_TERM_KEY","ERROR_INVALID_ASPF_TERM","ERROR_INVALID_ADKIM_TERM","ERROR_INVALID_RUX_TERM","ERROR_INVALID_V_TAG","ERROR_INVALID_P_TAG","ERROR_INVALID_SP_TAG","ERROR_INVALID_NP_TAG","ERROR_INVALID_PSD_TAG","ERROR_INVALID_RI_TAG","ERROR_INVALID_RF_TAG","ERROR_INVALID_PCT_TAG","ERROR_INVALID_FO_TAG","ERROR_MISSING_V_TAG","ERROR_MISSING_P_TAG","ERROR_DUPLICATE_TAG","ERROR_MULTIPLE_RECORD","WARNING_POLICY_NONE","WARNING_SUBDOMAIN_POLICY_NONE","WARNING_NON_EXIST_SUBDOMAIN_POLICY_NONE","WARNING_RUA_TAG","WARNING_RUA_TAG_GUEST","WARNING_PCT","INFO_POLICY_QUARANTINE","INFO_SUBDOMAIN_POLICY_QUARANTINE","INFO_NON_EXIST_SUBDOMAIN_POLICY_QUARANTINE","INFO_SUBDOMAIN_RECORD_NOT_FOUND","INFO_EXTERNAL_VALIDATION","CUSTOM"]},"args":{"type":"object","description":"Arguments for the error messages","additionalProperties":{"type":"string"}},"options":{"type":"object","description":"Additional options for the messages","additionalProperties":{"type":"string"}}},"required":["key","args"]},"DmarcValidation_2":{"type":"object","properties":{"warnings":{"description":"The list of errors found while parsing the DMARC record.","type":"array","items":{"$ref":"#/components/schemas/DmarcMessage_2"}},"errors":{"description":"The list of warnings found while parsing the DMARC record.","type":"array","items":{"$ref":"#/components/schemas/DmarcMessage_2"}},"info":{"description":"The list of info found while parsing the DMARC record.","type":"array","items":{"$ref":"#/components/schemas/DmarcMessage_2"}}},"required":["warnings","errors","info"]},"DmarcRecordResponse_2":{"type":"object","properties":{"domain":{"type":"string","description":"The domain name associated with the DMARC record."},"raw":{"type":"string","description":"The raw DMARC record string.","example":"v=DMARC1"},"object":{"description":"The parsed DMARC record object.","allOf":[{"$ref":"#/components/schemas/DmarcRecordObj_2"}]},"validation":{"description":"Validation messages categorized by severity.","allOf":[{"$ref":"#/components/schemas/DmarcValidation_2"}]},"timestamp":{"type":"number","description":"The timestamp of the DMARC record retrieval.","example":1704067200000},"queryStatus":{"description":"The status of the DMARC record query.","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]}},"required":["domain","raw","object","validation","timestamp","queryStatus"]},"DmarcRecordStructure_2":{"type":"object","properties":{"recordDomainName":{"type":"string","example":"example.com"},"records":{"example":["v=DMARC1; p=none; rua=mailto:adsd@mail.ru"],"type":"array","items":{"type":"string"}}},"required":["recordDomainName","records"]},"DmarcRecordByStructureRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"dmarcRecordStructure":{"description":"DMARC record structure.","example":{"recordDomainName":"example.com","records":["v=DMARC1; p=none; rua=mailto:adsd@mail.ru"]},"allOf":[{"$ref":"#/components/schemas/DmarcRecordStructure_2"}]},"recommendedRua":{"type":"string","description":"Recommended RUA address for record from platform.","example":"a1b2c3d4@rua.easydmarc.com"},"skipOurAddresses":{"type":"boolean","example":true,"default":false}},"required":["dmarcRecordStructure"]},"DmarcRecordStructureRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"inheritRootDmarc":{"type":"boolean","example":true,"default":true,"description":"Inherit the root DMARC record"}},"required":["domain"]},"DmarcRecordStructureResponse_2":{"type":"object","properties":{"recordDomainName":{"type":"string","example":"example.com"},"records":{"example":["v=DMARC1; p=none; rua=mailto:adsd@mail.ru"],"type":"array","items":{"type":"string"}},"queryStatus":{"description":"The status of the DMARC record query.","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]}},"required":["recordDomainName","records","queryStatus"]},"DmarcRecordsBatchRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com"],"type":"array","items":{"type":"string"}},"generate_dmarc_host":{"type":"boolean","example":true},"inheritRootDmarc":{"type":"boolean","example":true,"default":true,"description":"Inherit the root DMARC record"}},"required":["domains"]},"DmarcRuxBatchRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com"],"type":"array","items":{"type":"string"}},"rux":{"type":"number","example":5,"enum":[5,6]}},"required":["domains","rux"]},"DomainVerificationStatusResponse_2":{"type":"object","properties":{"domain":{"type":"string","example":"example.com"},"hasRux":{"type":"boolean","example":true}},"required":["domain","hasRux"]},"DkimTermEnum_2":{"type":"string","enum":["v","g","h","k","n","p","s","t"]},"DkimRecordTerm_2":{"type":"object","properties":{"type":{"allOf":[{"$ref":"#/components/schemas/DkimTermEnum_2"}]},"tag":{"type":"string"},"value":{"type":"string"}},"required":["type","tag","value"]},"DkimRecordTypeEnum_2":{"type":"string","enum":["cname","txt"]},"DkimRecordEntity_2":{"type":"object","properties":{"terms":{"type":"array","items":{"$ref":"#/components/schemas/DkimRecordTerm_2"}},"domain":{"type":"string"},"isWildcard":{"type":"boolean"},"type":{"allOf":[{"$ref":"#/components/schemas/DkimRecordTypeEnum_2"}]},"keyType":{"type":"string","description":"Signing algorithm exactly as the k= tag declares it, unrecognised algorithms included; omitted when the record has no k= tag or no record was resolved","example":"ed25519"},"selector":{"type":"string"}},"required":["terms","domain","isWildcard","type","selector"]},"DkimMessage_2":{"type":"object","properties":{"key":{"type":"string","description":"Key of the error message","enum":["ERROR_INVALID_DOMAIN","ERROR_NO_DKIM_RECORD_FOUND","ERROR_MULTIPLE_RECORD","ERROR_V_TAG_IS_NOT_FIRST","ERROR_INVALID_V_TAG","ERROR_INVALID_TERM","ERROR_EMPTY_G_TAG","ERROR_INVALID_H_TAG","ERROR_INVALID_K_TAG","ERROR_ED25519_REQUIRES_SHA256","ERROR_P_TAG_NOT_EXISTS","ERROR_INVALID_P_TAG","ERROR_INVALID_P_TAG_LENGTH","ERROR_INVALID_S_TAG","ERROR_INVALID_T_TAG","ERROR_INVALID_TAG","INFO_EMPTY_VALUE_P_TAG","CUSTOM"]},"args":{"type":"object","description":"Arguments for the error message","additionalProperties":{"type":"string"}}},"required":["key","args"]},"DkimValidation_2":{"type":"object","properties":{"errors":{"description":"General validation messages for DKIM","type":"array","items":{"$ref":"#/components/schemas/DkimMessage_2"}},"warnings":{"description":"General validation warnings for DKIM","type":"array","items":{"$ref":"#/components/schemas/DkimMessage_2"}},"info":{"description":"General information messages for DKIM","type":"array","items":{"$ref":"#/components/schemas/DkimMessage_2"}}},"required":["errors","warnings","info"]},"DkimRecord_2":{"type":"object","properties":{"raw":{"type":"string","description":"Raw DKIM record string"},"object":{"description":"Parsed DKIM record object","allOf":[{"$ref":"#/components/schemas/DkimRecordEntity_2"}]},"domain":{"type":"string","description":"Domain name for the DKIM record"},"validation":{"description":"DKIM Record validation messages","allOf":[{"$ref":"#/components/schemas/DkimValidation_2"}]},"queryStatus":{"description":"The status of the DKIM record.","example":"NODATA","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the DKIM record lookup.","example":1704067200000}},"required":["raw","object","domain","validation","queryStatus","timestamp"]},"DkimRecordsResponse_2":{"type":"object","properties":{"rootDomain":{"type":"string"},"dkimRecords":{"type":"array","items":{"$ref":"#/components/schemas/DkimRecord_2"}},"validation":{"description":"General validation messages for DKIM","allOf":[{"$ref":"#/components/schemas/DkimValidation_2"}]}},"required":["rootDomain","dkimRecords","validation"]},"SelectorWithDomainName_2":{"type":"object","properties":{"domain":{"type":"string","example":"example.com"},"selector":{"type":"string","example":"google"}},"required":["domain","selector"]},"DkimBySelectorsWthDomainRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"selectors":{"example":[{"domain":"example.com","selector":"s1"},{"domain":"example.com","selector":"s2"},{"domain":"example.com","selector":"google"}],"type":"array","items":{"$ref":"#/components/schemas/SelectorWithDomainName_2"}}},"required":["domain","selectors"]},"DkimBySelectorsWthDomainBatchRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"items":{"example":[{"domain":"example.com","selectors":[{"domain":"example.com","selector":"s1"},{"domain":"example.com","selector":"s2"},{"domain":"example.com","selector":"google"}]}],"type":"array","items":{"$ref":"#/components/schemas/DkimBySelectorsWthDomainRequest_2"}}},"required":["items"]},"AOrMxSourceItem_2":{"type":"object","properties":{"ip":{"type":"string","example":"1.1.1.1"},"title":{"type":"string","example":"alt4.aspmx.l.google.com"}},"required":["ip","title"]},"SpfMessages_2":{"type":"string","enum":["SPF_DNS_RESOLVE_ERROR","TERM_VALUE_DNS_RESOLVE_ERROR","RECURSIVE_LOOKUP","RECORD_NOT_FOUND","MULTIPLE_SPF_RECORDS","MULTIPLE_SPF_RECORDS_GLOBAL","MISSING_VERSION_TAG","MULTIPLE_VERSION_TAG","DUPLICATE_DOMAIN","INVALID_MX_RECORD","INVALID_REDIRECT_TERM","DUPLICATE_REDIRECT_TERM","DUPLICATE_MECHANISM","PTR_USED","UNKNOWN_MECHANISM","TERM_MUST_BE_DOMAIN","INVALID_IP_ADDRESS","INVALID_EXP_MECHANISM","TERM_MUST_BE_IP4","TERM_MUST_BE_IP6","INVALID_CIDR","UNSECURED_MECHANISM","MECHANISM_AFTER_ALL","MECHANISM_AFTER_REDIRECT","MISSING_ALL_AND_REDIRECT_TAG","HAS_ALL_AND_REDIRECT_TAG","DNS_LOOKUP_COUNT","DNS_LOOKUP_LIMIT","SOURCE_DNS_LOOKUP_COUNT","CUSTOM"],"description":"Key of the error message"},"SpfMessage_2":{"type":"object","properties":{"key":{"description":"Key of the error message","allOf":[{"$ref":"#/components/schemas/SpfMessages_2"}]},"args":{"type":"object","description":"Arguments for the error message","additionalProperties":{"type":"string"}}},"required":["key","args"]},"SpfValidationResult_2":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the validation was successful.","example":true},"errors":{"description":"A list of error messages.","type":"array","items":{"$ref":"#/components/schemas/SpfMessage_2"}},"warnings":{"description":"A list of warning messages.","type":"array","items":{"$ref":"#/components/schemas/SpfMessage_2"}}},"required":["success","errors","warnings"]},"AOrMxSource_2":{"type":"object","properties":{"sources":{"description":"Source list","type":"array","items":{"$ref":"#/components/schemas/AOrMxSourceItem_2"}},"validationResult":{"description":"Source validation result","allOf":[{"$ref":"#/components/schemas/SpfValidationResult_2"}]}},"required":["sources","validationResult"]},"SpfRecord_2":{"type":"object","properties":{"policy":{"type":"string","example":"~"},"recordTerms":{"description":"Detailed information about SPF record terms","type":"array","items":{"$ref":"#/components/schemas/SpfRecordTerm_2"}},"dnsLookupCount":{"type":"number","example":3}},"required":["policy","recordTerms","dnsLookupCount"]},"SpfRecordTerm_2":{"type":"object","properties":{"mechanism":{"description":"Mechanism of term","example":["mx","include"],"oneOf":[{"type":"string"},{"enum":["a","mx","redirect","include","ptr","ip4","ip6","exists","exp"]},{"enum":["v","all"]}]},"source":{"description":"Detailed information about SPF record source","oneOf":[{"type":"null"},{"type":"string"},{"$ref":"#/components/schemas/AOrMxSource_2"},{"$ref":"#/components/schemas/SpfRecord_2"}]},"value":{"type":"string","example":"_spf.google.com"},"originalTerm":{"type":"string","example":"include:_spf.google.com"},"domainName":{"type":"string","example":"example.com"},"ordering":{"type":"number","description":"Sequence of terms"},"validationResult":{"description":"Source validation result","allOf":[{"$ref":"#/components/schemas/SpfValidationResult_2"}]},"queryStatus":{"description":"DNS query status","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]}},"required":["mechanism","source","value","originalTerm","domainName","ordering","validationResult","queryStatus"]},"SpfRecordRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"visitedTerms":{"default":[],"type":"array","items":{"$ref":"#/components/schemas/SpfRecordTerm_2"}},"branchDomains":{"example":["example.com"],"default":[],"type":"array","items":{"type":"string"}},"rawRecord":{"type":"string","default":""}},"required":["domain"]},"SpfValidationResponse_2":{"type":"object","properties":{"errors":{"description":"SPF record validation errors","type":"array","items":{"$ref":"#/components/schemas/SpfMessage_2"}},"warnings":{"description":"SPF record validation warnings","type":"array","items":{"$ref":"#/components/schemas/SpfMessage_2"}},"info":{"description":"SPF record validation information","type":"array","items":{"$ref":"#/components/schemas/SpfMessage_2"}}},"required":["errors","warnings","info"]},"SpfRecordResponse_2":{"type":"object","properties":{"domain":{"type":"string","description":"SPF record domain name","example":"example.com"},"raw":{"type":"string","description":"SPF record raw string","example":"v=spf1 include:_spf.example.com ~all"},"object":{"description":"SPF record object representation","allOf":[{"$ref":"#/components/schemas/SpfRecord_2"}]},"validation":{"description":"SPF record validation result","allOf":[{"$ref":"#/components/schemas/SpfValidationResponse_2"}]},"queryStatus":{"description":"SPF record query status","example":"SUCCESS","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"Timestamp of the response","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"SpfRecordBatchRequestItem_2":{"type":"object","properties":{"domain":{"type":"string","example":"example.com"},"visitedTerms":{"default":[],"type":"array","items":{"$ref":"#/components/schemas/SpfRecordTerm_2"}},"branchDomains":{"example":["example.com"],"default":[],"type":"array","items":{"type":"string"}},"rawRecord":{"type":"string","default":""}},"required":["domain"]},"SpfRecordBatchRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"items":{"example":[{"domain":"example.com","rawRecord":""},{"domain":"example2.com","rawRecord":"v=spf1 include:_spf.example.com ~all"}],"type":"array","items":{"$ref":"#/components/schemas/SpfRecordBatchRequestItem_2"}}},"required":["items"]},"SpfRecordLookupResultRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"}},"required":["domain"]},"SpfRecordLookupResult_2":{"type":"object","properties":{"recordDomainName":{"type":"string","example":"example.com"},"records":{"example":["v=SPF1 include:_spf.example.com ~all"],"type":"array","items":{"type":"string"}}},"required":["recordDomainName","records"]},"BimiRecordFileTerm_2":{"type":"object","properties":{"url":{"type":"string"},"content":{"type":"string"}},"required":["url","content"]},"BimiRecordTermEnum_2":{"type":"string","enum":["v","l","a","avp","lps","other"],"description":"The type of the BIMI record term"},"BimiRecordTerm_2":{"type":"object","properties":{"type":{"description":"The type of the BIMI record term","allOf":[{"$ref":"#/components/schemas/BimiRecordTermEnum_2"}]},"tag":{"type":"string","description":"The tag associated with the BIMI record term","example":"v"},"value":{"description":"The value of the BIMI record term, which can be a Buffer, string, or specific term value type","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/BimiRecordFileTerm_2"}]}},"required":["type","tag","value"]},"BimiMessages_2":{"type":"string","enum":["ERROR_MULTIPLE_RECORD","ERROR_EMPTY_RECORD","ERROR_INVALID_TERM","ERROR_INVALID_V_TAG","ERROR_INVALID_TAG_STRING","ERROR_MISSING_V_TAG","ERROR_MISSING_L_TAG","ERROR_MISSING_A_TAG","ERROR_ONLY_ONE_TAG","ERROR_INVALID_SVG_URI","ERROR_INVALID_SVG_PROTOCOL","ERROR_INVALID_AVP_TAG","ERROR_INVALID_LPS_TAG","ERROR_MANAGED_VALIDATION_FAILURE","ERROR_BIMI_CNAME_RECORD_NOT_FOUND","ERROR_BIMI_HOST_NOT_FOUND","ERROR_INCOMPATIBLE_SVG","ERROR_UNABLE_TO_FETCH_SVG","ERROR_SVG_SIZE_EXCEEDS","ERROR_SVGS_IS_NOT_EQUAL","ERROR_NOT_SUPPORTED_SVG_FORMAT","ERROR_SVG_CONVERTER_HUMAN","ERROR_SVG_CONVERTER_FETCH","ERROR_SVG_CONVERTER_DOES_NOT_UPLOAD","ERROR_SVG_CONVERTER_INVALID_FORMAT","ERROR_SVG_CONVERTER_INVALID_OPTION","ERROR_SVG_CONVERTER_INVALID_CONTENT","ERROR_SVG_CONVERTER_IS_NOT_SQUARE","ERROR_UNABLE_TO_FETCH_CERTIFICATE","ERROR_INCOMPATIBLE_CERTIFICATE","ERROR_CERTIFICATE_INVALID_PROTOCOL","ERROR_CERTIFICATE_EXPIRED","ERROR_CERTIFICATE_INVALID_PEM","ERROR_CERTIFICATE_NOT_INCLUDE_DOMAIN","WARNING_INEFFECTIVE_DMARC","WARNING_INEFFECTIVE_DMARC_ERRORS","WARNING_NOT_RESTRICTIVE","WARNING_SVG_SQUARE_FORMAT","WARNING_CERTIFICATE_WILL_EXPIRE","CUSTOM"],"description":"Key of the error message"},"BimiValidationMessage_2":{"type":"object","properties":{"key":{"description":"Key of the error message","allOf":[{"$ref":"#/components/schemas/BimiMessages_2"}]},"args":{"type":"object","description":"Arguments for the error message","additionalProperties":{"type":"string"}}},"required":["key","args"]},"BimiSvgMetaData_2":{"type":"object","properties":{"size":{"type":"number","description":"The size of the SVG file.","example":1024},"title":{"type":"string","description":"The title of the SVG file.","example":"Logo"},"base_profile":{"type":"string","description":"The base profile of the SVG file.","example":"SVG 1.1"},"version":{"type":"string","description":"The version of the SVG file, optional.","example":"1.1"}},"required":["size","title","base_profile"]},"BimiSvgTerm_2":{"type":"object","properties":{"url":{"type":"string","description":"The URL associated with the metadata.","example":"https://example.com"},"errors":{"description":"An array of error messages.","example":[{"code":"ERR001","message":"Invalid format."},{"code":"ERR002","message":"Missing required field."}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}},"warnings":{"description":"An array of warning messages.","example":[{"code":"WARN001","message":"Optional field is empty."},{"code":"WARN002","message":"Field is deprecated."}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}},"metaData":{"description":"The metadata object, which can be null.","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/BimiSvgMetaData_2"}]}},"required":["url","errors","warnings","metaData"]},"BimiCertificateMetadata_2":{"type":"object","properties":{"validTo":{"format":"date-time","type":"string","description":"The date when the certificate becomes invalid.","example":"2025-12-31T23:59:59.000Z"},"validFrom":{"format":"date-time","type":"string","description":"The date when the certificate becomes valid.","example":"2024-01-01T00:00:00.000Z"},"issuerText":{"type":"string","description":"Text describing the issuer of the certificate.","example":"Certificate Authority Inc."},"domainNames":{"type":"string","description":"Domain names associated with the certificate.","example":"example.com"},"serialNumber":{"type":"string","description":"The serial number of the certificate.","example":"1234567890ABCDEF"},"trademarkText":{"type":"string","description":"Text describing the trademark associated with the certificate.","example":"Trademark Example Text"},"organizationName":{"type":"string","description":"The organization name associated with the certificate.","example":"Example Organization LLC"},"certificateImage":{"type":"string","description":"Base64-encoded image of the certificate.","example":"data:image/png;base64,iVBORw0KGgoAAAANS..."}},"required":["validTo","validFrom","issuerText","domainNames","serialNumber","trademarkText","organizationName","certificateImage"]},"BimiCertificateTerm_2":{"type":"object","properties":{"url":{"type":"string","description":"The URL associated with the metadata.","example":"https://example.com"},"errors":{"description":"An array of error messages.","example":[{"code":"ERR001","message":"Invalid format."},{"code":"ERR002","message":"Missing required field."}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}},"warnings":{"description":"An array of warning messages.","example":[{"code":"WARN001","message":"Optional field is empty."},{"code":"WARN002","message":"Field is deprecated."}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}},"metaData":{"description":"The metadata object, which can be null.","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/BimiCertificateMetadata_2"}]}},"required":["url","errors","warnings","metaData"]},"BimiRecordObject_2":{"type":"object","properties":{"terms":{"type":"array","items":{"$ref":"#/components/schemas/BimiRecordTerm_2"}},"version":{"type":"string","example":"v=BIMI1"},"svg":{"$ref":"#/components/schemas/BimiSvgTerm_2"},"certificate":{"$ref":"#/components/schemas/BimiCertificateTerm_2"},"avp":{"type":"string","enum":["personal","brand"],"example":"brand","description":"Avatar Preference tag value."},"lps":{"type":"string","example":"sales-,support-","description":"Local-Part Selector tag value."}},"required":["terms","svg","certificate"]},"BimiValidation_2":{"type":"object","properties":{"warnings":{"description":"The list of errors found while parsing the BIMI record.","example":[{"message":"Invalid BIMI version.","position":{"start":0,"end":6}}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}},"errors":{"description":"The list of errors found while parsing the BIMI record.","example":[{"message":"Invalid BIMI version.","position":{"start":0,"end":6}}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}},"info":{"description":"The list of errors found while parsing the BIMI record.","example":[{"message":"Invalid BIMI version.","position":{"start":0,"end":6}}],"type":"array","items":{"$ref":"#/components/schemas/BimiValidationMessage_2"}}},"required":["warnings","errors","info"]},"BimiRecord_2":{"type":"object","properties":{"domain":{"type":"string","nullable":false,"description":"The domain name of the BIMI record.","example":"example.com"},"raw":{"type":"string","nullable":false,"description":"The raw BIMI record.","example":"v=BIMI1; l=https://example.com/logo.svg"},"object":{"description":"The parsed BIMI record.","allOf":[{"$ref":"#/components/schemas/BimiRecordObject_2"}]},"validation":{"description":"The validation of the BIMI record.","allOf":[{"$ref":"#/components/schemas/BimiValidation_2"}]},"queryStatus":{"description":"The status of the BIMI TXT record.","example":"NOTFOUND","allOf":[{"$ref":"#/components/schemas/DnsRecordStatus_2"}]},"timestamp":{"type":"number","description":"The timestamp of the BIMI record lookup.","example":1704067200000}},"required":["domain","raw","object","validation","queryStatus","timestamp"]},"BatchRecordsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domains":{"example":["example.com","example.org"],"type":"array","items":{"type":"string"}}},"required":["domains"]},"ValidationRequest_2":{"type":"object","properties":{"record":{"type":"string","example":"v=BIMI1;l=https://example.com/logo.svg;a=https://example.com/cert.pem"},"domain":{"type":"string","example":"example.com"}},"required":["record","domain"]},"TlsRptDnsRecordValue_2":{"type":"object","properties":{"version":{"type":"string","enum":["TLSRPTv1"],"example":"TLSRPTv1"},"ruaAddresses":{"example":["mailto:reports@example.com"],"type":"array","items":{"type":"string"}}},"required":["version","ruaAddresses"]},"TlsRptMessage_2":{"type":"object","properties":{"key":{"type":"string","description":"Key of the message","example":"MISSING_DNS_RECORD"},"message":{"type":"string","description":"Interpolated human-readable message"},"args":{"type":"object","description":"Arguments used to interpolate the message","additionalProperties":{"type":"string"}},"name":{"type":"string","description":"Legacy exception class name (wire parity with common-services)"},"recommendation":{"type":"string","description":"Recommendation on how to fix the reported problem"}},"required":["key","message","args"]},"TlsRptLookupResponse_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"raw":{"type":"string","description":"Raw record value, or null when no record was found","nullable":true},"object":{"description":"Parsed record value; null when no record was found or the record is invalid","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/TlsRptDnsRecordValue_2"}]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/TlsRptMessage_2"}}},"required":["domainName","raw","object","errors"]},"TlsRptGenerateRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"ruaAddresses":{"example":["mailto:reports@example.com"],"type":"array","items":{"type":"string"}}},"required":["domain","ruaAddresses"]},"TlsRptGenerateResponse_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"recordName":{"type":"string","nullable":true,"example":"_smtp._tls.example.com"},"recordType":{"type":"string","nullable":true,"example":"TXT"},"recordValue":{"type":"string","nullable":true,"example":"v=TLSRPTv1; rua=mailto:reports@example.com;"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/TlsRptMessage_2"}}},"required":["domainName","recordName","recordType","recordValue","errors"]},"MtaStsDnsRecordValue_2":{"type":"object","properties":{"version":{"type":"string","example":"STSv1"},"id":{"type":"string","example":"20260710120000Z"}},"required":["version","id"]},"MtaStsMessage_2":{"type":"object","properties":{"key":{"type":"string","description":"Key of the message","example":"MISSING_DNS_RECORD"},"message":{"type":"string","description":"Interpolated human-readable message"},"args":{"type":"object","description":"Arguments used to interpolate the message","additionalProperties":{"type":"string"}},"name":{"type":"string","description":"Legacy exception class name (wire parity with common-services)"},"recommendation":{"type":"string","description":"Recommendation on how to fix the reported problem"}},"required":["key","message","args"]},"MtaStsDnsResult_2":{"type":"object","properties":{"raw":{"type":"string","nullable":true},"recordName":{"type":"string","nullable":true,"example":"_mta-sts.example.com"},"recordValue":{"type":"string","nullable":true,"example":"v=STSv1; id=20260710120000Z;"},"object":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/MtaStsDnsRecordValue_2"}]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}}},"required":["raw","recordName","recordValue","object","errors"]},"MtaStsPolicyResult_2":{"type":"object","properties":{"raw":{"type":"string","nullable":true},"fileContent":{"type":"string","nullable":true},"fileUrl":{"type":"string","nullable":true,"example":"https://mta-sts.example.com/.well-known/mta-sts.txt"},"mode":{"type":"string","enum":["enforce","testing","none"],"nullable":true},"mxRecords":{"example":["mail.example.com"],"type":"array","items":{"type":"string"}},"maxAge":{"type":"number","nullable":true,"example":604800},"object":{"type":"object","description":"Parsed policy file key/value object","additionalProperties":true,"nullable":true},"errors":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}}},"required":["raw","fileContent","fileUrl","mode","mxRecords","maxAge","object","errors"]},"MtaStsLookupResponse_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"dns":{"$ref":"#/components/schemas/MtaStsDnsResult_2"},"policy":{"$ref":"#/components/schemas/MtaStsPolicyResult_2"},"generalErrors":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}}},"required":["domainName","dns","policy","generalErrors"]},"MtaStsCnameResponse_2":{"type":"object","properties":{"raw":{"type":"string","nullable":true},"object":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/MtaStsDnsRecordValue_2"}]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}}},"required":["raw","errors","warnings"]},"MtaStsMxRecordItem_2":{"type":"object","properties":{"host":{"type":"string","example":"example.com"},"exchange":{"type":"string","example":"mail.example.com"},"priority":{"type":"number","example":10}},"required":["host","exchange","priority"]},"MtaStsMxRecordsResponse_2":{"type":"object","properties":{"records":{"description":"Normalized (lowercased, trailing-dot-stripped) and sorted MX records","type":"array","items":{"$ref":"#/components/schemas/MtaStsMxRecordItem_2"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}}},"required":["records","errors"]},"MtaStsGenerateRequest_2":{"type":"object","properties":{"domain":{"type":"string","example":"example.com"},"mode":{"type":"string","enum":["enforce","testing","none"],"example":"enforce"},"mxRecords":{"example":["mail.example.com"],"type":"array","items":{"type":"string"}},"maxAge":{"type":"number","example":604800}},"required":["domain","mode","mxRecords","maxAge"]},"MtaStsRecommended_2":{"type":"object","properties":{"mxRecords":{"example":["mail.example.com"],"type":"array","items":{"type":"string"}}},"required":["mxRecords"]},"MtaStsGenerateResponse_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"dns":{"$ref":"#/components/schemas/MtaStsDnsResult_2"},"policy":{"$ref":"#/components/schemas/MtaStsPolicyResult_2"},"recommended":{"description":"Actual MX records found in DNS","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/MtaStsRecommended_2"}]},"generalErrors":{"type":"array","items":{"$ref":"#/components/schemas/MtaStsMessage_2"}}},"required":["domainName","dns","policy","generalErrors"]},"AprfMessage_2":{"type":"object","properties":{"key":{"type":"string","description":"Key of the message","example":"MISSING_DNS_RECORD"},"message":{"type":"string","description":"Interpolated human-readable message"},"args":{"type":"object","description":"Arguments used to interpolate the message","additionalProperties":{"type":"string"}},"recommendation":{"type":"string","description":"Recommendation on how to fix the reported problem"}},"required":["key","message","args"]},"AprfSdi_2":{"type":"object","properties":{"header":{"type":"string","example":"Signer-Info"},"separator":{"type":"string","example":"^"}},"required":["header","separator"]},"AprfRecordValue_2":{"type":"object","properties":{"version":{"type":"string","enum":["APRFv1"],"example":"APRFv1"},"ruaAddresses":{"example":["reports@example.com"],"type":"array","items":{"type":"string"}},"sdi":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/AprfSdi_2"}]}},"required":["version","ruaAddresses","sdi"]},"AprfRecordValidationResult_2":{"type":"object","properties":{"raw":{"type":"string","description":"The record as published"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/AprfMessage_2"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/AprfMessage_2"}},"object":{"description":"Parsed record value; null whenever `errors` is not empty","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/AprfRecordValue_2"}]}},"required":["raw","errors","warnings","object"]},"AprfLookupResponse_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"selector":{"type":"string","example":"selector1","description":"Empty string when no selector was requested"},"recordName":{"type":"string","example":"selector1._aprf._domainkey.example.com"},"isWildcard":{"type":"boolean","example":false,"description":"True when the record found covers every selector rather than the requested one: either the bare `_aprf._domainkey.<domain>` form, which a selector-specific request falls back to, or a `*._aprf._domainkey.<domain>` DNS wildcard, whose content DNS returns for the selector-specific name itself. False when no record was found"},"status":{"type":"number","enum":[0,1,2,3],"description":"Aggregate status of the records at `recordName`: 0 = MISSING, 1 = INVALID, 2 = WARNING, 3 = VALID"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/AprfMessage_2"}},"records":{"type":"array","items":{"$ref":"#/components/schemas/AprfRecordValidationResult_2"}}},"required":["domainName","selector","recordName","isWildcard","status","errors","records"]},"AprfRecordsBySelectorsRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"selectors":{"example":["selector1","selector2"],"type":"array","items":{"type":"string"}}},"required":["domain","selectors"]},"AprfRecordsBySelectorsBatchRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"items":{"example":[{"domain":"example.com","selectors":["selector1","selector2"]},{"domain":"example2.net","selectors":["selector1"]}],"type":"array","items":{"$ref":"#/components/schemas/AprfRecordsBySelectorsRequest_2"}}},"required":["items"]},"AprfBatchLookupResult_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"lookups":{"type":"array","items":{"$ref":"#/components/schemas/AprfLookupResponse_2"}}},"required":["domainName","lookups"]},"AprfGenerateRequest_2":{"type":"object","properties":{"maxAgeMs":{"type":"number","example":5000,"description":"The maximum age of the cache in milliseconds [0]-fetch dns, [-1]-from cache"},"domain":{"type":"string","example":"example.com"},"selector":{"type":"string","example":"selector1","description":"DKIM selector to scope the record to; omit to publish a record covering every selector"},"ruaAddresses":{"example":["reports@example.com"],"type":"array","items":{"type":"string"}},"sdi":{"$ref":"#/components/schemas/AprfSdi_2"}},"required":["domain","ruaAddresses"]},"AprfGenerateResponse_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"recordName":{"type":"string","nullable":true,"example":"selector1._aprf._domainkey.example.com"},"recordType":{"type":"string","nullable":true,"example":"TXT"},"recordValue":{"type":"string","nullable":true,"example":"v=APRFv1; rua=mailto:reports@example.com;"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/AprfMessage_2"}}},"required":["domainName","recordName","recordType","recordValue","errors"]},"PageMeta_5":{"type":"object","properties":{"page":{"type":"number","minimum":1,"default":1},"limit":{"type":"number","minimum":1,"default":10},"total":{"type":"number","minimum":0,"default":0},"pageCount":{"type":"number","minimum":0,"default":0},"hasPreviousPage":{"type":"boolean","default":false},"hasNextPage":{"type":"boolean","default":false}},"required":["page","limit","total","pageCount","hasPreviousPage","hasNextPage"]},"SpfResult_2":{"type":"object","properties":{"rootDomain":{"type":"string","description":"SPF root domain","example":"send.reports.easydmarc.com"},"domain":{"type":"string","description":"SPF domain","example":"send.reports.easydmarc.com"},"scope":{"type":"string","description":"SPF scope","enum":["helo","mfrom"],"example":"helo"},"result":{"type":"string","description":"SPF result","enum":["none","neutral","pass","fail","softfail","temperror","permerror"],"example":"pass"},"isAligned":{"type":"boolean","description":"Whether SPF is aligned","example":true},"isPtrAligned":{"type":"boolean","description":"Whether PTR is aligned","example":false}}},"DkimResult_2":{"type":"object","properties":{"rootDomain":{"type":"string","description":"DKIM root domain","example":"amazonses.com"},"domain":{"type":"string","description":"DKIM domain","example":"amazonses.com"},"selector":{"type":"string","description":"DKIM selector","example":"6gbrjpgwjskckoa6a5zn6fwqkn67xbtt"},"result":{"type":"string","description":"DKIM result","enum":["none","neutral","pass","fail","softfail","temperror","permerror","unknown"],"example":"pass"},"humanResult":{"type":"string","description":"Human-readable result","example":""},"isAligned":{"type":"boolean","description":"Whether DKIM is aligned","example":false},"isPtrAligned":{"type":"boolean","description":"Whether PTR is aligned","example":true}},"required":["rootDomain","domain","selector","humanResult","isAligned","isPtrAligned"]},"DmarcReport_2":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique identifier for the report","example":"4f1721bd-e722-43b1-9bdd-cf7f86b6c4b5"},"objectId":{"type":"string","description":"Object identifier","example":"63896330834733f685f09626"},"dmarcFile":{"type":"string","description":"Associated DMARC file name","nullable":true},"reportId":{"type":"string","description":"Report identifier","example":"1755652172.810369"},"reportType":{"type":"string","description":"Type of the report","example":"dmarc-capable"},"explicitReportType":{"type":"string","description":"Explicit report type classification","enum":["forwarded","non-compliant","threat"],"example":"forwarded"},"policyDomain":{"type":"string","description":"Domain for which the policy applies","example":"test.com"},"startDate":{"format":"date-time","type":"string","description":"Report period start date","example":"2025-08-19T00:00:00.000Z"},"endDate":{"format":"date-time","type":"string","description":"Report period end date","example":"2025-08-19T23:00:00.000Z"},"reportDate":{"format":"date","type":"string","description":"Date when report was generated","example":"2025-08-19"},"createdAt":{"format":"date-time","type":"string","description":"Record creation timestamp","example":"2025-08-20T16:12:45.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Record last update timestamp","example":"2025-08-20T16:12:45.000Z"},"count":{"type":"number","description":"Number of messages matching this report entry","example":100},"disposition":{"type":"string","description":"DMARC disposition (none, quarantine, reject)","example":"none"},"countryCode":{"type":"string","description":"ISO country code of source IP","example":"US"},"email":{"type":"string","description":"Associated email address","example":"test@test.com"},"headerFrom":{"type":"string","description":"Header From domain","example":"reports.easydmarc.com"},"envelopeTo":{"type":"string","description":"Envelope To domain","example":"test.com"},"envelopeFrom":{"type":"string","description":"Envelope From domain","example":"testing.com"},"fo":{"type":"string","description":"Forensic reporting options"},"dkimAligned":{"type":"string","description":"DKIM alignment status"},"spfAligned":{"type":"string","description":"SPF alignment status"},"inboxEmail":{"type":"string","description":"Inbox email address","nullable":true,"example":"46436954e5@rua.easydmarc.asia"},"location":{"type":"array","description":"Geographic coordinates [longitude, latitude]","items":{"type":"number"},"nullable":true,"example":[-122.29,47.58]},"orgDomain":{"type":"string","description":"Organization domain"},"orgName":{"type":"string","description":"Organization name","example":"test.com"},"pct":{"type":"number","description":"Percentage tag value from DMARC policy","example":100},"policyP":{"type":"string","description":"DMARC policy for domain","enum":["none","quarantine","reject"],"example":"reject"},"policySp":{"type":"string","description":"DMARC policy for subdomains","enum":["none","quarantine","reject"],"nullable":true,"example":"none"},"ptr":{"type":"string","description":"PTR record value","example":"a9-108.smtp-out.amazonses.com"},"ptrGroup":{"type":"string","description":"PTR group classification","example":"amazonses.com"},"reasonComment":{"type":"string","description":"Reason comment for policy override","example":"test"},"reasonType":{"type":"string","description":"Reason type for policy override","enum":["forwarded","sampled_out","trusted_forwarder","mailing_list","local_policy","other","none"],"nullable":true,"example":"forwarded"},"senderDomain":{"type":"string","description":"Sender domain","example":"reports.easydmarc.com"},"sourceIpStr":{"type":"string","description":"Source IP address as string","example":"::ffff:54.240.9.107"},"sourceIp":{"type":"string","description":"Source IP address","example":"54.240.9.108"},"spf":{"type":"string","description":"SPF authentication result","example":"pass"},"aspf":{"type":"string","description":"SPF alignment mode","enum":["r","s"],"nullable":true,"example":"r"},"spfResult":{"description":"SPF authentication result details","allOf":[{"$ref":"#/components/schemas/SpfResult_2"}]},"dkim":{"type":"string","description":"DKIM authentication result","example":"pass"},"adkim":{"type":"string","description":"DKIM alignment mode","enum":["r","s"],"nullable":true,"example":"r"},"dkimResults":{"description":"Array of DKIM authentication results","type":"array","items":{"$ref":"#/components/schemas/DkimResult_2"}},"dkimResultsLength":{"type":"number","description":"Number of DKIM results","example":1},"blacklisteds":{"type":"array","description":"Array of blacklist indicators","items":{"type":"string"},"example":["test.test.net"]}},"required":["uuid","objectId","reportId","reportType","policyDomain","startDate","endDate","reportDate","createdAt","updatedAt","count","disposition","countryCode","email","headerFrom","envelopeTo","envelopeFrom","fo","dkimAligned","spfAligned","orgDomain","orgName","pct","policyP","ptr","ptrGroup","reasonComment","senderDomain","sourceIpStr","sourceIp","spf","spfResult","dkim","dkimResults","dkimResultsLength","blacklisteds"]},"FilterValue_2":{"type":"object","properties":{"name":{"type":"string","description":"Field name to filter on","enum":["policy_domain","ptr","ptr_group","source_ip_str","org_name","country_code","temp_id","report_type","count","total_volume","dkim_pass_rate","spf_pass_rate","compliance_rate","disposition","dmarc","spf","dkim","reason_type","sender_domain","dkim_aligned","dkim_selector","dkim_domain","dkim_result","spf_aligned","spf_result","spf_domain","spf_scope","dkim_count","report_id"]},"type":{"type":"string","description":"Filter operator type","enum":["eq","ne","in","nin","nset","sw","ew","sin","range","gt","gte","lt","lte"]},"value":{"type":"object","description":"Value to filter by (type depends on operator)"}},"required":["name","type","value"]},"DateRange_4":{"type":"object","properties":{"from":{"type":"string","description":"Start date in ISO format","example":"2025-07-24T13:24:07.352Z"},"to":{"type":"string","description":"End date in ISO format","example":"2025-07-24T13:24:07.373Z"}},"required":["from","to"]},"OrderField_2":{"type":"object","properties":{"field":{"type":"string","description":"Field name to sort by","enum":["uuid","object_id","temp_id","dmarc_file","report_id","report_type","explicit_report_type","policy_domain","start_date","end_date","report_date","created_at","updated_at","count","disposition","country_code","email","header_from","envelope_from","envelope_to","fo","inbox_email","location","org_domain","org_name","pct","policy_p","policy_sp","ptr","ptr_group","reason_comment","reason_type","sender_domain","source_ip","source_ip_str","spf","aspf","spf_auth_root_domain","spf_auth_domain","spf_auth_scope","spf_auth_result","spf_auth_is_aligned","spf_auth_is_ptr_aligned","dkim","adkim","dkim_auth.root_domain","dkim_auth.domain","dkim_auth.selector","dkim_auth.result","dkim_auth.human_result","dkim_auth.is_aligned","dkim_auth.is_ptr_aligned","dkim_results_length","blacklisteds"],"example":"report_date"},"direction":{"type":"string","description":"Sort direction","enum":["asc","desc"],"example":"desc"}},"required":["field","direction"]},"ReportRawDataRequest_2":{"type":"object","properties":{"domainNames":{"description":"Array of fully qualified domain names","example":["example.com","test.com"],"type":"array","items":{"type":"string"}},"reportType":{"type":"string","description":"Type of DMARC reports to retrieve","enum":["dmarc-capable","non-compliant","threat-unknown","forwarded"]},"dateRange":{"description":"Date range filter","allOf":[{"$ref":"#/components/schemas/DateRange_4"}]},"filters":{"type":"object","description":"Advanced filtering options keyed by field name","additionalProperties":{"$ref":"#/components/schemas/FilterValue_2"}},"properties":{"type":"array","description":"Optional array of specific fields to return in response","items":{"type":"string","enum":["uuid","object_id","temp_id","dmarc_file","report_id","report_type","explicit_report_type","policy_domain","start_date","end_date","report_date","created_at","updated_at","count","disposition","country_code","email","header_from","envelope_from","envelope_to","fo","inbox_email","location","org_domain","org_name","pct","policy_p","policy_sp","ptr","ptr_group","reason_comment","reason_type","sender_domain","source_ip","source_ip_str","spf","aspf","spf_auth_root_domain","spf_auth_domain","spf_auth_scope","spf_auth_result","spf_auth_is_aligned","spf_auth_is_ptr_aligned","dkim","adkim","dkim_auth.root_domain","dkim_auth.domain","dkim_auth.selector","dkim_auth.result","dkim_auth.human_result","dkim_auth.is_aligned","dkim_auth.is_ptr_aligned","dkim_results_length","blacklisteds"]}},"orderFields":{"description":"Array of fields and directions for sorting results","type":"array","items":{"$ref":"#/components/schemas/OrderField_2"}},"page":{"type":"number","description":"Page number for pagination (1-based)","minimum":1,"default":1},"pageSize":{"type":"number","description":"Number of records per page","minimum":1,"maximum":10000,"default":1000}},"required":["domainNames","reportType","dateRange","filters"]},"DistinctPropertyValue_2":{"type":"object","properties":{"value":{"type":"string","description":"The distinct property value","example":"example.com"}},"required":["value"]},"PropertyRequest_2":{"type":"object","properties":{"domainNames":{"description":"Array of fully qualified domain names","example":["example.com","test.com"],"type":"array","items":{"type":"string"}},"reportTypes":{"type":"array","description":"Array of report types to include","items":{"type":"string","enum":["dmarc-capable","non-compliant","threat-unknown","forwarded"]}},"dateRange":{"description":"Date range filter","allOf":[{"$ref":"#/components/schemas/DateRange_4"}]},"property":{"type":"string","description":"The DMARC report field to get distinct values for","enum":["uuid","object_id","temp_id","dmarc_file","report_id","report_type","explicit_report_type","policy_domain","start_date","end_date","report_date","created_at","updated_at","count","disposition","country_code","email","header_from","envelope_from","envelope_to","fo","inbox_email","location","org_domain","org_name","pct","policy_p","policy_sp","ptr","ptr_group","reason_comment","reason_type","sender_domain","source_ip","source_ip_str","spf","aspf","spf_auth_root_domain","spf_auth_domain","spf_auth_scope","spf_auth_result","spf_auth_is_aligned","spf_auth_is_ptr_aligned","dkim","adkim","dkim_auth.root_domain","dkim_auth.domain","dkim_auth.selector","dkim_auth.result","dkim_auth.human_result","dkim_auth.is_aligned","dkim_auth.is_ptr_aligned","dkim_results_length","blacklisteds"],"default":"policy_domain"},"filters":{"type":"object","description":"Advanced filtering options keyed by field name","additionalProperties":{"$ref":"#/components/schemas/FilterValue_2"}},"page":{"type":"number","description":"Page number for pagination (1-based)","minimum":1,"default":1},"pageSize":{"type":"number","description":"Number of records per page (max 100)","minimum":1,"maximum":100,"default":100}},"required":["domainNames","reportTypes","dateRange","property","filters"]},"AggregatedData_2":{"type":"object","properties":{"spfPassQty":{"type":"number","description":"Count of emails with SPF pass","example":15420},"dkimPassQty":{"type":"number","description":"Count of emails with DKIM pass","example":14850},"spfFailQty":{"type":"number","description":"Count of emails with SPF fail","example":2340},"dkimFailQty":{"type":"number","description":"Count of emails with DKIM fail","example":2910},"dispositionNoneQty":{"type":"number","description":"Count of emails with DMARC disposition 'none'","example":17760},"dispositionRejectQty":{"type":"number","description":"Count of emails with DMARC disposition 'reject'","example":0},"dispositionQuarantineQty":{"type":"number","description":"Count of emails with DMARC disposition 'quarantine'","example":0}},"required":["spfPassQty","dkimPassQty","spfFailQty","dkimFailQty","dispositionNoneQty","dispositionRejectQty","dispositionQuarantineQty"]},"AggregationObject_2":{"type":"object","properties":{"field":{"type":"string","description":"Field to aggregate by","enum":["spf","dkim","disposition"]},"value":{"type":"string","description":"Value to match for aggregation","enum":["pass","fail","none","quarantine","reject"]}},"required":["field","value"]},"AggregationRequest_2":{"type":"object","properties":{"domainNames":{"description":"Array of fully qualified domain names","example":["example.com","test.com"],"type":"array","items":{"type":"string"}},"reportTypes":{"type":"array","description":"Array of report types to include","items":{"type":"string","enum":["dmarc-capable","non-compliant","threat-unknown","forwarded"]}},"dateRange":{"description":"Date range filter","allOf":[{"$ref":"#/components/schemas/DateRange_4"}]},"aggregations":{"description":"Array of field-value pairs to aggregate by","type":"array","items":{"$ref":"#/components/schemas/AggregationObject_2"}},"filters":{"type":"object","description":"Advanced filtering options keyed by field name","additionalProperties":{"$ref":"#/components/schemas/FilterValue_2"}},"groupByFields":{"type":"array","description":"Fields to group aggregation results by","default":["policy_domain"],"items":{"type":"string","enum":["uuid","object_id","temp_id","dmarc_file","report_id","report_type","explicit_report_type","policy_domain","start_date","end_date","report_date","created_at","updated_at","count","disposition","country_code","email","header_from","envelope_from","envelope_to","fo","inbox_email","location","org_domain","org_name","pct","policy_p","policy_sp","ptr","ptr_group","reason_comment","reason_type","sender_domain","source_ip","source_ip_str","spf","aspf","spf_auth_root_domain","spf_auth_domain","spf_auth_scope","spf_auth_result","spf_auth_is_aligned","spf_auth_is_ptr_aligned","dkim","adkim","dkim_auth.root_domain","dkim_auth.domain","dkim_auth.selector","dkim_auth.result","dkim_auth.human_result","dkim_auth.is_aligned","dkim_auth.is_ptr_aligned","dkim_results_length","blacklisteds"]}},"orderFields":{"description":"Array of fields and directions for sorting results","type":"array","items":{"$ref":"#/components/schemas/OrderField_2"}},"page":{"type":"number","description":"Page number for pagination (1-based)","minimum":1,"default":1},"pageSize":{"type":"number","description":"Number of records per page (max 100)","minimum":1,"maximum":100,"default":100}},"required":["domainNames","reportTypes","dateRange","aggregations","filters"]},"DomainWithReportTypes_2":{"type":"object","properties":{"domainName":{"type":"string","description":"Fully qualified domain name","example":"example.com"},"reportTypes":{"type":"array","description":"Array of report types for this domain","items":{"type":"string","enum":["dmarc-capable","non-compliant","threat-unknown","forwarded"]}}},"required":["domainName","reportTypes"]},"VolumeRequest_2":{"type":"object","properties":{"domainsWithReportTypes":{"description":"Array of domains with their report types","type":"array","items":{"$ref":"#/components/schemas/DomainWithReportTypes_2"}},"dateRange":{"description":"Date range filter","allOf":[{"$ref":"#/components/schemas/DateRange_4"}]},"filters":{"type":"object","description":"Advanced filtering options keyed by field name","additionalProperties":{"$ref":"#/components/schemas/FilterValue_2"}},"groupByFields":{"type":"array","description":"Fields to group volume data by (excludes count field)","default":["policy_domain"],"items":{"type":"string","enum":["uuid","object_id","temp_id","dmarc_file","report_id","report_type","explicit_report_type","policy_domain","start_date","end_date","report_date","created_at","updated_at","count","disposition","country_code","email","header_from","envelope_from","envelope_to","fo","inbox_email","location","org_domain","org_name","pct","policy_p","policy_sp","ptr","ptr_group","reason_comment","reason_type","sender_domain","source_ip","source_ip_str","spf","aspf","spf_auth_root_domain","spf_auth_domain","spf_auth_scope","spf_auth_result","spf_auth_is_aligned","spf_auth_is_ptr_aligned","dkim","adkim","dkim_auth.root_domain","dkim_auth.domain","dkim_auth.selector","dkim_auth.result","dkim_auth.human_result","dkim_auth.is_aligned","dkim_auth.is_ptr_aligned","dkim_results_length","blacklisteds"]}},"orderFields":{"description":"Array of fields and directions for sorting results","type":"array","items":{"$ref":"#/components/schemas/OrderField_2"}},"page":{"type":"number","description":"Page number for pagination (1-based)","minimum":1,"default":1},"pageSize":{"type":"number","description":"Number of records per page (max 100)","minimum":1,"maximum":100,"default":100}},"required":["domainsWithReportTypes","dateRange","filters"]},"DmarcReportVolumePerPeriod_2":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique identifier for the report","example":"4f1721bd-e722-43b1-9bdd-cf7f86b6c4b5"},"objectId":{"type":"string","description":"Object identifier","example":"63896330834733f685f09626"},"dmarcFile":{"type":"string","description":"Associated DMARC file name","nullable":true},"reportId":{"type":"string","description":"Report identifier","example":"1755652172.810369"},"reportType":{"type":"string","description":"Type of the report","example":"dmarc-capable"},"explicitReportType":{"type":"string","description":"Explicit report type classification","enum":["forwarded","non-compliant","threat"],"example":"forwarded"},"policyDomain":{"type":"string","description":"Domain for which the policy applies","example":"test.com"},"startDate":{"format":"date-time","type":"string","description":"Report period start date","example":"2025-08-19T00:00:00.000Z"},"endDate":{"format":"date-time","type":"string","description":"Report period end date","example":"2025-08-19T23:00:00.000Z"},"reportDate":{"format":"date","type":"string","description":"Date when report was generated","example":"2025-08-19"},"createdAt":{"format":"date-time","type":"string","description":"Record creation timestamp","example":"2025-08-20T16:12:45.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"Record last update timestamp","example":"2025-08-20T16:12:45.000Z"},"count":{"type":"number","description":"Number of messages matching this report entry","example":100},"disposition":{"type":"string","description":"DMARC disposition (none, quarantine, reject)","example":"none"},"countryCode":{"type":"string","description":"ISO country code of source IP","example":"US"},"email":{"type":"string","description":"Associated email address","example":"test@test.com"},"headerFrom":{"type":"string","description":"Header From domain","example":"reports.easydmarc.com"},"envelopeTo":{"type":"string","description":"Envelope To domain","example":"test.com"},"envelopeFrom":{"type":"string","description":"Envelope From domain","example":"testing.com"},"fo":{"type":"string","description":"Forensic reporting options"},"dkimAligned":{"type":"string","description":"DKIM alignment status"},"spfAligned":{"type":"string","description":"SPF alignment status"},"inboxEmail":{"type":"string","description":"Inbox email address","nullable":true,"example":"46436954e5@rua.easydmarc.asia"},"location":{"type":"array","description":"Geographic coordinates [longitude, latitude]","items":{"type":"number"},"nullable":true,"example":[-122.29,47.58]},"orgDomain":{"type":"string","description":"Organization domain"},"orgName":{"type":"string","description":"Organization name","example":"test.com"},"pct":{"type":"number","description":"Percentage tag value from DMARC policy","example":100},"policyP":{"type":"string","description":"DMARC policy for domain","enum":["none","quarantine","reject"],"example":"reject"},"policySp":{"type":"string","description":"DMARC policy for subdomains","enum":["none","quarantine","reject"],"nullable":true,"example":"none"},"ptr":{"type":"string","description":"PTR record value","example":"a9-108.smtp-out.amazonses.com"},"ptrGroup":{"type":"string","description":"PTR group classification","example":"amazonses.com"},"reasonComment":{"type":"string","description":"Reason comment for policy override","example":"test"},"reasonType":{"type":"string","description":"Reason type for policy override","enum":["forwarded","sampled_out","trusted_forwarder","mailing_list","local_policy","other","none"],"nullable":true,"example":"forwarded"},"senderDomain":{"type":"string","description":"Sender domain","example":"reports.easydmarc.com"},"sourceIpStr":{"type":"string","description":"Source IP address as string","example":"::ffff:54.240.9.107"},"sourceIp":{"type":"string","description":"Source IP address","example":"54.240.9.108"},"spf":{"type":"string","description":"SPF authentication result","example":"pass"},"aspf":{"type":"string","description":"SPF alignment mode","enum":["r","s"],"nullable":true,"example":"r"},"spfResult":{"description":"SPF authentication result details","allOf":[{"$ref":"#/components/schemas/SpfResult_2"}]},"dkim":{"type":"string","description":"DKIM authentication result","example":"pass"},"adkim":{"type":"string","description":"DKIM alignment mode","enum":["r","s"],"nullable":true,"example":"r"},"dkimResults":{"description":"Array of DKIM authentication results","type":"array","items":{"$ref":"#/components/schemas/DkimResult_2"}},"dkimResultsLength":{"type":"number","description":"Number of DKIM results","example":1},"blacklisteds":{"type":"array","description":"Array of blacklist indicators","items":{"type":"string"},"example":["test.test.net"]},"qty":{"type":"number","description":"Volume quantity for the period (same as count)","example":15420},"date":{"type":"string","description":"Date representing the time period (YYYY-MM-DD format)","format":"date","example":"2024-01-15"}},"required":["uuid","objectId","reportId","reportType","policyDomain","startDate","endDate","reportDate","createdAt","updatedAt","count","disposition","countryCode","email","headerFrom","envelopeTo","envelopeFrom","fo","dkimAligned","spfAligned","orgDomain","orgName","pct","policyP","ptr","ptrGroup","reasonComment","senderDomain","sourceIpStr","sourceIp","spf","spfResult","dkim","dkimResults","dkimResultsLength","blacklisteds","qty","date"]},"ReportsForPeriodRequest_2":{"type":"object","properties":{"domainsWithReportTypes":{"description":"Array of domains with their report types","type":"array","items":{"$ref":"#/components/schemas/DomainWithReportTypes_2"}},"dateRange":{"description":"Date range filter","allOf":[{"$ref":"#/components/schemas/DateRange_4"}]},"filters":{"type":"object","description":"Advanced filtering options keyed by field name","additionalProperties":{"$ref":"#/components/schemas/FilterValue_2"}},"period":{"type":"string","description":"Time period for aggregation","enum":["day","week","month"],"default":"day"},"groupByFields":{"type":"array","description":"Fields to group volume data by","default":["policy_domain"],"items":{"type":"string","enum":["uuid","object_id","temp_id","dmarc_file","report_id","report_type","explicit_report_type","policy_domain","start_date","end_date","report_date","created_at","updated_at","count","disposition","country_code","email","header_from","envelope_from","envelope_to","fo","inbox_email","location","org_domain","org_name","pct","policy_p","policy_sp","ptr","ptr_group","reason_comment","reason_type","sender_domain","source_ip","source_ip_str","spf","aspf","spf_auth_root_domain","spf_auth_domain","spf_auth_scope","spf_auth_result","spf_auth_is_aligned","spf_auth_is_ptr_aligned","dkim","adkim","dkim_auth.root_domain","dkim_auth.domain","dkim_auth.selector","dkim_auth.result","dkim_auth.human_result","dkim_auth.is_aligned","dkim_auth.is_ptr_aligned","dkim_results_length","blacklisteds"]}},"orderFields":{"description":"Array of fields and directions for sorting results","type":"array","items":{"$ref":"#/components/schemas/OrderField_2"}},"page":{"type":"number","description":"Page number for pagination (1-based)","minimum":1,"default":1},"pageSize":{"type":"number","description":"Number of records per page","minimum":1,"default":100}},"required":["domainsWithReportTypes","dateRange","filters"]},"PassRate_2":{"type":"object","properties":{"policyDomain":{"type":"string","description":"The policy domain","example":"example.com"},"dkimPassRate":{"type":"number","description":"DKIM authentication pass rate as a percentage (0.0-100.0)","example":94.5},"spfPassRate":{"type":"number","description":"SPF authentication pass rate as a percentage (0.0-100.0)","example":97.2},"count":{"type":"string","description":"Sum of total volume","example":"1345"}},"required":["policyDomain","dkimPassRate","spfPassRate","count"]},"PassRateDataRequest_2":{"type":"object","properties":{"domainsWithReportTypes":{"description":"Array of domains with their report types","type":"array","items":{"$ref":"#/components/schemas/DomainWithReportTypes_2"}},"dateRange":{"description":"Date range filter","allOf":[{"$ref":"#/components/schemas/DateRange_4"}]},"filters":{"type":"object","description":"Advanced filtering options keyed by field name","additionalProperties":{"$ref":"#/components/schemas/FilterValue_2"}},"page":{"type":"number","description":"Page number for pagination (1-based)","minimum":1,"default":1},"pageSize":{"type":"number","description":"Number of records per page (max 100)","minimum":1,"maximum":100,"default":100}},"required":["domainsWithReportTypes","dateRange","filters"]},"ApiError":{"description":"Uniform error body returned for all non-2xx responses.","type":"object","properties":{"status":{"format":"int32","description":"HTTP status code.","type":"integer","example":404},"error":{"description":"Machine-readable error code.","type":"string","example":"not_found"},"message":{"description":"Human-readable error message.","type":"string","example":"Resource not found: org-123"},"resourceId":{"description":"Optional: the objectId involved (NotFound/Conflict/ParentNotFound).","type":"string","example":"org-123"},"requiredScope":{"description":"Optional: the scope that was required but missing (Forbidden).","type":"string","example":"action__role__create"},"details":{"description":"Optional: the specific items a conflict names, e.g. the already-invited emails on a 409 from createInvitations.","type":"array","items":{"type":"string"},"example":["jane@acme.com","john@acme.com"]},"limit":{"format":"int32","description":"Optional, only on 409 api_client_limit: the most live (not deleted) api-clients the owning tenant may hold.","type":"integer","example":10},"current":{"format":"int32","description":"Optional, only on 409 api_client_limit: how many live (not deleted) api-clients the owning tenant holds now.","type":"integer","example":10}}},"MemberResourceGrant":{"description":"A resource a member holds role(s) on: its objectId, display name and tenant level, the role name(s) held there, and (single-member endpoint only) the effective scopes at this resource.","type":"object","properties":{"resource":{"description":"ObjectId of the resource the role is assigned on (this resource, an ancestor, or a descendant).","type":"string"},"resourceName":{"description":"Display name (title) of that resource, or null if it has none.","type":"string"},"resourceType":{"description":"Tenant level of that resource.","enum":["partner","organization","workspace","domain"],"type":"string"},"roles":{"description":"Role name(s) the member holds on this resource (usually one; multiple when the member is in more than one role:* subgroup there).","type":"array","items":{"type":"string"}},"roleTitles":{"description":"Display title of each role in roles, by role name, read from where the role is defined. A role with no title is left out: fall back to its name.","type":"object","additionalProperties":{"type":"string"}},"scopes":{"description":"Effective authorization scopes the member holds at this resource. Populated only by the single-member endpoint; omitted in the members list. A single '*' means all scopes (super-admin).","type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/ScopeEnum"},{"type":"string"}]}}}},"ResourceMemberResponse":{"description":"A tenant member with all resources their role(s) reach. Each 'resources' entry is the objectId/name/level a role is assigned on and the role name(s) held there (single-member endpoint also includes the effective scopes at each resource).","type":"object","properties":{"id":{"description":"Keycloak user id.","type":"string"},"email":{"description":"Email address, or null.","type":"string"},"avatar_url":{"description":"Avatar URL — the user's 'avatar' attribute, falling back to 'picture' then 'avatar_url'; or null if none is set.","type":"string"},"avatarColor":{"description":"The hex colour of the member's initials badge (the 'avatarColor' attribute), or null. The avatar signal consumers can actually rely on — a real avatar image is set on roughly 1 user in 5000, while avatarColor is an order of magnitude more common.","type":"string","example":"#DA6969"},"firstname":{"description":"First name, or null.","type":"string"},"lastname":{"description":"Last name, or null.","type":"string"},"idp":{"description":"Identity provider / federated source alias, or null for local users.","type":"string"},"last_activity":{"description":"Epoch-millis timestamp (as a string) of the member's last activity — stamped on each login or token refresh. Null if the member has not authenticated since last-activity tracking was enabled (render as 'Never').","type":"string"},"resources":{"description":"Every resource the member holds role(s) on — assigned here, inherited from an ancestor, or assigned at a descendant sub-tenant.","type":"array","items":{"$ref":"#/components/schemas/MemberResourceGrant"}}}},"ScopeEnum":{"description":"A known authorization scope. The scope fields accept any string; this enum documents the catalog's known scopes (partner/organization/workspace incl. domain mirrors/domain).","enum":["action__ai_assist__chat","action__ai_assist__create","action__ai_assist__delete","action__ai_assist__publish","action__ai_assist__read","action__ai_assist__update","action__ai_assist_agent__create","action__ai_assist_agent__delete","action__ai_assist_agent__read","action__ai_assist_agent__update","action__ai_assist_agent_run__create","action__ai_assist_chat__create","action__ai_assist_chat__delete","action__ai_assist_chat__read","action__ai_assist_chat__update","action__ai_assist_live_session__create","action__ai_assist_managed_agent__create","action__ai_assist_managed_agent__update","action__ai_assist_memory__create","action__ai_assist_memory__delete","action__ai_assist_memory__read","action__ai_assist_memory__update","action__ai_assist_placement__create","action__ai_assist_placement__delete","action__ai_assist_placement__read","action__ai_assist_placement__update","action__ai_assist_release__create","action__ai_assist_schedule__create","action__ai_assist_schedule__delete","action__ai_assist_schedule__read","action__ai_assist_schedule__update","action__ai_assist_share_link__create","action__ai_assist_user_memory__delete","action__alert_log__read","action__alert_rule__create","action__alert_rule__delete","action__alert_rule__read","action__alert_rule__update","action__api_client__create","action__api_client__delete","action__api_client__read","action__api_client__update","action__aprf__create","action__aprf__read","action__audit_logs__read","action__billing__create","action__billing__delete","action__billing__read","action__billing__update","action__blocklist__create","action__blocklist__delete","action__blocklist__read","action__blocklist__update","action__brep__create","action__brep__delete","action__brep__read","action__brep__update","action__custom_smtp__create","action__custom_smtp__delete","action__custom_smtp__read","action__custom_smtp__update","action__dashboard__create","action__dashboard__delete","action__dashboard__read","action__dashboard__update","action__details__read","action__details__update","action__dns_change_request__create","action__dns_change_request__delete","action__dns_change_request__read","action__dns_change_request__update","action__dns_management__create","action__dns_management__delete","action__dns_management__read","action__dns_management__update","action__dns_overview__read","action__domain__create","action__domain__delete","action__domain__move","action__domain_ai_assist__chat","action__domain_ai_assist__create","action__domain_ai_assist__delete","action__domain_ai_assist__publish","action__domain_ai_assist__read","action__domain_ai_assist__update","action__domain_alert_log__read","action__domain_aprf__create","action__domain_aprf__read","action__domain_blocklist__create","action__domain_blocklist__delete","action__domain_blocklist__read","action__domain_blocklist__update","action__domain_brep__create","action__domain_brep__delete","action__domain_brep__read","action__domain_brep__update","action__domain_details__read","action__domain_details__update","action__domain_dns_change_request__create","action__domain_dns_change_request__delete","action__domain_dns_change_request__read","action__domain_dns_change_request__update","action__domain_dns_management__create","action__domain_dns_management__delete","action__domain_dns_management__read","action__domain_dns_management__update","action__domain_dns_overview__read","action__domain_domain__move","action__domain_engagement__read","action__domain_espf__create","action__domain_espf__delete","action__domain_espf__read","action__domain_espf__update","action__domain_geo__create","action__domain_geo__delete","action__domain_geo__read","action__domain_geo__update","action__domain_google_postmaster__read","action__domain_mbimi__create","action__domain_mbimi__delete","action__domain_mbimi__read","action__domain_mbimi__update","action__domain_mdkim__create","action__domain_mdkim__delete","action__domain_mdkim__read","action__domain_mdkim__update","action__domain_mdmarc__create","action__domain_mdmarc__delete","action__domain_mdmarc__read","action__domain_mdmarc__update","action__domain_member__create","action__domain_member__delete","action__domain_member__read","action__domain_member__update","action__domain_microsoft_snds__read","action__domain_mmta_sts__read","action__domain_mmta_sts__update","action__domain_monitoring__create","action__domain_monitoring__delete","action__domain_monitoring__read","action__domain_monitoring__update","action__domain_reporting__create","action__domain_reporting__delete","action__domain_reporting__read","action__domain_reporting__update","action__domain_role__read","action__domain_rua__create","action__domain_rua__delete","action__domain_rua__read","action__domain_rua__update","action__domain_ruf__create","action__domain_ruf__delete","action__domain_ruf__read","action__domain_ruf__update","action__domain_spam_intelligence__read","action__domain_threat_intelligence__create","action__domain_threat_intelligence__delete","action__domain_threat_intelligence__read","action__domain_threat_intelligence__update","action__domain_tls__create","action__domain_tls__delete","action__domain_tls__read","action__domain_tls__update","action__email_investigation__create","action__email_investigation__delete","action__email_investigation__read","action__email_verification__create","action__email_verification__delete","action__email_verification__read","action__engagement__read","action__espf__create","action__espf__delete","action__espf__read","action__espf__update","action__geo__create","action__geo__delete","action__geo__read","action__geo__update","action__google_postmaster__read","action__inbox_placement__create","action__inbox_placement__delete","action__inbox_placement__read","action__integration__create","action__integration__delete","action__integration__read","action__integration__update","action__ip_safelisting__create","action__ip_safelisting__delete","action__ip_safelisting__read","action__ip_safelisting__update","action__label__create","action__label__delete","action__label__read","action__label__update","action__mbimi__create","action__mbimi__delete","action__mbimi__read","action__mbimi__update","action__mdkim__create","action__mdkim__delete","action__mdkim__read","action__mdkim__update","action__mdmarc__create","action__mdmarc__delete","action__mdmarc__read","action__mdmarc__update","action__member__create","action__member__delete","action__member__read","action__member__update","action__microsoft_snds__read","action__mmta_sts__read","action__mmta_sts__update","action__monitoring__create","action__monitoring__delete","action__monitoring__read","action__monitoring__update","action__organization__create","action__organization__delete","action__organization__read","action__organization__update","action__public_api__create","action__public_api__delete","action__public_api__read","action__public_api__update","action__reach","action__reporting__create","action__reporting__delete","action__reporting__read","action__reporting__update","action__role__create","action__role__delete","action__role__read","action__role__update","action__rua__create","action__rua__delete","action__rua__read","action__rua__update","action__ruf__create","action__ruf__delete","action__ruf__read","action__ruf__update","action__sender_api__create","action__sender_api__delete","action__sender_api__read","action__sender_api__update","action__spam_intelligence__read","action__sso__create","action__sso__delete","action__sso__read","action__sso__update","action__threat_intelligence__create","action__threat_intelligence__delete","action__threat_intelligence__read","action__threat_intelligence__update","action__tls__create","action__tls__delete","action__tls__read","action__tls__update","action__touchpoint__create","action__touchpoint__delete","action__touchpoint__read","action__touchpoint__update","action__user__create","action__webhook__create","action__webhook__delete","action__webhook__read","action__webhook__update","action__workspace__create","action__workspace__delete"],"type":"string"},"WorkspaceCreateRequest":{"description":"Create a workspace under an organization.","required":["organizationId","name"],"type":"object","properties":{"organizationId":{"description":"The owning organization's objectId.","type":"string","example":"org_68231dcfeb8e9f092a052b88"},"name":{"description":"Workspace name. Unique among the organization's workspaces, compared case-insensitively on the trimmed value.","type":"string","example":"EU Marketing"}}},"WorkspaceMemberPage":{"description":"A page of workspace members.","type":"object","properties":{"items":{"description":"The members on this page, in the SPI's banded order (assigned here, then on a sub-tenant, then inherited from above).","type":"array","items":{"$ref":"#/components/schemas/ResourceMemberResponse"}},"totalCount":{"format":"int32","description":"Total number of members reaching the workspace.","type":"integer","example":12},"page":{"format":"int32","description":"The 1-based page number returned.","type":"integer","example":1},"pageSize":{"format":"int32","description":"Page size used.","type":"integer","example":20}}},"WorkspacePage":{"description":"A page of workspaces.","type":"object","properties":{"items":{"description":"The workspaces on this page.","type":"array","items":{"$ref":"#/components/schemas/WorkspaceResponse"}},"totalCount":{"format":"int32","description":"Total number of workspaces the caller can reach under the organization.","type":"integer","example":3},"page":{"format":"int32","description":"The 1-based page number returned.","type":"integer","example":1},"pageSize":{"format":"int32","description":"Page size used.","type":"integer","example":20}}},"WorkspaceResponse":{"description":"A workspace as the public API presents it.","type":"object","properties":{"id":{"description":"Workspace id (a UUID).","type":"string","example":"b2c1f9a4-1234-5678-90ab-cdef12345678"},"name":{"description":"Workspace name.","type":"string","example":"EU Marketing"},"organizationId":{"description":"The owning organization's objectId.","type":"string","example":"org_68231dcfeb8e9f092a052b88"},"createdAt":{"description":"Creation time, ISO-8601 UTC. Null for workspaces created before the timestamp was recorded (September 2026) unless backfilled.","type":"string","example":"2026-03-14T09:21:00Z","nullable":true},"memberCount":{"format":"int32","description":"Number of members whose role reaches this workspace, inherited organization and partner members included — so even a brand-new workspace counts the organization's admins. On the list it is present only when includeMemberCount=true; on single reads and write read-backs it is absent only when the read-back could not see the workspace.","type":"integer","example":12,"nullable":true}}},"WorkspaceUpdateRequest":{"description":"Rename a workspace.","required":["name"],"type":"object","properties":{"name":{"description":"The new workspace name. Unique among the organization's workspaces, compared case-insensitively on the trimmed value.","type":"string","example":"EU Marketing"}}},"PageResponse_2":{"type":"object","properties":{"items":{"type":"array","items":{}},"totalCount":{"type":"number"}},"required":["items","totalCount"]},"Page_4":{"type":"object","properties":{"index":{"type":"number","default":1,"minimum":1},"size":{"type":"number","default":10,"minimum":1}},"required":["index","size"]},"DomainMode_2":{"type":"string","enum":["sending","parked"]},"ApiException_2":{"type":"object","properties":{"reason":{"type":"string","description":"Underlying error message that caused this exception"},"statusCode":{"type":"number","description":"HTTP status code"},"meta":{"type":"object","additionalProperties":true,"description":"Free-form metadata associated with the exception"}},"required":["statusCode"]},"SortDirection_4":{"type":"string","enum":["ASC","DESC"]},"CreditStats_2":{"type":"object","properties":{"allocated":{"type":"number","description":"originally given"},"balance":{"type":"number","description":"still available"},"spent":{"type":"number","description":"already used"}},"required":["allocated","balance","spent"]},"SingleFieldSort_2":{"type":"object","properties":{"field":{"description":"`T` is erased at runtime, so the enum cannot be enforced here — that is each endpoint's job, via\n`applySort`. What this pattern does enforce is that the value is an identifier path and nothing\nelse, because every consumer interpolates it into an ORDER BY and TypeORM does not escape a\nproperty path it cannot resolve. Every sort enum in the repository satisfies it.","pattern":"^[A-Za-z_][A-Za-z0-9_.]*$","type":"string"},"direction":{"allOf":[{"$ref":"#/components/schemas/SortDirection_4"}]}},"required":["field","direction"]},"DomainUnavailabilityReason_2":{"type":"string","enum":["VERIFIED_BY_ANOTHER_ORG","ROOT_DOMAIN_VERIFIED_BY_ANOTHER_ORG","SUB_DOMAIN_HAS_RUA_AND_VERIFIED_BY_ANOTHER_ORG","VERIFIED_BY_ANOTHER_WORKSPACE","ROOT_DOMAIN_VERIFIED_BY_ANOTHER_WORKSPACE","SUB_DOMAIN_HAS_RUA_AND_VERIFIED_BY_ANOTHER_WORKSPACE"]},"EntriRecord_2":{"type":"object","properties":{"type":{"type":"string"},"host":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"number"}},"required":["type","host","value","ttl"]},"EntriConfig_2":{"type":"object","properties":{"applicationId":{"type":"string"},"token":{"type":"string"},"prefilledDomain":{"type":"string"},"userId":{"type":"string"},"overrideSPF":{"type":"boolean"},"dnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/EntriRecord_2"}}},"required":["applicationId","token","dnsRecords"]},"DomainPresenceFeature_2":{"type":"string","enum":["sendgrid","aws_ses","mailgun","salesforce","klaviyo","highlevel","google_postmaster","hubspot","mailchimp","mandrill","shopify","m365","microsoft_dynamics","microsoft_snds","google_workspace","sparkpost","campaign_monitor","salesforce_crm","reputation_monitoring","active_campaign","constant_contact","braze","cloudflare_email","wooxy","clickdimensions","marketo","manual"],"description":"Distinct email activity integrations connected to the domain OR to any of its subdomains. Rolled up like the engagement metrics below, and matching the `features` / `connected` filters, which resolve a root through its subdomains too."},"DnsProvider_3":{"type":"string","enum":["akamai-dns","azure-dns","cloudflare-dns","cloudfloor-dns","cloudns-dns","digitalocean-dns","dnsmadeeasy-dns","dnsimple-dns","dreamhost-dns","easydns-dns","gandi-dns","godaddy-dns","google-dns","hostinger-dns","namecom-dns","namecheap-dns","ovh-dns","route53","transip-dns","wix-dns"],"description":"DNS provider key of the active integration"},"ResourceScope_2":{"type":"string","enum":["easysender","easydmarc","platform"],"description":"Source of the label. EasySender / EasyDMARC labels are visible only to that product. Platform labels are visible to both products and only PLATFORM admin can mutate. Frontends use this to render a source badge in PLATFORM admin view."},"LabelAttributes_2":{"type":"object","properties":{"textColor":{"type":"string","description":"Hex text color code. 6 or 8 chars (8-char form has alpha).","example":"#EF4444","pattern":"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$"},"backgroundColor":{"type":"string","description":"Hex background color code. 6 or 8 chars (8-char form has alpha).","example":"#FEE2E2","pattern":"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$"},"outlineColor":{"type":"string","description":"Hex outline color code. 6 or 8 chars. EasyDMARC-source labels typically omit this key.","example":"#EF4444","pattern":"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$"},"highlightedRow":{"type":"boolean","description":"Whether to highlight the row with the selected color. Defaults to false.","example":false}},"required":["textColor","backgroundColor"]},"Label_2":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"source":{"description":"Source of the label. EasySender / EasyDMARC labels are visible only to that product. Platform labels are visible to both products and only PLATFORM admin can mutate. Frontends use this to render a source badge in PLATFORM admin view.","allOf":[{"$ref":"#/components/schemas/ResourceScope_2"}]},"attributes":{"description":"Visual attributes (colors, highlight). Source-product specific keys are normal.","allOf":[{"$ref":"#/components/schemas/LabelAttributes_2"}]},"ownerId":{"type":"string"},"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time","nullable":true}},"required":["id","name","source","attributes","ownerId","created"]},"ResourceBlocklistStatus_2":{"type":"object","properties":{"monitoringActive":{"type":"boolean","description":"Whether DNSBL monitoring is active for this resource"},"listedHostCount":{"type":"number","description":"Number of DNSBL hosts the resource is currently listed on"}},"required":["monitoringActive","listedHostCount"]},"DomainDnsLookupStatus_2":{"type":"string","enum":["MISSING","INVALID","WARNING","VALID"]},"DomainDmarcPolicy_2":{"type":"string","enum":["none","reject","quarantine","missing","invalid"]},"DomainAprfLookupStatus_2":{"type":"string","enum":["MISSING","INVALID","WARNING","VALID","VALID_PARTIAL","VALID_VERIFIED"]},"DomainDmarcProgressLevel_2":{"type":"number","enum":[0,1,2,3,4,5],"description":"Numeric ordinal: 0=PENDING, 1=CRITICAL, 2=POOR, 3=FAIR, 4=GOOD, 5=EXCELLENT."},"DomainState_2":{"type":"object","properties":{"domainValue":{"type":"string"},"dmarcLookupStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DomainDnsLookupStatus_2"}]},"dmarcPolicy":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DomainDmarcPolicy_2"}]},"spfLookupStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DomainDnsLookupStatus_2"}]},"dkimLookupStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DomainDnsLookupStatus_2"}]},"bimiLookupStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DomainDnsLookupStatus_2"}]},"aprfLookupStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DomainAprfLookupStatus_2"}]},"bimiHasVmc":{"type":"boolean","nullable":true},"hasFailureReports":{"type":"boolean","nullable":true},"hasManagedDmarc":{"type":"boolean","nullable":true},"hasManagedBimi":{"type":"boolean","nullable":true},"hasManagedDkim":{"type":"boolean","nullable":true},"hasManagedMtaSts":{"type":"boolean","nullable":true},"hasEasySpf":{"type":"boolean","nullable":true},"hasDmarcNs":{"type":"boolean","nullable":true},"hasBimiNs":{"type":"boolean","nullable":true},"hasMtaNs":{"type":"boolean","nullable":true},"dnsIntegrationProvider":{"type":"string","nullable":true},"dmarcProgressLevel":{"nullable":true,"description":"Numeric ordinal: 0=PENDING, 1=CRITICAL, 2=POOR, 3=FAIR, 4=GOOD, 5=EXCELLENT.","allOf":[{"$ref":"#/components/schemas/DomainDmarcProgressLevel_2"}]},"monitoringActive":{"type":"boolean","nullable":true},"listedHostCount":{"type":"number","nullable":true},"alertCount":{"type":"number","nullable":true},"activeTaskCount":{"type":"number","nullable":true},"created":{"format":"date-time","type":"string"}},"required":["domainValue","created"]},"DomainAggregateData_2":{"type":"object","properties":{"totalVolume":{"type":"number"},"compliantVolume":{"type":"number"},"nonCompliantVolume":{"type":"number"},"previousCompliantVolume":{"type":"number"},"previousNonCompliantVolume":{"type":"number"},"complianceRate":{"type":"number","description":"Compliance % rounded to 2 decimals; 0 when no volume."},"spfPassRate":{"type":"number"},"dkimPassRate":{"type":"number"}},"required":["totalVolume","compliantVolume","nonCompliantVolume","previousCompliantVolume","previousNonCompliantVolume","complianceRate","spfPassRate","dkimPassRate"]},"DomainSyncType_2":{"type":"string","enum":["verification","dns_records","managed_solutions","dns_integration","blocklist","alerts_and_tasks","dmarc_progress"]},"DomainSyncSchedule_2":{"type":"object","properties":{"syncType":{"allOf":[{"$ref":"#/components/schemas/DomainSyncType_2"}]},"lastSynced":{"format":"date-time","type":"string"}},"required":["syncType","lastSynced"]},"DomainItem_2":{"type":"object","properties":{"value":{"type":"string","description":"Domain name"},"workspaceId":{"type":"string","description":"Workspace ID the domain belongs to (when scoped to a workspace)","nullable":true},"workspaceName":{"type":"string","description":"Workspace display name resolved from the account service","nullable":true},"verified":{"type":"boolean","description":"Whether the domain is verified"},"mode":{"description":"Sending vs parked mode of the domain","allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]},"created":{"type":"string","format":"date-time","description":"Date when the domain was created"},"subdomainsCount":{"type":"number","description":"Number of subdomains"},"features":{"type":"array","items":{"$ref":"#/components/schemas/DomainPresenceFeature_2"},"description":"Distinct email activity integrations connected to the domain OR to any of its subdomains. Rolled up like the engagement metrics below, and matching the `features` / `connected` filters, which resolve a root through its subdomains too."},"postmasterVerified":{"format":"date-time","type":"string","description":"When Google Postmaster last reported the domain verified; absent when it is not.\n\nFolded in by the gateway from `google-postmaster`, not stored on the domain — it lives in that\nservice's own table, and mirroring it into `domain_state` would mean a migration plus a sync\ntype for a value the gateway can read directly. Same treatment as the engagement columns.\n\n`features` tells you Postmaster is ENABLED for the domain; this tells you whether Google has\nverified it."},"hasDnsIntegration":{"type":"boolean","description":"Whether the domain has an active DNS integration"},"dnsIntegrationProvider":{"description":"DNS provider key of the active integration","nullable":true,"allOf":[{"$ref":"#/components/schemas/DnsProvider_3"}]},"labels":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Label_2"}},"sentVolume":{"type":"number","nullable":true,"description":"Total sent volume in the date range"},"delivered":{"type":"number","nullable":true,"description":"Delivered count in the date range"},"opens":{"type":"number","nullable":true,"description":"Unique opens count in the date range"},"clicks":{"type":"number","nullable":true,"description":"Unique clicks count in the date range"},"complaints":{"type":"number","nullable":true,"description":"Complaints count in the date range"},"unsubscribes":{"type":"number","nullable":true,"description":"Unsubscribes count in the date range"},"bounces":{"type":"number","nullable":true,"description":"Bounces count in the date range (sum of hard + soft bounces)"},"blocklistStatus":{"description":"DNSBL blocklist monitoring status","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/ResourceBlocklistStatus_2"}]},"state":{"description":"Denormalised per-sync_type state for this domain (populated by background syncs)","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/DomainState_2"}]},"aggregate":{"description":"DMARC compliance aggregates (volumes, pass rates) for the requested date range","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/DomainAggregateData_2"}]},"actionCount":{"type":"number","nullable":true,"description":"Open Pending Actions for this domain and its subdomains — individual (non-groupable) actions plus one per grouped facade card, counting only actionable severities (warning, critical). The same number the domain’s Pending Actions badge shows. Absent unless the caller requested it via `enabledColumns`."},"syncSchedules":{"nullable":true,"description":"Per-sync_type last completion timestamps for this domain. Only sync_types that have completed at least once appear; an empty array means no sync_type has completed yet. The FE picks how to display per-domain freshness (one type, the earliest, the latest, or a per-type breakdown).","type":"array","items":{"$ref":"#/components/schemas/DomainSyncSchedule_2"}}},"required":["value","verified","mode","created","subdomainsCount","features","hasDnsIntegration"]},"DomainsSearchResponse_2":{"type":"object","properties":{"items":{"items":{"$ref":"#/components/schemas/DomainItem_2"},"type":"array"},"totalCount":{"type":"number"}},"required":["items","totalCount"]},"Domain_3":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"value":{"type":"string"},"ruaExists":{"type":"boolean","nullable":true},"verified":{"format":"date-time","type":"string","nullable":true},"rootDomain":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/Domain_3"}]},"subDomains":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Domain_3"}},"labels":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Label_2"}},"state":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/DomainState_2"}]},"features":{"type":"array","items":{"type":"string","enum":["sendgrid","aws_ses","mailgun","salesforce","klaviyo","highlevel","google_postmaster","hubspot","mailchimp","mandrill","shopify","m365","microsoft_dynamics","microsoft_snds","google_workspace","sparkpost","campaign_monitor","salesforce_crm","reputation_monitoring","active_campaign","constant_contact","braze","cloudflare_email","wooxy","clickdimensions","marketo","manual"]}},"mode":{"allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]},"created":{"format":"date-time","type":"string"},"updated":{"format":"date-time","type":"string","nullable":true},"syncSchedules":{"nullable":true,"description":"Per-sync_type last completion timestamps for this domain. Only sync_types that have completed at least once appear; an empty array means no sync_type has completed yet. The FE picks how to display (e.g. show one specific type, the earliest, or a per-type breakdown).","type":"array","items":{"$ref":"#/components/schemas/DomainSyncSchedule_2"}}},"required":["id","ownerId","value","features","mode","created"]},"DomainListPageResponse_2":{"type":"object","properties":{"items":{"items":{"$ref":"#/components/schemas/Domain_3"},"type":"array"},"totalCount":{"type":"number"}},"required":["items","totalCount"]},"DnsProvider_4":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"pattern":{"type":"string"},"type":{"enum":["system","custom"],"type":"string"},"recordCnameHost":{"type":"string"},"recordCnameType":{"type":"string"},"recordCnameValue":{"type":"string"},"recordTxtHost":{"type":"string"},"recordTxtType":{"type":"string"},"recordTxtValue":{"type":"string"},"isLive":{"type":"boolean"},"qty":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","url","pattern","type","recordCnameHost","recordCnameType","recordCnameValue","recordTxtHost","recordTxtType","recordTxtValue","isLive","qty","createdAt","updatedAt"]},"DomainVerificationDetailsResponse_2":{"type":"object","properties":{"domain":{"type":"string"},"dnsProvider":{"$ref":"#/components/schemas/DnsProvider_4"},"manageByUs":{"type":"boolean"},"txtRecordValue":{"type":"string"},"entriCnameConfig":{"$ref":"#/components/schemas/EntriConfig_2"},"entriConfig":{"$ref":"#/components/schemas/EntriConfig_2"},"entriTxtConfig":{"$ref":"#/components/schemas/EntriConfig_2"},"supportedByEntri":{"type":"boolean"},"supportedByEntriCname":{"type":"boolean"},"supportedByEntriTxt":{"type":"boolean"},"cnameRecordValue":{"type":"string"},"hasCNAMERecord":{"type":"boolean"},"hasNSRecord":{"type":"boolean"},"hasTXTRecord":{"type":"boolean"},"dnsProviderName":{"type":"string"},"dnsProviderKey":{"allOf":[{"$ref":"#/components/schemas/DnsProvider_3"}]},"hasDnsIntegration":{"type":"boolean"}},"required":["domain","manageByUs","txtRecordValue","supportedByEntri","supportedByEntriCname","supportedByEntriTxt","cnameRecordValue","hasCNAMERecord","hasNSRecord","hasTXTRecord","hasDnsIntegration"]},"DomainDmarcRecordsResponse_2":{"type":"object","properties":{"currentRecord":{"type":"string"},"newRecord":{"type":"string"},"integrationDnsProviderKey":{"type":"string"}},"required":["currentRecord","newRecord"]},"DomainFilterRequest_2":{"type":"object","properties":{"features":{"type":"array","items":{"$ref":"#/components/schemas/DomainPresenceFeature_2"}},"query":{"type":"string"},"domainNames":{"type":"array","items":{"type":"string"}},"workspaceIds":{"description":"Workspace scope. Populated by the auth guard from the current organisation; ignored if sent by clients.","type":"array","items":{"type":"string"}},"verified":{"type":"boolean"},"connected":{"type":"boolean"},"labelIds":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/ResourceScope_2"},"description":"Filter by domain presence source"},"mode":{"allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]}}},"AdvancedFilterOperator_2":{"type":"string","enum":["EQUAL","NOT_EQUAL","EQUAL_NUMBER","NOT_EQUAL_NUMBER","ON","NOT_ON","IS","NOT_IS","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","SET","NOT_SET","STARTS_WITH","ENDS_WITH","BEFORE","AFTER","BETWEEN_NUMBER","NOT_BETWEEN_NUMBER","BETWEEN_DATE","NOT_BETWEEN_DATE","CONTAINS","NOT_CONTAINS","IN","NOT_IN","BINARY"]},"UnitType_2":{"type":"string","enum":["number","percentage"]},"AdvancedFilterConditionMeta_2":{"type":"object","properties":{"unit":{"allOf":[{"$ref":"#/components/schemas/UnitType_2"}]}}},"AdvancedFilterCondition_2":{"type":"object","properties":{"field":{"type":"string"},"operator":{"allOf":[{"$ref":"#/components/schemas/AdvancedFilterOperator_2"}]},"value":{"description":"Filter value — shape depends on operator: string for EQUAL/LIKE operators, number for numeric operators, boolean for BINARY, ISO date string for date operators, { from, to } object for range operators, or string[] for IN/NOT_IN operators.","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"from":{"oneOf":[{"type":"string"},{"type":"number"}]},"to":{"oneOf":[{"type":"string"},{"type":"number"}]}},"required":["from","to"]}]},"meta":{"$ref":"#/components/schemas/AdvancedFilterConditionMeta_2"}},"required":["field","operator"]},"DomainSearchRequest_3":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"filter":{"nullable":false,"description":"The filter to apply to the search","allOf":[{"$ref":"#/components/schemas/DomainFilterRequest_2"}]},"advancedFilterConditions":{"type":"array","items":{"$ref":"#/components/schemas/AdvancedFilterCondition_2"}},"sort":{"nullable":false,"description":"The sort to apply to the search","type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}},"includeSubdomains":{"type":"boolean","nullable":false,"description":"Whether to include subdomains in the response"}},"required":["page","filter","sort"]},"DomainCountFilterRequest_2":{"type":"object","properties":{"features":{"type":"array","items":{"$ref":"#/components/schemas/DomainPresenceFeature_2"}},"query":{"type":"string"},"domainNames":{"type":"array","items":{"type":"string"}},"verified":{"type":"boolean"},"connected":{"type":"boolean"},"labelIds":{"type":"array","items":{"type":"string"}},"rootOnly":{"type":"boolean"},"mode":{"allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]}}},"DomainColumn_2":{"type":"string","enum":["value","verified","mode","created","subdomainsCount","features","postmasterVerified","labels","sentVolume","delivered","opens","clicks","complaints","unsubscribes","bounces","blocklistStatus","totalVolume","complianceRate","spfPassRate","dkimPassRate","dmarcProgressLevel","policy","dmarcLookupStatus","spfLookupStatus","dkimLookupStatus","bimiLookupStatus","hasManagedDmarc","hasManagedBimi","hasManagedMtaSts","hasManagedDkim","hasEasySpf","hasFailureReports","hasDmarcNs","hasBimiNs","hasMtaNs","activeTaskCount","alertCount","actionCount"],"description":"Whitelist of columns to include in each response item. When omitted or empty, every column is returned. Only honored when `x-request-source: platform`."},"DomainCompositeSearchRequest_2":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"filter":{"description":"Filter criteria for domain search","nullable":false,"allOf":[{"$ref":"#/components/schemas/DomainFilterRequest_2"}]},"advancedFilterConditions":{"type":"array","items":{"$ref":"#/components/schemas/AdvancedFilterCondition_2"}},"fromDate":{"type":"string","description":"Start date for statistics date range (ISO date string)","nullable":false,"example":"2025-01-01"},"toDate":{"type":"string","description":"End date for statistics date range (ISO date string)","nullable":false,"example":"2025-12-31"},"sort":{"nullable":false,"description":"The sort to apply to the search","type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}},"enabledColumns":{"type":"array","items":{"$ref":"#/components/schemas/DomainColumn_2"},"description":"Whitelist of columns to include in each response item. When omitted or empty, every column is returned. Only honored when `x-request-source: platform`."}},"required":["page","filter","fromDate","toDate","sort"]},"DomainBreakdownDimension_2":{"type":"string","enum":["workspace","policy","type"]},"DomainBreakdownRequest_2":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"filter":{"description":"Filter criteria for domain search","nullable":false,"allOf":[{"$ref":"#/components/schemas/DomainFilterRequest_2"}]},"advancedFilterConditions":{"type":"array","items":{"$ref":"#/components/schemas/AdvancedFilterCondition_2"}},"fromDate":{"type":"string","description":"Start date for statistics date range (ISO date string)","nullable":false,"example":"2025-01-01"},"toDate":{"type":"string","description":"End date for statistics date range (ISO date string)","nullable":false,"example":"2025-12-31"},"enabledColumns":{"type":"array","items":{"$ref":"#/components/schemas/DomainColumn_2"},"description":"Whitelist of columns to include in each response item. When omitted or empty, every column is returned. Only honored when `x-request-source: platform`."},"sort":{"description":"Order the group rows by display name (field NAME; ASC = A–Z, DESC = Z–A).","type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}}},"required":["page","filter","fromDate","toDate"]},"DomainBreakdown_2":{"type":"object","properties":{"key":{"type":"string","description":"Group identity — workspaceId (FE resolves the name) | dmarc policy | mode."},"domainsCount":{"type":"number","description":"All domains in the group (incl. parked/zero-volume)."},"unverifiedCount":{"type":"number","description":"Domains that are unverified."},"sendingCount":{"type":"number","description":"Domains in sending mode (Type column)."},"policyNoneCount":{"type":"number","description":"Domains with DMARC policy = none."},"blocklistedCount":{"type":"number","description":"Domains listed on a blocklist (Reputation column)."},"dmarcInvalidCount":{"type":"number","description":"Domains with an invalid DMARC lookup."},"spfInvalidCount":{"type":"number","description":"Domains with an invalid SPF lookup."},"dkimInvalidCount":{"type":"number","description":"Domains with an invalid DKIM lookup."},"bimiInvalidCount":{"type":"number","description":"Domains with an invalid BIMI lookup."},"managedDmarcInactiveCount":{"type":"number","description":"Domains with Managed DMARC inactive."},"managedDkimInactiveCount":{"type":"number","description":"Domains with Managed DKIM inactive."},"easySpfInactiveCount":{"type":"number","description":"Domains with EasySPF inactive."},"failureReportsInactiveCount":{"type":"number","description":"Domains with Failure Reports inactive."},"subdomainsCount":{"type":"number","description":"Σ subdomains across the group."},"alertCount":{"type":"number","description":"Σ active alerts across the group."},"totalVolume":{"type":"number","nullable":true,"description":"Σ DMARC total volume over sending domains; null when none."},"complianceRate":{"type":"number","nullable":true,"description":"Volume-weighted DMARC compliance %; null when no volume."},"sentVolume":{"type":"number","nullable":true,"description":"Average sent volume per verified root."},"delivered":{"type":"number","nullable":true,"description":"Average delivered per verified root."},"opens":{"type":"number","nullable":true,"description":"Average opens per verified root."},"clicks":{"type":"number","nullable":true,"description":"Average clicks per verified root."},"complaints":{"type":"number","nullable":true,"description":"Average complaints per verified root."},"unsubscribes":{"type":"number","nullable":true,"description":"Average unsubscribes per verified root."},"bounces":{"type":"number","nullable":true,"description":"Average bounces per verified root."}},"required":["key","domainsCount"]},"DomainBreakdownPageResponse_2":{"type":"object","properties":{"items":{"items":{"$ref":"#/components/schemas/DomainBreakdown_2"},"type":"array"},"totalCount":{"type":"number"}},"required":["items","totalCount"]},"DnsRecordStateRequest_2":{"type":"object","properties":{"domainNames":{"description":"Subset of domain names to aggregate; omit for all the org's domains.","type":"array","items":{"type":"string"}}}},"PolicyDistributionItem_2":{"type":"object","properties":{"count":{"type":"number"},"domainNames":{"type":"array","items":{"type":"string"}}},"required":["count","domainNames"]},"DnsRecordValidityBuckets_2":{"type":"object","properties":{"valid":{"$ref":"#/components/schemas/PolicyDistributionItem_2"},"haveIssues":{"$ref":"#/components/schemas/PolicyDistributionItem_2"},"noRecordFound":{"$ref":"#/components/schemas/PolicyDistributionItem_2"}}},"DnsRecordTypeDistribution_2":{"type":"object","properties":{"distribution":{"$ref":"#/components/schemas/DnsRecordValidityBuckets_2"}},"required":["distribution"]},"DnsRecordStates_2":{"type":"object","properties":{"dmarc":{"$ref":"#/components/schemas/DnsRecordTypeDistribution_2"},"dkim":{"$ref":"#/components/schemas/DnsRecordTypeDistribution_2"},"spf":{"$ref":"#/components/schemas/DnsRecordTypeDistribution_2"},"bimi":{"$ref":"#/components/schemas/DnsRecordTypeDistribution_2"}},"required":["dmarc","dkim","spf","bimi"]},"DmarcPolicyBuckets_2":{"type":"object","properties":{"noRecord":{"$ref":"#/components/schemas/PolicyDistributionItem_2"},"none":{"$ref":"#/components/schemas/PolicyDistributionItem_2"},"quarantine":{"$ref":"#/components/schemas/PolicyDistributionItem_2"},"reject":{"$ref":"#/components/schemas/PolicyDistributionItem_2"},"invalid":{"$ref":"#/components/schemas/PolicyDistributionItem_2"}}},"DmarcPolicyDistributionModel_2":{"type":"object","properties":{"total":{"type":"number"},"distribution":{"$ref":"#/components/schemas/DmarcPolicyBuckets_2"}},"required":["total","distribution"]},"DnsValidCount_2":{"type":"object","properties":{"dmarc":{"type":"number"},"dkim":{"type":"number"},"spf":{"type":"number"},"bimi":{"type":"number"}},"required":["dmarc","dkim","spf","bimi"]},"DnsRecordStateResponse_2":{"type":"object","properties":{"dnsRecordStates":{"$ref":"#/components/schemas/DnsRecordStates_2"},"dmarcPolicyData":{"$ref":"#/components/schemas/DmarcPolicyDistributionModel_2"},"validCounts":{"$ref":"#/components/schemas/DnsValidCount_2"}},"required":["dnsRecordStates","dmarcPolicyData","validCounts"]},"DomainsCompositeDownloadRequest_2":{"type":"object","properties":{"filter":{"description":"Filter criteria for domain search","nullable":false,"allOf":[{"$ref":"#/components/schemas/DomainFilterRequest_2"}]},"advancedFilterConditions":{"type":"array","items":{"$ref":"#/components/schemas/AdvancedFilterCondition_2"}},"fromDate":{"type":"string","description":"Start date for statistics date range (ISO date string)","nullable":false,"example":"2025-01-01"},"toDate":{"type":"string","description":"End date for statistics date range (ISO date string)","nullable":false,"example":"2025-12-31"},"sort":{"nullable":false,"description":"The sort to apply to the search","type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}},"enabledColumns":{"type":"array","items":{"$ref":"#/components/schemas/DomainColumn_2"},"description":"Whitelist of columns to include in each response item. When omitted or empty, every column is returned. Only honored when `x-request-source: platform`."}},"required":["filter","fromDate","toDate","sort"]},"DomainHubProduct_2":{"type":"string","enum":["easydmarc","easysender","easycert","mailtester"]},"DiscoverableDomainSource_2":{"type":"string","enum":["route53","akamai-dns","azure-dns","cloudflare-dns","cloudfloor-dns","dnsmadeeasy-dns","dnsimple-dns","easydns-dns","gandi-dns","godaddy-dns","google-dns","namecom-dns","namecheap-dns","ovh-dns","transip-dns","cloudns-dns","digitalocean-dns","hostinger-dns","wix-dns","dreamhost-dns","amazon-ses","sendgrid","mailgun","hubspot","klaviyo","highlevel","salesforce","salesforce_crm","mailchimp","mandrill","m365","microsoft_dynamics","google_workspace","shopify","microsoft_snds","sparkpost","active_campaign","campaign_monitor","braze","cloudflare-email","constant_contact","wooxy","clickdimensions","marketo","google-postmaster","manual","resource_register","easysender","easydmarc"]},"DomainVerificationStatus_2":{"type":"string","enum":["verified","auto_verify","not_verified"]},"DiscoverableDomainGateway_2":{"type":"object","properties":{"domainName":{"type":"string","example":"example.com"},"organizationId":{"type":"string","example":"org-123"},"isVerified":{"type":"boolean","example":true},"products":{"type":"array","items":{"$ref":"#/components/schemas/DomainHubProduct_2"}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverableDomainSource_2"},"example":["cloudflare-dns"]},"verificationStatus":{"example":"verified","allOf":[{"$ref":"#/components/schemas/DomainVerificationStatus_2"}]},"verifiedElsewhere":{"type":"boolean","example":false}},"required":["domainName","organizationId","isVerified","sources","verificationStatus","verifiedElsewhere"]},"DiscoverableDomainSearchFilter_2":{"type":"object","properties":{"query":{"type":"string","maxLength":255},"sources":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverableDomainSource_2"},"example":["cloudflare-dns"]},"verificationStatuses":{"type":"array","items":{"$ref":"#/components/schemas/DomainVerificationStatus_2"},"example":["verified"]}}},"DiscoverableDomainSearchRequest_2":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"filter":{"nullable":true,"description":"The filter to apply to the discoverable domains search","type":"object","allOf":[{"$ref":"#/components/schemas/DiscoverableDomainSearchFilter_2"}]},"sort":{"type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}}},"required":["page"]},"DiscoverableDomainSourceOption_2":{"type":"object","properties":{"key":{"example":"cloudflare-dns","allOf":[{"$ref":"#/components/schemas/DiscoverableDomainSource_2"}]},"value":{"enum":["Google Workspace","SendGrid","Amazon SES","Mailgun","HubSpot","Klaviyo","Salesforce","Mailchimp","Mandrill","Microsoft 365","Microsoft Dynamics 365","SparkPost","Campaign Monitor","Shopify","ActiveCampaign","Constant Contact","Braze","HighLevel","Cloudflare Email","Wooxy","ClickDimensions","Adobe Marketo","AWS Route 53","Akamai DNS","Azure DNS","Cloudflare","CloudFloor","DNS Made Easy","DNSimple","easyDNS","Gandi","GoDaddy","Google Cloud DNS","Name.com","Namecheap","OVHcloud","TransIP","ClouDNS","DigitalOcean","Hostinger","Wix","DreamHost","SalesforceCRM","Microsoft SNDS","Google Postmaster","Manual","EasySender","EasyDMARC","Resource Register"],"type":"string","description":"Human-readable label for the source","example":"Cloudflare"}},"required":["key","value"]},"DomainAdditionItem_2":{"type":"object","properties":{"name":{"type":"string"},"mode":{"description":"When omitted there is no mode intent: a newly created domain defaults to `sending`, an already-existing domain keeps its current mode.","allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]}},"required":["name"]},"DomainAdditionBulkRequest_2":{"type":"object","properties":{"domains":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/DomainAdditionItem_2"}},"workspaceId":{"type":"string"}},"required":["domains"]},"DomainAdditionBulkResponse_2":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}},"reason":{"allOf":[{"$ref":"#/components/schemas/DomainUnavailabilityReason_2"}]}},"required":["items"]},"DomainAdditionRequest_2":{"type":"object","properties":{"name":{"type":"string"},"mode":{"description":"When omitted there is no mode intent: a newly created domain defaults to `sending`, an already-existing domain keeps its current mode.","allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]},"workspaceId":{"type":"string","description":"Target workspace for the domain. Honored only when `x-request-source: platform`; ignored otherwise."}},"required":["name"]},"DomainAdditionSingleResponse_2":{"type":"object","properties":{"value":{"type":"string"},"isVerified":{"type":"boolean"},"reason":{"allOf":[{"$ref":"#/components/schemas/DomainUnavailabilityReason_2"}]}},"required":["value","isVerified"]},"DomainIntegrationCheckRequest_2":{"type":"object","properties":{"domainNames":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["domainNames"]},"DomainIntegrationItem_2":{"type":"object","properties":{"domainName":{"type":"string"},"dnsProviderKey":{"allOf":[{"$ref":"#/components/schemas/DnsProvider_3"}]}},"required":["domainName","dnsProviderKey"]},"DomainIntegrationCheckResponse_2":{"type":"object","properties":{"requestedDomainsCount":{"type":"number"},"domainWithIntegrations":{"type":"array","items":{"$ref":"#/components/schemas/DomainIntegrationItem_2"}}},"required":["requestedDomainsCount","domainWithIntegrations"]},"DomainDeletionBulkRequest_2":{"type":"object","properties":{"domainNames":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["domainNames"]},"DomainMoveToWorkspaceRequest_2":{"type":"object","properties":{"domainNames":{"minItems":1,"type":"array","items":{"type":"string"}},"workspaceId":{"type":"string"},"toWorkspaceId":{"type":"string"}},"required":["domainNames"]},"DomainChangeModeRequestGateway_2":{"type":"object","properties":{"domainNames":{"minItems":1,"type":"array","items":{"type":"string"}},"mode":{"description":"Target mode for the domains.","allOf":[{"$ref":"#/components/schemas/DomainMode_2"}]}},"required":["domainNames","mode"]},"ResourceRegistryDomainChangeModeResult_2":{"type":"object","properties":{"domain":{"type":"string"},"succeeded":{"type":"boolean"},"reason":{"type":"string","nullable":true},"outcome":{"description":"What actually happened, which `succeeded` cannot express: an `unchanged` result succeeded\nwithout anything being applied or even validated, and a caller that reports it as a change\ntells the user their domain was updated when it was not.\n\nOptional so an older caller that does not read it is unaffected.","enum":["changed","unchanged","refused"],"type":"string"}},"required":["domain","succeeded","reason"]},"ResourceRegistryDomainChangeModeResponse_2":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/ResourceRegistryDomainChangeModeResult_2"}}},"required":["results"]},"DomainParkEligibilityRequest_2":{"type":"object","properties":{"domains":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["domains"]},"DomainParkEligibilityItem_2":{"type":"object","properties":{"domain":{"type":"string"},"canPark":{"type":"boolean"}},"required":["domain","canPark"]},"DomainParkEligibilityResponse_2":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainParkEligibilityItem_2"}}},"required":["domains"]},"DomainSyncNowRequestGateway_2":{"type":"object","properties":{"domainNames":{"minItems":1,"uniqueItems":true,"maxItems":10000,"description":"Explicit domains to sync. OMIT entirely to sync every root domain of the org. A provided-but-empty list is rejected (400) — most likely a caller bug, not a \"sync all\" request.","type":"array","items":{"type":"string"}}}},"ResourceRegistryDomainSyncNowResponse_2":{"type":"object","properties":{"acceptedCount":{"type":"number"},"rejectedCount":{"type":"number"}},"required":["acceptedCount","rejectedCount"]},"ResourceRegistryDomainsLastSyncedResponse_2":{"type":"object","properties":{"lastSynced":{"type":"string","nullable":true,"format":"date-time","description":"Oldest `last_synced` across every (root domain × sync_type) schedule row of the org — the staleness of the most-stale sync job. `null` when no root domain has completed a sync yet."}},"required":["lastSynced"]},"DomainVerifyRequest_2":{"type":"object","properties":{"domainNames":{"minItems":1,"type":"array","items":{"type":"string"}},"upsertHosted":{"type":"boolean","description":"Set by the managed-DMARC (CNAME) branch of the verify drawer. Writes the hosted\nDMARC record the `_dmarc` CNAME delegates to before checking verification —\nwithout it that check cannot pass, because it resolves through the CNAME."}},"required":["domainNames"]},"DomainVerifyItem_2":{"type":"object","properties":{"domain":{"type":"string"},"verified":{"type":"boolean"}},"required":["domain","verified"]},"DomainVerifyResponse_2":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DomainVerifyItem_2"}}},"required":["items"]},"AggregateReportAccessDomainVerifyRequest_2":{"type":"object","properties":{"domainNames":{"description":"List of domains to verify","example":["example1.com","example2.com"],"type":"array","items":{"type":"string"}}},"required":["domainNames"]},"DomainLabelBulkAssignmentRequest_2":{"type":"object","properties":{"domainNames":{"minItems":1,"description":"The domain names to assign labels to.","example":["example.com","test.com"],"type":"array","items":{"type":"string"}},"labelIds":{"minItems":1,"description":"The label IDs to assign to the domains.","example":["a1b2c3d4-e5f6-7890-abcd-ef1234567890"],"type":"array","items":{"type":"string"}}},"required":["domainNames","labelIds"]},"DomainLabelAssignmentRequest_2":{"type":"object","properties":{"labelId":{"type":"string","description":"The label ID to assign to the domain.","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"required":["labelId"]},"LabelSearchRequest_2":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"query":{"type":"string","description":"Text query to filter labels by name."},"advancedFilterConditions":{"description":"Optional advanced filter conditions over `name`, `source`, `created`, `updated`. Same operator vocabulary as the domain advanced filter.","type":"array","items":{"$ref":"#/components/schemas/AdvancedFilterCondition_2"}}},"required":["page"]},"LabelCreationRequest_2":{"type":"object","properties":{"name":{"type":"string","maxLength":150,"description":"Label name. Supports emojis. Max 150 characters.","example":"Important"},"attributes":{"description":"Visual attributes (colors, highlight). Stored as JSONB on the label entity.","allOf":[{"$ref":"#/components/schemas/LabelAttributes_2"}]}},"required":["name","attributes"]},"LabelUpdateRequest_2":{"type":"object","properties":{"name":{"type":"string","maxLength":150,"description":"Updated label name. Supports emojis. Max 150 characters.","example":"Bug"},"attributes":{"description":"Partial attributes update. Keys present here overwrite the corresponding stored keys; absent keys are left untouched.","allOf":[{"$ref":"#/components/schemas/LabelAttributes_2"}]}}},"SelectionMode_2":{"type":"string","enum":["INCLUDE","EXCLUDE"],"description":"Selection mode"},"SelectionFilter_2":{"type":"object","properties":{"items":{"uniqueItems":true,"description":"List of selected items","example":["example.com","another-domain.com"],"type":"array","items":{"type":"string"}},"mode":{"description":"Selection mode","example":"INCLUDE","allOf":[{"$ref":"#/components/schemas/SelectionMode_2"}]}},"required":["items","mode"]},"AlertCategory_2":{"type":"string","enum":["DNS_RECORD","ENGAGEMENT","REPUTATION_MONITORING","VOLUME_SENDING_PATTERNS","OUTBOUND_EMAIL_VOLUME"]},"AlertSeverity_2":{"type":"string","enum":["CRITICAL","WARNING","INFORMATIONAL"]},"AlertEvent_2":{"type":"string","enum":["DMARC_RECORD_CHANGED","DMARC_RECORD_VALIDATION_FAILED","SPF_RECORD_CHANGED","SPF_RECORD_SOURCE_CHANGED","SPF_RECORD_VALIDATION_FAILED","DKIM_RECORD_CHANGED","DKIM_RECORD_VALIDATION_FAILED","BIMI_RECORD_CHANGED","BIMI_RECORD_VALIDATION_FAILED","SVG_LOGO_CHANGED","SVG_LOGO_VALIDATION_FAILED","VMC_CERTIFICATE_CHANGED","VMC_CERTIFICATE_VALIDATION_FAILED","MX_RECORD_CHANGED","NS_RECORD_CHANGED","EMAIL_VOLUME_CHANGED"]},"AlertMetricType_2":{"type":"string","enum":["sent","delivered","opened","clicked","bounced","complained","rejected","deferred","unsubscribed","resubscribed","renderFailed","stored","blocklisted","blocklisting_cleared"]},"AlertMetricUnit_2":{"type":"string","enum":["COUNT","PERCENTAGE"]},"AlertConditionOperator_2":{"type":"string","enum":["eq","gte","gt","lte","lt","increases_by","decreases_by","deviates_by"]},"AlertCondition_2":{"type":"object","properties":{"metricType":{"allOf":[{"$ref":"#/components/schemas/AlertMetricType_2"}]},"metricUnit":{"allOf":[{"$ref":"#/components/schemas/AlertMetricUnit_2"}]},"operator":{"allOf":[{"$ref":"#/components/schemas/AlertConditionOperator_2"}]},"threshold":{"type":"number","minimum":0},"daysCount":{"type":"number","minimum":1},"baselineDaysCount":{"type":"number","minimum":1},"filters":{"type":"object","additionalProperties":{"type":"string"}}},"required":["metricType","metricUnit","operator","threshold","daysCount","filters"]},"AlertSourceMode_2":{"type":"string","enum":["ALL","INCLUDE","EXCLUDE"]},"AlertSourceItemType_2":{"type":"string","enum":["DOMAIN","IP"]},"AlertSourceItem_2":{"type":"object","properties":{"type":{"allOf":[{"$ref":"#/components/schemas/AlertSourceItemType_2"}]},"value":{"type":"string"},"includeAssociatedIps":{"type":"boolean"}},"required":["type","value"]},"AlertSourceSelection_2":{"type":"object","properties":{"mode":{"allOf":[{"$ref":"#/components/schemas/AlertSourceMode_2"}]},"items":{"type":"array","items":{"$ref":"#/components/schemas/AlertSourceItem_2"}}},"required":["mode","items"]},"AlertRecipient_2":{"type":"object","properties":{"channel":{"type":"string"},"value":{"type":"string"}},"required":["channel","value"]},"AlertVolumeConfig_2":{"type":"object","properties":{"report_type":{"type":"string"},"threshold":{"oneOf":[{"type":"number"},{"type":"string"}]},"threshold_type":{"type":"string"},"period":{"oneOf":[{"type":"number"},{"type":"string"}]},"variant":{"type":"string"}}},"AlertMeta_2":{"type":"object","properties":{"volumeConfig":{"$ref":"#/components/schemas/AlertVolumeConfig_2"}}},"CreateAlertRequestGateway_2":{"type":"object","properties":{"name":{"type":"string"},"category":{"allOf":[{"$ref":"#/components/schemas/AlertCategory_2"}]},"severity":{"allOf":[{"$ref":"#/components/schemas/AlertSeverity_2"}]},"event":{"allOf":[{"$ref":"#/components/schemas/AlertEvent_2"}]},"grouped":{"type":"boolean"},"conditions":{"type":"array","items":{"$ref":"#/components/schemas/AlertCondition_2"}},"sources":{"$ref":"#/components/schemas/AlertSourceSelection_2"},"recipients":{"type":"array","items":{"$ref":"#/components/schemas/AlertRecipient_2"}},"intervalMs":{"type":"number","minimum":900000,"description":"Polling interval in milliseconds. Must be an integer >= 900000."},"meta":{"$ref":"#/components/schemas/AlertMeta_2"}},"required":["name","category","severity","grouped","conditions","sources","recipients"]},"AlertResponse_2":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"state":{"type":"boolean"},"category":{"allOf":[{"$ref":"#/components/schemas/AlertCategory_2"}]},"severity":{"allOf":[{"$ref":"#/components/schemas/AlertSeverity_2"}]},"event":{"allOf":[{"$ref":"#/components/schemas/AlertEvent_2"}]},"grouped":{"type":"boolean"},"conditions":{"type":"array","items":{"$ref":"#/components/schemas/AlertCondition_2"}},"sources":{"$ref":"#/components/schemas/AlertSourceSelection_2"},"intervalMs":{"type":"number","nullable":true},"recipients":{"type":"array","items":{"$ref":"#/components/schemas/AlertRecipient_2"}},"meta":{"$ref":"#/components/schemas/AlertMeta_2"},"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time"}},"required":["id","name","state","category","severity","grouped","conditions","sources","intervalMs","recipients","created","updated"]},"AlertFilterRequestGateway_2":{"type":"object","properties":{"query":{"type":"string","description":"Case-insensitive search across alert name and source values"},"from":{"type":"string","description":"Filter alerts created on or after this ISO date"},"to":{"type":"string","description":"Filter alerts created on or before this ISO date"}}},"AlertSearchRequestGateway_2":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"filter":{"$ref":"#/components/schemas/AlertFilterRequestGateway_2"},"sort":{"type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}}},"required":["page","filter"]},"AlertBulkIdsRequestGateway_2":{"type":"object","properties":{"ids":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["ids"]},"AvailableSourceItem_2":{"type":"object","properties":{"type":{"type":"string","description":"Source type (e.g. DOMAIN)"},"value":{"type":"string","description":"Source value (e.g. example.com)"},"verified":{"type":"boolean","description":"Whether the domain is verified"},"selected":{"type":"boolean","description":"Whether the source is selected in the alert"},"children":{"description":"Child sources (e.g. IPs for a domain)","type":"array","items":{"$ref":"#/components/schemas/AvailableSourceItem_2"}}},"required":["type","value","verified","selected"]},"AvailableSourcesResponse_2":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AvailableSourceItem_2"}},"sourceMode":{"description":"Source mode of the alert (present only when alertId is provided)","allOf":[{"$ref":"#/components/schemas/AlertSourceMode_2"}]}},"required":["items"]},"Host_2":{"type":"object","properties":{"id":{"type":"string"},"zoneId":{"type":"string"},"zoneName":{"type":"string"},"zoneUri":{"type":"string"},"name":{"type":"string"},"link":{"type":"string"},"resourceTypes":{"type":"array","items":{"type":"string"}},"matchCodes":{"type":"array","items":{"type":"string"}},"matchBitmask":{"type":"number"},"description":{"type":"string"}},"required":["id","zoneId","zoneName","zoneUri","name","link","resourceTypes"]},"ModifyAlertRequestGateway_2":{"type":"object","properties":{"name":{"type":"string"},"category":{"allOf":[{"$ref":"#/components/schemas/AlertCategory_2"}]},"severity":{"allOf":[{"$ref":"#/components/schemas/AlertSeverity_2"}]},"event":{"allOf":[{"$ref":"#/components/schemas/AlertEvent_2"}]},"grouped":{"type":"boolean"},"conditions":{"type":"array","items":{"$ref":"#/components/schemas/AlertCondition_2"}},"sources":{"$ref":"#/components/schemas/AlertSourceSelection_2"},"recipients":{"type":"array","items":{"$ref":"#/components/schemas/AlertRecipient_2"}},"intervalMs":{"type":"number","minimum":900000,"description":"Polling interval in milliseconds. Must be an integer >= 900000."},"meta":{"$ref":"#/components/schemas/AlertMeta_2"}},"required":["name","category","severity","grouped","conditions","sources","recipients"]},"AlertLogFilterRequestGateway_2":{"type":"object","properties":{"query":{"type":"string","description":"Case-insensitive search across alert name and sources"},"sourceFilter":{"$ref":"#/components/schemas/SelectionFilter_2"},"alertIds":{"type":"array","items":{"type":"string"}},"category":{"allOf":[{"$ref":"#/components/schemas/AlertCategory_2"}]},"severity":{"allOf":[{"$ref":"#/components/schemas/AlertSeverity_2"}]},"from":{"type":"string","description":"Filter logs triggered at or after this date (ISO string)"},"to":{"type":"string","description":"Filter logs triggered at or before this date (ISO string)"}}},"AlertLogSearchRequestGateway_2":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/Page_4"},"filter":{"$ref":"#/components/schemas/AlertLogFilterRequestGateway_2"},"sort":{"type":"array","items":{"$ref":"#/components/schemas/SingleFieldSort_2"}}},"required":["page","filter"]},"AlertLogMetric_2":{"type":"object","properties":{"metricLabel":{"type":"string","description":"Human-readable metric name","example":"Bounce rate"},"currentValue":{"type":"string","description":"Current metric value formatted with unit","example":"12%"},"threshold":{"type":"string","description":"Alert threshold formatted with unit","example":"50%"},"timePeriod":{"type":"string","description":"Evaluation time period","example":"Last 7 days"},"resources":{"description":"Affected domains or IPs","example":["easydmarc.com","easydmarc.us"],"type":"array","items":{"type":"string"}},"sendingSources":{"type":"array","items":{"$ref":"#/components/schemas/DomainPresenceFeature_2"},"description":"ESP filter applied to this condition","example":["sendgrid","mailgun"]}},"required":["metricLabel","currentValue","threshold","timePeriod","resources","sendingSources"]},"AlertLogDetails_2":{"type":"object","properties":{"timestamp":{"type":"string","description":"When the alert was triggered","format":"date-time","example":"2023-01-07T13:05:00.000Z"},"event":{"type":"string","description":"Event label for display","example":"Sending Performance Threshold Triggered"},"severity":{"type":"string","description":"Severity level (capitalized)","example":"Critical"},"resources":{"description":"Affected or resolved domains/IPs","example":["easydmarc.com"],"type":"array","items":{"type":"string"}},"recipients":{"description":"Notification recipient email addresses","example":["user@example.com"],"type":"array","items":{"type":"string"}},"blocklists":{"description":"Blocklist host names (REPUTATION_MONITORING category only)","example":["0spam - DNSBL"],"type":"array","items":{"type":"string"}},"calculationType":{"type":"string","description":"Threshold calculation type (ENGAGEMENT / VOLUME only)","example":"Per selected domain"},"metrics":{"description":"Metric details per triggered condition (ENGAGEMENT / VOLUME only)","type":"array","items":{"$ref":"#/components/schemas/AlertLogMetric_2"}}},"required":["timestamp","event","severity","resources","recipients"]},"AlertLogDetailResponse_2":{"type":"object","properties":{"id":{"type":"string"},"alertId":{"type":"string"},"alertName":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string"},"event":{"allOf":[{"$ref":"#/components/schemas/AlertEvent_2"}]},"grouped":{"type":"boolean"},"recipients":{"type":"array","items":{"$ref":"#/components/schemas/AlertRecipient_2"}},"sources":{"type":"array","items":{"type":"string"}},"channels":{"type":"array","items":{"type":"string"}},"conditionResults":{"type":"object","additionalProperties":true},"triggeredAt":{"type":"string","format":"date-time"},"created":{"type":"string","format":"date-time"},"details":{"$ref":"#/components/schemas/AlertLogDetails_2"}},"required":["id","alertId","alertName","category","severity","grouped","recipients","sources","channels","conditionResults","triggeredAt","created","details"]},"AlertLogCountResponse_2":{"type":"object","properties":{"total":{"type":"number","description":"Total number of alert logs matching the filter"}},"required":["total"]},"AlertLogCountByDomainResponse_2":{"type":"object","properties":{"count":{"type":"number","description":"Number of alert logs matching the filter for the given domain"}},"required":["count"]},"AlertLogDailyCount_2":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO format (YYYY-MM-DD)"},"count":{"type":"number","description":"Number of alert logs triggered on this date"}},"required":["date","count"]},"AlertLogDigitsResponse_2":{"type":"object","properties":{"days":{"description":"Daily counts for the last 7 days","type":"array","items":{"$ref":"#/components/schemas/AlertLogDailyCount_2"}}},"required":["days"]},"AlertLogSourceStat_2":{"type":"object","properties":{"source":{"type":"string","description":"Source value (e.g. domain name)"},"count":{"type":"number","description":"Number of alert logs for this source"}},"required":["source","count"]},"UserAvatar_4":{"type":"object","properties":{"url":{"type":"string","description":"URL to the user's avatar image","format":"uri"}}},"UserAvatarColorRgb_4":{"type":"string","enum":["#DA6969","#FFC04D","#FFB185","#75CAA9","#90E4EA","#5C85FF","#8DC0FF","#FDA1E3","#A57AF2","#B2A9D0","#ABB0CB"]},"UserAvatarColor_4":{"type":"object","properties":{"color":{"allOf":[{"$ref":"#/components/schemas/UserAvatarColorRgb_4"}]}}},"UserPersonalInfoChange_2":{"type":"object","properties":{"firstName":{"type":"string","description":"Updated first name for the user","minLength":1,"maxLength":100,"example":"Jonathan"},"lastName":{"type":"string","description":"Updated last name for the user","minLength":1,"maxLength":100,"example":"Smith"}},"required":["firstName","lastName"]},"ChangePersonalInfo_2":{"type":"object","properties":{"userId":{"type":"string","description":"The unique identifier of the user whose information should be updated","format":"uuid","example":"4fd475a0-e60a-43a0-82ff-6d9532cc3e9b"},"info":{"description":"Object containing the user information fields to update. Only provided fields will be updated.","example":{"firstName":"Jonathan","lastName":"Smith"},"allOf":[{"$ref":"#/components/schemas/UserPersonalInfoChange_2"}]}},"required":["userId","info"]},"Permission_2":{"type":"string","enum":["owner","admin","editor","no_access","viewer"]},"UserPermissionUser_2":{"type":"object","properties":{"email":{"type":"string"},"userId":{"type":"string","format":"uuid"}}},"OrganizationInvitedPermission_2":{"type":"string","enum":["admin","no_access"]},"UserPermissionOrganization_2":{"type":"object","properties":{"role":{"example":"admin","allOf":[{"$ref":"#/components/schemas/OrganizationInvitedPermission_2"}]},"organizationName":{"type":"string","example":"EasyDMARC"}},"required":["role"]},"ProductInvitedPermissionRole_2":{"type":"string","enum":["admin","editor","no_access"]},"ProductType_6":{"type":"string","enum":["dmarc","sender","inguard"]},"UserPermissionProduct_2":{"type":"object","properties":{"role":{"example":"admin","allOf":[{"$ref":"#/components/schemas/ProductInvitedPermissionRole_2"}]},"productId":{"type":"string","example":"dmarc_666a8f2eef097adfee1272d7"},"type":{"example":"dmarc","allOf":[{"$ref":"#/components/schemas/ProductType_6"}]},"productName":{"type":"string","example":"DMARC"}},"required":["role","productId","type"]},"UserPermissionResourceGroup_2":{"type":"object","properties":{"resourceGroupId":{"type":"string","example":"resourceGroupId"},"role":{"example":"admin","allOf":[{"$ref":"#/components/schemas/Permission_2"}]},"resourceGroupName":{"type":"string","example":"Resource Group Title"}},"required":["resourceGroupId","role"]},"UserPermissionResource_2":{"type":"object","properties":{"role":{"example":"admin","allOf":[{"$ref":"#/components/schemas/Permission_2"}]},"resourceGroupId":{"type":"string","example":"resourceGroupId"},"resourceId":{"type":"string","example":"resourceId"},"resourceName":{"type":"string","example":"Resource Title"}},"required":["role","resourceGroupId","resourceId"]},"UserPermissionV1_2":{"type":"object","properties":{"users":{"type":"array","items":{"$ref":"#/components/schemas/UserPermissionUser_2"}},"organization":{"$ref":"#/components/schemas/UserPermissionOrganization_2"},"products":{"type":"array","items":{"$ref":"#/components/schemas/UserPermissionProduct_2"}},"resourceGroups":{"type":"array","items":{"$ref":"#/components/schemas/UserPermissionResourceGroup_2"}},"resources":{"type":"array","items":{"$ref":"#/components/schemas/UserPermissionResource_2"}}},"required":["users"]},"UserBasicInfo_2":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the user","format":"uuid","example":"358ffecc-fd82-493e-862e-2047dcc450d4"},"username":{"type":"string","description":"Username for the user account, typically the email address or a unique identifier","example":"jillian_price@example.net"},"firstName":{"type":"string","description":"First name of the user. May be \"No name\" if not set.","example":"Jillian"},"lastName":{"type":"string","description":"Last name of the user. May be \"No name\" if not set.","example":"Price"},"email":{"type":"string","description":"Email address of the user","format":"email","example":"jillian_price@example.net"},"emailVerified":{"type":"boolean","description":"Indicates whether the user's email address has been verified","example":true},"avatar":{"description":"Avatar image information for the user. May contain URL or image data.","allOf":[{"$ref":"#/components/schemas/UserAvatar_4"}]},"avatarColor":{"description":"Color scheme for the user's avatar when no image is set. Used for generating colored initials.","allOf":[{"$ref":"#/components/schemas/UserAvatarColor_4"}]}},"required":["id","username","firstName","lastName","email","emailVerified"]},"PublicInviteUsersV1_2":{"type":"object","properties":{"organizationId":{"type":"string","description":"The unique identifier of the organization to which users are being invited","format":"uuid","example":"8a7b9c2d-1e3f-4a5b-9c8d-7e6f5a4b3c2d"},"permissions":{"description":"Permission configuration including user list and role assignments","allOf":[{"$ref":"#/components/schemas/UserPermissionV1_2"}]},"redirectUrl":{"type":"string","description":"URL to redirect users to after they accept the invitation and complete onboarding. Must be a valid HTTPS URL.","format":"uri","example":"https://app.easydmarc.com"}},"required":["organizationId","permissions"]},"CreateUsers_2":{"type":"object","properties":{"organizationId":{"type":"string","description":"The unique identifier of the organization in which to create the users","format":"uuid","example":"8a7b9c2d-1e3f-4a5b-9c8d-7e6f5a4b3c2d"},"permissions":{"description":"Permission configuration including user details and role assignments","allOf":[{"$ref":"#/components/schemas/UserPermissionV1_2"}]},"requirePasswordChange":{"type":"boolean","example":false,"description":"Whether the user should be required to change their password upon first login. Defaults to false."}},"required":["organizationId","permissions","requirePasswordChange"]},"CreateUsersResponse_2":{"type":"object","properties":{"users":{"type":"object","description":"Map of user email addresses to their newly created user IDs","example":{"john.doe@example.com":"4fd475a0-e60a-43a0-82ff-6d9532cc3e9b","jane.smith@example.com":"7c8d9e0f-2a3b-4c5d-8e9f-0a1b2c3d4e5f"}}},"required":["users"]},"PublicRevokeOrganizationAccessRequest_2":{"type":"object","properties":{"organizationId":{"type":"string","description":"The unique identifier of the organization from which to revoke user access","format":"uuid","example":"8a7b9c2d-1e3f-4a5b-9c8d-7e6f5a4b3c2d"},"userIds":{"description":"Array of user IDs whose access should be revoked. All users must be members of the specified organization.","example":["4fd475a0-e60a-43a0-82ff-6d9532cc3e9b","7c8d9e0f-2a3b-4c5d-8e9f-0a1b2c3d4e5f"],"type":"array","items":{"type":"string"}}},"required":["organizationId","userIds"]}},"examples":{},"headers":{},"requestBodies":{}},"x-tagGroups":[{"name":"API","tags":["Authentication","Domains","Alerting","DNS Lookup","Aggregate Reports","Audit Log","DNS Intelligence","Failure Reports","Workspaces"]},{"name":"Partner API","tags":["Organizations","Billing - Subscriptions & Pricing","Billing - Billing Information","Billing - Invoices","Billing - Payment Methods","Organizations - Users","Partner - Profile","Users"]}]}