Download OpenAPI specification:
Welcome to the dmarcian REST API documentation!
This documentation will help you integrate the dmarcian services into your software so you are not required to use our user interface. We have put a lot of effort into making the endpoints as self descriptive as possible but even if you have any issues - head to the corresponding section in the reference below.
We have built the API on top of HTTP following REST best practices. The endpoints receive JSON in their request body and return JSON as a response with the proper status code.
Most of our API endpoints are not publicly available so you must authenticate in order to use them. To do so you need to acquire an API token first. Navigate to the Manage Settings page and generate one there. You can always regenerate it but keep in mind that this will revoke your old token and it won't be accepted anymore.
Once you have a token you need to provide it as an HTTP header on each request you make:
Authorization: Token {your-api-token}
The API is constantly evolving to match the new features we add to the dmarcian platform. In order to ensure backward compatibility and not break clients we have versioned the API. Each endpoint contains a parameter in the URL that specifies the requested version and looks like this:
/api/v{version-number}/domains/
Endpoint calls can result in one of the following HTTP Status Codes:
| Code | Meaning |
|---|---|
| 200 | Successful operation (read, update, etc.) |
| 201 | Resource created (usually on POST requests) |
| 202 | Request for processing has been accepted (e.g. a long query job) |
| 204 | Successful operation without a response body (e.g. delete) |
400* |
Invalid request parameters |
| 401 | Unauthorized - your API token is either missing or invalid |
| 402 | Account subscription has expired |
| 403 | Forbidden - you are not permitted to perform the operation |
| 404 | Requested resource not found |
| 500 | Oops - something went wrong |
* Have in mind that properties specified in the request body that are not
supported will be IGNORED.
HATEOAS (Hypermedia as the Engine of Application State) is a very cool idea. In essence - endpoint responses provide navigation information by including hypermedia links to the available actions / resources. The main benefit is that clients do not have to be familiar how endpoint URLs are built and do not need to hardcode them inside their API integration.
We have embraced this idea but we have deviated from the specification a bit to have
a simpler response structure. We have also added an extra layer on top - permissions.
Responses may contain a _links property that lists all available actions and
a _permissions property that specifies which of the actions are permitted to the
current user.
The API provides a root endpoint that lists all main resources and links to explore them.
For the latest API version call:
https://<region>.dmarcian.com/api/
For a specific API version call:
https://<region>.dmarcian.com/api/v{version-number}/
Example response:
{
"domains": "https://<region>.dmarcian.com/api/v1/domains/",
"domain_groups": "https://<region>.dmarcian.com/api/v1/domain-groups/",
"issues": "https://<region>.dmarcian.com/api/v1/issues/",
"tasks": "https://<region>.dmarcian.com/api/v1/tasks/"
}
All list API endpoints support pagination and share an identical response format (check a
specific endpoint reference for a detailed response schema). The _links property contains URLs
for navigation - first page, last page, next page, etc. and the _permissions property specifies what
is permitted - e.g. only list or also create.
Example response:
{
"_links": {
"first": "https://<region>.dmarcian.com/api/v1/domains/",
"last": "https://<region>.dmarcian.com/api/v1/domains/?page=5",
"next": "https://<region>.dmarcian.com/api/v1/domains/?page=2",
"previous": null
},
"_permissions": [
"list"
],
"count": 24,
"pages": 5,
"current_page": 1,
"per_page": 5,
"results": []
}
Object API endpoints operate on a specific resource with a unique identifier. The _links
property works the same way as described above with one specific difference - the self key
inside is used for multiple actions - retrieve, update, partial_update and destroy.
Example response:
{
"_links": {
"self": "https://<region>.dmarcian.com/api/v1/domains/17/",
"refresh": "https://<region>.dmarcian.com/api/v1/domains/17/refresh/",
"subdomains": "https://<region>.dmarcian.com/api/v1/domains/?parent_id=17&treat_as_top_level=False"
},
"_permissions": [
"retrieve",
"refresh",
"update",
"partial_update",
"destroy"
],
"id": 17,
...
}
API returns date fields as a string representing the UTC date and time in ISO 8601 format,
YYYY-MM-DDTHH:MM:SS.mmmmmm or, if microsecond is 0, YYYY-MM-DDTHH:MM:SS.
In example below Z is the zone designator for the zero UTC offset.
{
"created": "2017-09-11T10:18:50.875874Z"
}
API accepts date time in ISO 8601 format with given UTC offset(Z for zero or ±HH:MM):
{
"begin": "2017-09-11T10:18:50+03:00",
"end": "2017-09-11T10:18:50+03:00"
}
After getting familiar with the basics it's time to get our hands dirty and actually do something with the API. In this How To section we are going to describe some common scenarios - check the reference for more advanced cases.
dmarcian does not provide any SDKs currently but communication with the API can be
achieved in any programming language since all endpoints are HTTP based. We will
use curl in our examples for simplicity.
The first step after creating an account at dmarcian is to add a domain so we are going to describe how can this be achieved via the API.
Check the Authentication section for details how to obtain an API token - we will need it for calling the API.
All domains live under a certain domain group (either the default one which you will automatically have after registration or a group you have created). In order to create a domain we need to find a group to add it to first:
curl -G https://<region>.dmarcian.com/api/v1/domain-groups/ -H 'Authorization: Token {your-api-token}'
You will get a paginated list of all available groups. Just choose the one you want
to add a domain to (look inside the results property) and copy the add_domain URL under
_links - we will use it in the next step.
After we've chosen a group we can actually add the domain:
curl -d '{"domains":["example.com"]}' https://<region>.dmarcian.com/api/v1/domain-groups/{chosen-group-id}/add-domains/ -H 'Authorization: Token {your-api-token}' -H 'Content-Type: application/json'
The response will contain URLs to the newly created domains:
{
"added": ["https://<region>.dmarcian.com/api/v1/domains/{created-domain-id}/"]
}
And voila - you have added your first domain via the API. Now let's verify that
the domain is listed under the group. Copy the domains property under _links
from the group you chose in step 2 and list the domains:
curl -G 'https://<region>.dmarcian.com/api/v1/domains/?treat_as_top_level=True&group_id={chosen-group-id}' -H 'Authorization: Token {your-api-token}'
You should see the new domain in the results property of the paginated response.
The API reference allows you to dive into each endpoint and check how example requests and response look like, what filters are supported and what is the meaning of each property.
User endpoints allow management of users that belong to your organization. In order to use these endpoints you need admin access.
Get a list of all users within an account.
string Filter users by email address. | |
| limit | integer Number of results to return per page. |
| ordering | string Enum: "username" "-username" "email" "-email" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
| username | string Filter users by username. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "email": "user@example.com",
- "username": "string",
- "date_joined": "string",
- "is_active": true,
- "is_admin": true,
- "is_owner": true,
- "api_token": "string",
- "sso_ready": true,
- "has_forensic_access": true,
- "has_billing_access": true,
- "last_login": "2019-08-24T14:15:22Z",
- "last_login_sso": true,
- "has_2fa_enabled": true,
- "settings": null
}
]
}An email with an activation list is send upon each user creation. The user must click through the link in order to activate the account.
| email required | string <email> (Email address) <= 254 characters |
| is_admin | boolean Admin access allows users to create domain groups and manage both user and domain group access control. |
| has_forensic_access | boolean Granting Forensic access gives users access to view DMARC Forensic reports. |
| has_billing_access | boolean Giving users billing access will let them view and manage subscription and payment information. |
{- "email": "user@example.com",
- "is_admin": true,
- "has_forensic_access": true,
- "has_billing_access": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "email": "user@example.com",
- "username": "string",
- "date_joined": "string",
- "is_active": true,
- "is_admin": true,
- "is_owner": true,
- "api_token": "string",
- "sso_ready": true,
- "has_forensic_access": true,
- "has_billing_access": true,
- "last_login": "2019-08-24T14:15:22Z",
- "last_login_sso": true,
- "has_2fa_enabled": true,
- "settings": null
}| id required | integer A unique integer value identifying this user. |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "email": "user@example.com",
- "username": "string",
- "date_joined": "string",
- "is_active": true,
- "is_admin": true,
- "is_owner": true,
- "api_token": "string",
- "sso_ready": true,
- "has_forensic_access": true,
- "has_billing_access": true,
- "last_login": "2019-08-24T14:15:22Z",
- "last_login_sso": true,
- "has_2fa_enabled": true,
- "settings": null
}| id required | integer A unique integer value identifying this user. |
| email required | string <email> (Email address) <= 254 characters |
| settings | any |
{- "email": "user@example.com",
- "settings": null
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "email": "user@example.com",
- "username": "string",
- "date_joined": "string",
- "is_active": true,
- "is_admin": true,
- "is_owner": true,
- "api_token": "string",
- "sso_ready": true,
- "has_forensic_access": true,
- "has_billing_access": true,
- "last_login": "2019-08-24T14:15:22Z",
- "last_login_sso": true,
- "has_2fa_enabled": true,
- "settings": null
}| id required | integer A unique integer value identifying this user. |
string <email> (Email address) <= 254 characters | |
| settings | any |
{- "email": "user@example.com",
- "settings": null
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "email": "user@example.com",
- "username": "string",
- "date_joined": "string",
- "is_active": true,
- "is_admin": true,
- "is_owner": true,
- "api_token": "string",
- "sso_ready": true,
- "has_forensic_access": true,
- "has_billing_access": true,
- "last_login": "2019-08-24T14:15:22Z",
- "last_login_sso": true,
- "has_2fa_enabled": true,
- "settings": null
}| id required | integer A unique integer value identifying this user. |
| password_old required | string Current user password. |
| password required | string New user password. |
| password_confirm required | string Confirm new password. |
{- "password_old": "string",
- "password": "string",
- "password_confirm": "string"
}{- "password_old": "string",
- "password": "string",
- "password_confirm": "string"
}Domain Group ACL allow you to control the level of access to domains within a particular group. There are three available options: no access, read-only and write access.In order to use these endpoints you need admin access.
| label | string Filter domain groups by label. |
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "label": "string",
- "users": [
- null
]
}
]
}| id required | integer A unique integer value identifying this domain_group. |
| users required | Array of integers List of user IDs. |
{- "users": [
- 0
]
}{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "is_active": true,
- "readwrite_access": false,
- "readonly_access": false
}| id required | integer A unique integer value identifying this domain_group. |
| users required | Array of integers List of user IDs. |
{- "users": [
- 0
]
}{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "is_active": true,
- "readwrite_access": false,
- "readonly_access": false
}| id required | integer A unique integer value identifying this domain_group. |
| users required | Array of integers List of user IDs. |
{- "users": [
- 0
]
}{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "is_active": true,
- "readwrite_access": false,
- "readonly_access": false
}Domain group is a list of domains. By definition the DEFAULT group contains all domains. It is possible to configure the DEFAULT group to hide domains added to other groups. For other than the DEFAULT group you can configure the group for parked domains (not expected to send email) only. Other options are batch add/delete and move domains from one group to another.
Get a list of all users within an account.
| domain_state | string Enum: "active" "inactive" "unknown" Filter results by domain state ("active", "inactive", "unknown").
|
| label | string Filter results by domain group name. |
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
| search | string Search by domain group name or contained domains |
| search_exact | string Search by domain group name or contained domain exact match |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "uid": "string",
- "label": "string",
- "notes": "string",
- "is_default": true,
- "parked_domains": true,
- "hide_assigned_domains": true,
- "domain_state": "string",
- "domain_count": 0,
- "issues": 0,
- "tasks": 0,
- "max_volume_count": 0
}
]
}Create a new domain group owned by the user.
| label required | string <= 128 characters |
| notes | string |
| parked_domains | boolean (For parked domains?) Domains in group are not expected to send emails. |
{- "label": "string",
- "notes": "string",
- "parked_domains": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "uid": "string",
- "label": "string",
- "notes": "string",
- "is_default": true,
- "parked_domains": true,
- "hide_assigned_domains": true,
- "domain_state": "string",
- "domain_count": 0,
- "issues": 0,
- "tasks": 0,
- "max_volume_count": 0
}| id required | integer A unique integer value identifying this domain_group. |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "uid": "string",
- "label": "string",
- "notes": "string",
- "is_default": true,
- "parked_domains": true,
- "hide_assigned_domains": true,
- "domain_state": "string",
- "domain_count": 0,
- "issues": 0,
- "tasks": 0,
- "max_volume_count": 0
}Update domain group related properties (e.g. label, notes). Setting "hide_assigned_domains" to other than the DEFAULT group is not allowed. Setting "parked_domains" for the DEFAULT group is not allowed.
| id required | integer A unique integer value identifying this domain_group. |
| label required | string <= 128 characters |
| notes | string |
| parked_domains | boolean (For parked domains?) Domains in group are not expected to send emails. |
| hide_assigned_domains | boolean (Hide domains in other groups?) Hide domains in DEFAULT group if exist in other group(s). |
{- "label": "string",
- "notes": "string",
- "parked_domains": true,
- "hide_assigned_domains": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "uid": "string",
- "label": "string",
- "notes": "string",
- "is_default": true,
- "parked_domains": true,
- "hide_assigned_domains": true,
- "domain_state": "string",
- "domain_count": 0,
- "issues": 0,
- "tasks": 0,
- "max_volume_count": 0
}Update domain group related properties (e.g. label, notes). Setting "hide_assigned_domains" to other than the DEFAULT group is not allowed. Setting "parked_domains" for the DEFAULT group is not allowed.
| id required | integer A unique integer value identifying this domain_group. |
| label | string <= 128 characters |
| notes | string |
| parked_domains | boolean (For parked domains?) Domains in group are not expected to send emails. |
| hide_assigned_domains | boolean (Hide domains in other groups?) Hide domains in DEFAULT group if exist in other group(s). |
{- "label": "string",
- "notes": "string",
- "parked_domains": true,
- "hide_assigned_domains": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "uid": "string",
- "label": "string",
- "notes": "string",
- "is_default": true,
- "parked_domains": true,
- "hide_assigned_domains": true,
- "domain_state": "string",
- "domain_count": 0,
- "issues": 0,
- "tasks": 0,
- "max_volume_count": 0
}| id required | integer A unique integer value identifying this domain_group. |
| domains required | Array of strings[ items^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... ] Domain list. |
| domain_state | string or null Enum: "active" "inactive" "unknown" null Domain state. Available options are: "active", "inactive" and "unknown".
|
{- "domains": [
- "string"
], - "domain_state": "active"
}{
}Move domains from their source group into the target group (the group in the URL).
| id required | integer A unique integer value identifying this domain_group. |
required | Array of objects (ToMove) |
{- "domains": [
- {
- "domain": "string",
- "group_id": 0
}
]
}{- "domain_state": "active",
- "not_existing": [
- "string"
]
}Remove domains from the target group (except default).
| id required | integer A unique integer value identifying this domain_group. |
| domains required | Array of strings[ items^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... ] |
{- "domains": [
- "string"
]
}{ }Domains are the main entity in your Domain Catalog. When you add your domains to dmarcian we start monitoring numerous things - the state of your SPF, DKIM and DMARC records, the email volumes sent from those domains and what is their compliance level (if they have DMARC records with reporting sent to dmarcian). This way you will get an overview of your domains, identifying which ones send email and in what volumes.
List domains the current user has access to.
| assigned | boolean Show domains belonging to a group (True) or domains from the default group (False). |
| domain | string Filter results by domain name. |
| domain_exact | string Filter results by exact domain name. |
| domain_state | string Enum: "active" "inactive" "unknown" Filter results by domain state ("active", "inactive", "unknown").
|
| format | string Enum: "csv" "json" |
| group_id | number Filter results by group id. |
| has_errors | boolean Has Errors |
| is_verified | boolean Is Verified |
| last_seen_dmarc_policy | string Enum: "" "e" "n" "on" "oq" "or" "q" "r" "x" DMARC Policy
|
| limit | integer Number of results to return per page. |
| ordering | string Which field to use when ordering the results. |
| origin | string or null (Domain Origin) Enum: "d" "m" "v" Domain Origin
|
| page | integer A page number within the paginated result set. |
| parent_id | integer Filter subdomains by their parent domain id. |
| spf_lookup_count_max | integer [ -2147483648 .. 2147483647 ] SPF Lookup Count |
| spf_lookup_count_min | integer [ -2147483648 .. 2147483647 ] SPF Lookup Count |
| treat_as_top_level | boolean Show domains treated as top level (True) or subdomains (False). |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "notes": "string",
- "is_verified": true,
- "count_dmarc_capable": 0,
- "count_non_dmarc_capable": 0,
- "count_forwarded": 0,
- "count_threat_other": 0,
- "top_level": true,
- "is_subdomain": true,
- "subdomain_count": 0,
- "nxdomain": true,
- "domain_state": "string",
- "state_dmarc": "present",
- "state_spf": "present",
- "state_dkim": "present",
- "states": {
- "property1": null,
- "property2": null
}, - "added_date": "2019-08-24T14:15:22Z",
- "origin": {
- "property1": null,
- "property2": null
}, - "records_dmarc": "string",
- "records_spf": "string",
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}
]
}| id required | integer A unique integer value identifying this domain_map. |
| format | string Enum: "csv" "json" |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "notes": "string",
- "is_verified": true,
- "count_dmarc_capable": 0,
- "count_non_dmarc_capable": 0,
- "count_forwarded": 0,
- "count_threat_other": 0,
- "top_level": true,
- "is_subdomain": true,
- "subdomain_count": 0,
- "nxdomain": true,
- "domain_state": "string",
- "state_dmarc": "present",
- "state_spf": "present",
- "state_dkim": "present",
- "states": {
- "property1": null,
- "property2": null
}, - "added_date": "2019-08-24T14:15:22Z",
- "origin": {
- "property1": null,
- "property2": null
}, - "records_dmarc": "string",
- "records_spf": "string",
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}Update domain properties.
| id required | integer A unique integer value identifying this domain_map. |
| format | string Enum: "csv" "json" |
| notes | string |
| top_level | boolean Whether domain is top level. ONLY subdomains can be promoted. |
| spf_lookup_count | integer [ -2147483648 .. 2147483647 ] |
| last_upload_time | string or null <date-time> |
{- "notes": "string",
- "top_level": true,
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "notes": "string",
- "is_verified": true,
- "count_dmarc_capable": 0,
- "count_non_dmarc_capable": 0,
- "count_forwarded": 0,
- "count_threat_other": 0,
- "top_level": true,
- "is_subdomain": true,
- "subdomain_count": 0,
- "nxdomain": true,
- "domain_state": "string",
- "state_dmarc": "present",
- "state_spf": "present",
- "state_dkim": "present",
- "states": {
- "property1": null,
- "property2": null
}, - "added_date": "2019-08-24T14:15:22Z",
- "origin": {
- "property1": null,
- "property2": null
}, - "records_dmarc": "string",
- "records_spf": "string",
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}Update some of the domain properties.
| id required | integer A unique integer value identifying this domain_map. |
| format | string Enum: "csv" "json" |
| notes | string |
| top_level | boolean Whether domain is top level. ONLY subdomains can be promoted. |
| spf_lookup_count | integer [ -2147483648 .. 2147483647 ] |
| last_upload_time | string or null <date-time> |
{- "notes": "string",
- "top_level": true,
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "notes": "string",
- "is_verified": true,
- "count_dmarc_capable": 0,
- "count_non_dmarc_capable": 0,
- "count_forwarded": 0,
- "count_threat_other": 0,
- "top_level": true,
- "is_subdomain": true,
- "subdomain_count": 0,
- "nxdomain": true,
- "domain_state": "string",
- "state_dmarc": "present",
- "state_spf": "present",
- "state_dkim": "present",
- "states": {
- "property1": null,
- "property2": null
}, - "added_date": "2019-08-24T14:15:22Z",
- "origin": {
- "property1": null,
- "property2": null
}, - "records_dmarc": "string",
- "records_spf": "string",
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}Refresh domain's statistics.
| id required | integer A unique integer value identifying this domain_map. |
| format | string Enum: "csv" "json" |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "notes": "string",
- "is_verified": true,
- "count_dmarc_capable": 0,
- "count_non_dmarc_capable": 0,
- "count_forwarded": 0,
- "count_threat_other": 0,
- "top_level": true,
- "is_subdomain": true,
- "subdomain_count": 0,
- "nxdomain": true,
- "domain_state": "string",
- "state_dmarc": "present",
- "state_spf": "present",
- "state_dkim": "present",
- "states": {
- "property1": null,
- "property2": null
}, - "added_date": "2019-08-24T14:15:22Z",
- "origin": {
- "property1": null,
- "property2": null
}, - "records_dmarc": "string",
- "records_spf": "string",
- "spf_lookup_count": -2147483648,
- "last_upload_time": "2019-08-24T14:15:22Z"
}Issues are problems dmarcian has discovered while monitoring your domains. They are mainly related to your SPF, DKIM and DMARC records but may contain other problems too. We also track the time an issue has occurred and when it has been solved.
List all domain issues discovered for the account.
| assigned_to_group | boolean Filter results by domains assigned to a group (different than the default one). |
| created_after | string <date> Filter results by issues created on or after date |
| created_before | string <date> Filter results by issues created on or before date |
| domain | string Filter results by domain. |
| domain_state | string Enum: "active" "inactive" "unknown" Filter results by domain state ("active", "inactive", "unknown").
|
| group_id | number Filter results by domains belonging to the group id. |
| ignored | boolean Show ignored issues (True) or not (False). |
| limit | integer Number of results to return per page. |
| ordering | string Enum: "created" "-created" "solved" "-solved" "domain" "-domain" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
| solved | boolean Show solved issues (True) or not (False). |
| top_level | boolean Show issues for domains treated as top level (True) or for subdomains (False). |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "problem": "string",
- "solution": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solved": "2019-08-24T14:15:22Z",
- "ignore": true
}
]
}| id required | integer A unique integer value identifying this issue. |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "problem": "string",
- "solution": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solved": "2019-08-24T14:15:22Z",
- "ignore": true
}Update issue properties.
| id required | integer A unique integer value identifying this issue. |
| ignore required | boolean Is issue ignored. |
{- "ignore": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "problem": "string",
- "solution": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solved": "2019-08-24T14:15:22Z",
- "ignore": true
}Update some of the issue properties.
| id required | integer A unique integer value identifying this issue. |
| ignore | boolean Is issue ignored. |
{- "ignore": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "problem": "string",
- "solution": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solved": "2019-08-24T14:15:22Z",
- "ignore": true
}Tasks are the next steps you have to take in your journey to deploy DMARC. After each change you make to your domains dmarcian suggests what should be done next until you reach the last phase - monitoring.
List all domain tasks generated for the account.
| assigned_to_group | boolean Filter results by domains assigned to a group (different than the default one). |
| created_after | string <date> Filter results by tasks created on or after date |
| created_before | string <date> Filter results by tasks created on or before date |
| domain | string Filter results by domain. |
| domain_state | string Enum: "active" "inactive" "unknown" Filter results by domain state ("active", "inactive", "unknown").
|
| group_id | number Filter results by domains belonging to the group id. |
| ignored | boolean Show ignored tasks (True) or not (False). |
| limit | integer Number of results to return per page. |
| ordering | string Enum: "domain" "-domain" "category" "-category" "created" "-created" "solve_time" "-solve_time" "resolved" "-resolved" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
| solved | boolean Show solved tasks (True) or not (False). |
| top_level | boolean Show tasks for domains treated as top level (True) or for subdomains (False). |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "category": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solve_time": "2019-08-24T14:15:22Z",
- "solved": true,
- "ignore": true
}
]
}| id required | integer A unique integer value identifying this task. |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "category": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solve_time": "2019-08-24T14:15:22Z",
- "solved": true,
- "ignore": true
}Update task properties.
| id required | integer A unique integer value identifying this task. |
| ignore required | boolean Is task ignored. |
{- "ignore": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "category": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solve_time": "2019-08-24T14:15:22Z",
- "solved": true,
- "ignore": true
}Update some of the task properties.
| id required | integer A unique integer value identifying this task. |
| ignore | boolean Is task ignored. |
{- "ignore": true
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domain": "string",
- "category": "string",
- "details": "string",
- "created": "2019-08-24T14:15:22Z",
- "solve_time": "2019-08-24T14:15:22Z",
- "solved": true,
- "ignore": true
}Inspects a published DMARC record for a specific domain.
| domain required | string^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... |
{- "domain": "string"
}{- "domain": "domain.com",
- "policy_domain": "domain.com",
- "dns_query": "_dmarc.domain.com",
- "valid": "false",
- "rua_dmarcian_usage": "false",
- "messages": [
- {
- "code": "dmarc.record.not.valid",
- "text": "DMARC record is present, but invalid.",
- "level": "err"
}
], - "records": [
- {
- "txt": "v=DMARC1; p=rejected",
- "is_dmarc": "true",
- "valid": "false",
- "messages": [
- {
- "code": "dmarc.tag.rua.no_rua_record",
- "text": "DMARC record has no \"rua\" tag so you cannot receive DMARC reports.",
- "level": "warn"
}
], - "tags": [
- {
- "key": "p",
- "value": "rejected",
- "default": "string",
- "description": "Policy to apply to email that fails the DMARC check.",
- "valid": "false",
- "supported": "false",
- "messages": [
- {
- "code": "dmarc.tag.p.invalid",
- "text": "Invalid \"p\" tag: allowed values are \"none\", \"quarantine\" and \"reject\".",
- "level": "err"
}
]
}
]
}
]
}Validates a DMARC record string.
| record required | string |
{- "record": "string"
}{- "dns_query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "valid": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "is_dmarc": true
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "rua_dmarcian_usage": true,
- "domain": "string",
- "policy_domain": "string",
- "cname": "string"
}Inspects a published DKIM record for a specific domain and selector.
| domain required | string^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... |
| selector required | string^((?!\-)([a-zA-Z0-9\-_]{1,63})(?<!\-)\.?)*?(?... |
{- "domain": "string",
- "selector": "string"
}{- "domain": "domain.com",
- "selector": "default",
- "query": "default._domainkey.domain.com",
- "valid": "false",
- "messages": [
- {
- "code": "dkim.invalid",
- "text": "The public DKIM provided is invalid. See the Warnings/Errors section below for any available guidance.",
- "level": "err"
}
], - "records": [
- {
- "txt": "v=DKIM1;",
- "is_dkim": "true",
- "valid": "false",
- "public_key_length": 2048,
- "messages": [
- {
- "code": "dkim.record.required_public_key",
- "text": "Public key (\"p\" tag) is required.",
- "level": "err"
}
], - "tags": [
- {
- "key": "v",
- "value": "DKIM1",
- "name": "Version",
- "default": "DKIM1",
- "valid": "true",
- "supported": "true",
- "messages": [
- {
- "code": "code",
- "text": "Details.",
- "level": "info"
}
]
}
]
}
]
}Validates a DMARC record string.
| record required | string |
{- "record": "string"
}{- "domain": "string",
- "selector": "string",
- "query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "public_key_length": 0,
- "valid": true,
- "is_dkim": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "name": "string",
- "default": "string",
- "valid": true,
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "cname": "string"
}SPF tools allow you to analyze and validate SPF records.
| domain required | string^(?=.{,253}$)(?:(?!\-)(?:[a-zA-Z0-9\-_]{1,63}... |
| volume_days | integer [ 1 .. 30 ] |
{- "domain": "string",
- "volume_days": 1
}{- "domain": "example.com",
- "volume_days": 0,
- "valid": "false",
- "records": [
- {
- "txt": "v=spf1 include:_spf.google.com ~all",
- "valid": "false",
- "terms": [
- {
- "value": "include:spf.example.com",
- "valid": "false",
- "ignored": "false",
- "messages": [
- {
- "code": "code",
- "text": "Details.",
- "level": "info"
}
], - "type": "mechanism",
- "known": "true",
- "qualifier": "+",
- "name": "include",
- "domain_spec": "spf.example.com",
- "target_name": "spf.example.com",
- "result": [ ],
- "query_count": 1,
- "pass_ip4_count": 1
}
], - "messages": [
- {
- "code": "code",
- "text": "Details.",
- "level": "info"
}
]
}
], - "messages": [
- {
- "code": "code",
- "text": "Details.",
- "level": "info"
}
], - "query_count": 3,
- "pass_network_count": 16,
- "pass_ip4_count": 492161,
- "volume": {
- "survey_domain_network_count": 0,
- "survey_domain_volume": 0,
- "other_domain_network_count": 0,
- "other_domain_volume": 0,
- "other_domain_count": 0
}, - "default_result": "softfail",
- "pass_duplicate_ip4_networks": [
- {
- "network": "network",
- "count": "count"
}
], - "pass_duplicate_ip6_networks": [
- {
- "network": "network",
- "count": "count"
}
], - "flattened": [
- {
- "domain": "domain",
- "record": "record"
}
], - "flattened_query_count": 5
}Inspect BIMI record details including certificate and SVG information.
| domain required | string^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... |
| selector required | string^((?!\-)([a-zA-Z0-9\-_]{1,63})(?<!\-)\.?)*?(?... |
{- "domain": "string",
- "selector": "string"
}{- "bimi": {
- "dns_query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "valid": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "is_bimi": true
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "domain": "string",
- "authority": {
- "expires": "2019-08-24T14:15:22Z",
- "starts": "2019-08-24T14:15:22Z",
- "issuer": "string",
- "certificate_url": "string",
- "valid": true,
- "certificate_type": "string",
- "mark_type": "string",
- "subject_alternative_names": [
- "string"
]
}, - "indicator": {
- "indicator_url": "string",
- "valid": true,
- "svg": {
- "txt": "string",
- "valid": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "attributes": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
]
}
}, - "policy_domain": "string"
}, - "dmarc": {
- "dns_query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "valid": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "is_dmarc": true
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "rua_dmarcian_usage": true,
- "domain": "string",
- "policy_domain": "string",
- "cname": "string"
}
}The TLS inspector allows you to analyze and validate TLS Reporting records for a domain.
Inspects a published TLS RPT record for a specific domain.
| domain required | string^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... |
{- "domain": "string"
}{- "dns_query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "valid": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "is_tls_rpt": true
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "rua_dmarcian_usage": true
}Inspects a published TLS STS record for a specific domain.
| domain required | string^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... |
{- "domain": "string"
}{- "dns_query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "valid": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "is_mta_sts": true
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}The MTA Policy Inspector allows you to view the published policy file for a domain.
Inspects a published TLS STS record for a specific domain.
| domain required | string^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... |
{- "domain": "string"
}{- "dns_query": "string",
- "valid": true,
- "records": [
- {
- "txt": "string",
- "valid": true,
- "tags": [
- {
- "key": "string",
- "value": "string",
- "default": "string",
- "valid": true,
- "description": "string",
- "supported": true,
- "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
], - "is_mta_sts_policy": true
}
], - "messages": [
- {
- "code": "string",
- "text": "string",
- "level": "string"
}
]
}The Source Viewer allows you to gain detailed insight into the different organizations and types of infrastructure that are sending email on behalf of your domains. The provided data is from DMARC Capable Sources that have delivered email for your domains in the past 7 days.
Lists current account's known domain volume by source.
| filter_id | integer Source filter id to filter data by. |
| format | string Enum: "csv" "json" |
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
| source_number | integer Source number to return data for. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "source_number": 0,
- "source_name": "string",
- "source_slug": "string",
- "domain": "string",
- "message_count": 0,
- "spf_count": 0,
- "spf_percentage": 0.1,
- "dkim_count": 0,
- "dkim_percentage": 0.1,
- "dmarc_count": 0,
- "dmarc_percentage": 0.1
}
]
}Lists current account's known sources with volume totals.
| filter_id | integer Source filter id to filter data by. |
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permission": "string",
- "number": 0,
- "name": "string",
- "slug": "string",
- "domain_count": 0,
- "message_count": 0,
- "is_custom_source": true,
- "spf_count": 0,
- "spf_percentage": 0.1,
- "dkim_count": 0,
- "dkim_percentage": 0.1,
- "dmarc_count": 0,
- "dmarc_percentage": 0.1,
- "capabilities": {
- "capable_spf": true,
- "capable_dkim": true,
- "notes_dmarc": "string",
- "notes_spf": "string",
- "notes_dkim": "string"
}
}
]
}Source filters allow you to retrieve source data limited to a certain set of domains. After a filter has been created it can be applied to the source list and source domain list endpoints by adding it as a filter_id GET parameter.
Lists stored source filters ordered by date descendingly.
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_permissions": "string",
- "id": 0,
- "domains": [
- "string"
], - "created": "2019-08-24T14:15:22Z"
}
]
}Creates a new source filter.
| domains required | Array of strings |
{- "domains": [
- "string"
]
}{- "_permissions": "string",
- "id": 0,
- "domains": [
- "string"
], - "created": "2019-08-24T14:15:22Z"
}Retrieves a source filter details.
| id required | integer A unique integer value identifying this source viewer filter. |
{- "_permissions": "string",
- "id": 0,
- "domains": [
- "string"
], - "created": "2019-08-24T14:15:22Z"
}The Source Viewer data is being cached for certain time to improve retrieval speed. You can manually trigger source data cache refresh or get the last time data was refreshed via the following endpoints.
Forensic reports contain content from real email and complement DMARC aggregate reports. They are generated by DMARC-capable receivers when they receive email that fails to pass the DMARC check. By inspecting forensic reports users can quickly discover if email is illegitimate (fraud, abuse, phishing, spam, etc.) or is legitimate but is in need of fixing / is traveling through forwarders. To investigate forensic data, you must create a report job and paginate the results with the associated search_token
Returns a paginated list of forensic data records from BigQuery.
| limit | integer Number of results to return per page. Default: 10, max: 100. |
| page | integer Page of results to return. |
| search_token required | string Token identifying the forensic report job. |
[- {
- "count": 0,
- "pages": 0,
- "current_page": 0,
- "per_page": 0,
- "results": [
- {
- "account_token": "string",
- "email_file_name": "string",
- "report_original_mail_from": "string",
- "report_auth_failure": "string",
- "report_authentication_results": "string",
- "report_source_ip": "string",
- "report_reported_domain": "string",
- "subject": "string",
- "sample_return_path": "string",
- "sample_message_id": "string",
- "sample_header_to": "string",
- "sample_header_from": "string",
- "sample_received_spf": [
- null
], - "sample_auth_results": [
- null
], - "sample_reply_to": "string",
- "sample_dkim_signature": [
- null
], - "received_datetime": "string",
- "start_date": "string",
- "end_date": "string"
}
]
}
]Forensic jobs allow you to create a set of filtered forensic data based on a set of criteria. After a filter has been created it can be applied to the forensic report list endpoint by adding it as a filter_id GET parameter.
List existing forensic report jobs.
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "search_token": "string",
- "progress": 0,
- "_links": {
- "property1": null,
- "property2": null
}
}
]
}Create a forensic report job with filter criteria.
| start_date required | string <date> |
| end_date required | string <date> |
| subject | string |
| search_token | string <= 16 characters |
| report_source_ip | string |
| progress | integer [ 0 .. 32767 ] Enum: 0 1 100 700
|
| domains | Array of any |
{- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "subject": "string",
- "search_token": "string",
- "report_source_ip": "string",
- "progress": 0,
- "domains": [
- null
]
}{- "search_token": "string",
- "progress": 0,
- "_links": {
- "property1": null,
- "property2": null
}
}Get a forensic report job details.
| id required | integer A unique integer value identifying this forensic report job. |
{- "search_token": "string",
- "progress": 0,
- "_links": {
- "property1": null,
- "property2": null
}
}The Detail Viewer allows you to explore your DMARC data in a variety of ways. It shows a timeline of your data along with search parameters such as From & To date, domain, data-provider and a filter option that can be used to show what would have happened had a DMARC policy been in place.
List current user`s Detail Viewer reports. Each report availability is up to 3 days.
| limit | integer Number of results to return per page. |
| ordering | string Enum: "created" "-created" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "search_token": "string",
- "domains": [
- "string"
], - "providers": [
- "string"
], - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "filter_option": "n",
- "ip_cidr": "string",
- "country_code": [
- "string"
], - "spf_result": [
- "n"
], - "spf_policy": "p",
- "dkim_policy": "p",
- "dkim_result": [
- "n"
], - "dmarc_policy": [
- "?"
], - "rule_number": [
- 0
], - "spf_domain": "string",
- "ptr": "string",
- "override_comment": "string"
}
]
}Report creation is asynchronous process. In case report already exists for the given input, response status code is 200. If report creation is started, then 202 is returned. While report is being prepared, only available call is to check its progress (available in "_links"). Progress endpoint must be called on certain time interval. When progress value become 100%, report is ready and its data could be retrieved. Any calls to report data before it is ready will return 404 Not found.
| domains | Array of strings[ items^(?=.{,253}$)(?:(?!\-)(?:[a-zA-Z0-9\-_]{1,63}... ] |
| providers | Array of strings |
| start_date required | string <date> |
| end_date required | string <date> |
| filter_option required | string Enum: "n" "o" "x" "d"
|
| ip_cidr | string |
| country_code | Array of strings |
| spf_result | Array of strings Items Enum: "n" "?" "+" "-" "~" "T" "P" "X" |
| spf_policy | string Enum: "p" "f" ""
|
| dkim_policy | string Enum: "p" "f" ""
|
| dkim_result | Array of strings Items Enum: "n" "+" "-" "y" "?" "T" "P" "X" |
| dmarc_policy | Array of strings Items Enum: "?" "n" "q" "r" |
| rule_number | Array of integers |
| spf_domain | string |
| ptr | string |
| override_comment | string |
{- "domains": [
- "string"
], - "providers": [
- "string"
], - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "filter_option": "n",
- "ip_cidr": "string",
- "country_code": [
- "string"
], - "spf_result": [
- "n"
], - "spf_policy": "p",
- "dkim_policy": "p",
- "dkim_result": [
- "n"
], - "dmarc_policy": [
- "?"
], - "rule_number": [
- 0
], - "spf_domain": "string",
- "ptr": "string",
- "override_comment": "string"
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "search_token": "string",
- "domains": [
- "string"
], - "providers": [
- "string"
], - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "filter_option": "n",
- "ip_cidr": "string",
- "country_code": [
- "string"
], - "spf_result": [
- "n"
], - "spf_policy": "p",
- "dkim_policy": "p",
- "dkim_result": [
- "n"
], - "dmarc_policy": [
- "?"
], - "rule_number": [
- 0
], - "spf_domain": "string",
- "ptr": "string",
- "override_comment": "string"
}| search_token required | string |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "search_token": "string",
- "domains": [
- "string"
], - "providers": [
- "string"
], - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "filter_option": "n",
- "ip_cidr": "string",
- "country_code": [
- "string"
], - "spf_result": [
- "n"
], - "spf_policy": "p",
- "dkim_policy": "p",
- "dkim_result": [
- "n"
], - "dmarc_policy": [
- "?"
], - "rule_number": [
- 0
], - "spf_domain": "string",
- "ptr": "string",
- "override_comment": "string"
}The Detail Viewer report data endpoints also shows your data grouped into four high-level groups: DMARC-capable, Non-compliant, Forwarding, and Threat/Unknown. Each group shows infrastructure and details on DMARC compliance. You can find information per source on how to get DMARC compliant. You can reveal more detail about each group and discover the sources of your domain`s email.
Detailed data based upon hfrom domains
| search_token required | string^[a-zA-Z0-9]{16}$ |
| format | string Enum: "csv" "json" |
| limit | integer Number of results to return per page. |
| ordering | string Enum: "message_count" "-message_count" "from_domain" "-from_domain" "ip" "-ip" "ptr" "-ptr" "reason" "-reason" "dkim_result" "-dkim_result" "dkim_policy_result" "-dkim_policy_result" "spf_result" "-spf_result" "spf_policy_result" "-spf_policy_result" "policy_applied" "-policy_applied" "spf_d" "-spf_d" "dkim_d" "-dkim_d" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
| ptr_org | string Filter domains data by PTR grouping. |
| source_number | integer Filter domains data by source. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "from_domain": "string",
- "ip": "string",
- "ptr": "string",
- "message_count": 0,
- "country_code": "string",
- "country_name": "string",
- "policy_applied": "string",
- "override_reason": "string",
- "dkim_policy": "string",
- "dkim_raw": "string",
- "dkim_domain": "string",
- "spf_policy": "string",
- "spf_raw": "string",
- "spf_domain": "string",
- "seen_by": "string",
- "source_label": "string",
- "dkim_result": "string",
- "dkim_policy_result": "string",
- "spf_result": "string",
- "spf_policy_result": "string",
- "dkim_selectors": [
- null
], - "comment": "string",
- "dkim_selectors_text": "string"
}
]
}List given source data, such as messages count, spf, dkim and dmarc information
| search_token required | string^[a-zA-Z0-9]{16}$ |
| source_number required | string^[0-9]+$ |
| limit | integer Number of results to return per page. |
| ordering | string Enum: "message_count" "-message_count" "server_name" "-server_name" "ip_count" "-ip_count" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
| search | string A search term. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "server_name": "string",
- "header_froms": 0,
- "message_count": 0,
- "ip_count": 0,
- "spf_count": 0,
- "dkim_count": 0,
- "dmarc_count": 0,
- "dmarc_compliance": "string"
}
]
}List report sources in 4 categories - dmarc capable, non compliant, forwarders, unknown.
| search_token required | string |
{- "dmarc_capable": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "name": "string",
- "number": 0,
- "rule_number": 0,
- "message_count": 0,
- "slug": "string",
- "is_custom_source": true,
- "spf_count": 0,
- "spf_percentage": -999,
- "spf_text": "string",
- "dkim_count": 0,
- "dkim_percentage": -999,
- "dkim_text": "string",
- "dmarc_count": 0,
- "dmarc_percentage": -999,
- "dmarc_text": "string",
- "capabilities": {
- "capable_spf": true,
- "capable_dkim": true,
- "notes_dmarc": "string",
- "notes_spf": "string",
- "notes_dkim": "string"
}
}
], - "non_compliant": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "name": "string",
- "number": 0,
- "rule_number": 0,
- "message_count": 0,
- "slug": "string",
- "is_custom_source": true
}
], - "forwarders": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "name": "string",
- "number": 0,
- "rule_number": 0,
- "message_count": 0,
- "slug": "string",
- "is_custom_source": true,
- "dmarc_percentage": -999,
- "notes_fwd": "string",
- "dkim_text": "string",
- "dkim_count": 0,
- "dkim_explanation_title": "string",
- "dkim_explanation": "string"
}
], - "threat_unknown": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "name": "string",
- "number": 0,
- "rule_number": 0,
- "message_count": 0,
- "slug": "string",
- "is_custom_source": true,
- "no_policy_count": 0,
- "no_policy_percentage": -999,
- "quarantine_count": 0,
- "quarantine_percentage": -999,
- "reject_count": 0,
- "reject_percentage": -999,
- "unknown_count": 0,
- "unknown_percentage": -999,
- "notes_dmarc": "string"
}
]
}Policy filters allow you to retrieve policy planner data limited to a certain set of domains. After a filter has been created it can be applied to the policy domain list endpoint by adding it as a filter_id GET parameter.
Lists the latest policy planner filters created by the user.
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domains": [
- "string"
], - "created": "2019-08-24T14:15:22Z"
}
]
}Creates a new policy planner filter.
| domains required | Array of strings[ items^((?!\-)([a-zA-Z0-9\-]{1,63})(?<!\-)\.)+?((?!... ] |
{- "domains": [
- "string"
]
}{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domains": [
- "string"
], - "created": "2019-08-24T14:15:22Z"
}Retrieves policy planner filter details.
| id required | integer A unique integer value identifying this policy domain viewer filter. |
{- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "id": 0,
- "domains": [
- "string"
], - "created": "2019-08-24T14:15:22Z"
}The Policy Planner provides an overview of a domain's current state of DMARC deployment as well as readiness information that can assist in determining when a domain may be ready for a more aggressive, or more relaxed DMARC policy.
Lists policy domains the current user has access to.
| filter_id | integer Source filter id to filter data by. |
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
| policy_ready | boolean Show domains ready for new policy (True) or not (False). |
| recommendation | string Filter results by recommendation. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "_links": {
- "property1": null,
- "property2": null
}, - "_permissions": "string",
- "domain": "string",
- "record": {
- "pct": 0,
- "policy": "string",
- "valid": true
}, - "impact": {
- "total_emails": 0,
- "impacted_emails": 0,
- "impacted_categories": [
- {
- "source_type": "string",
- "label": "string",
- "quarantined_count": 0,
- "rejected_count": 0
}
]
}, - "recommendation": {
- "record": "string",
- "recommendation": "string"
}, - "readiness": {
- "ready": true,
- "forward_ready": true,
- "non_capable_ready": true,
- "sources": [
- {
- "label": "string",
- "ready": true,
- "messages_compliant": 0,
- "messages_total": 0,
- "dmarc_capable": true,
- "compliance_percentage": "string",
- "category": "string"
}
]
}
}
]
}TLS reporting provides visibility into connection issues between external servers sending messages to your domain.
List all TLS failure details per error Types.
| begin | string <date> Filter results by begin date. Max range 60 days. Default range 7 days. |
| end | string <date> Filter results by end date. Max range 60 days. Default range 7 days. |
| format | string Enum: "csv" "json" |
| limit | integer Number of results to return per page. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "receiving_mx_hostname": "string",
- "sending_mta_ip": "string",
- "failure_r_code": "string",
- "failed_session_count": 0,
- "receiving_ip": "string",
- "begin_date": "2019-08-24T14:15:22Z",
- "end_date": "2019-08-24T14:15:22Z",
- "org_name": "string",
- "r_type": "1"
}
]
}List all TLS Reports policy data.
| filter_id | number Filter TLS Report by id |
| limit | integer Number of results to return per page. |
| ordering | string Enum: "p_domain" "-p_domain" "sum_success" "-sum_success" "sum_failed" "-sum_failed" "p_type" "-p_type" "sts_p_mode" "-sts_p_mode" "last_seen" "-last_seen" Fields allowed for ordering results. |
| page | integer A page number within the paginated result set. |
{- "_links": {
- "first": "string",
- "last": "string",
- "next": "string",
- "previous": "string"
}, - "_permission": [
- "list",
- "create"
], - "pages": 3,
- "current_page": 2,
- "per_page": 10,
- "count": 123,
- "results": [
- {
- "p_type": "n",
- "p_domain": "string",
- "sts_p_mode": "n",
- "sum_success": 0,
- "sum_failed": 0,
- "last_seen": "2019-08-24T14:15:22Z"
}
]
}Retrieve a TLS Policy Detail.
| id required | integer A unique integer value identifying this tls viewer filter. |
{- "p_type": "n",
- "p_domain": "string",
- "sts_p_mode": "n",
- "sum_success": 0,
- "sum_failed": 0,
- "last_seen": "2019-08-24T14:15:22Z"
}