Get DMARC diagnostics
Reads stored DMARC policy diagnostics for a v2 Email domain. Checking queues a bounded DNS observation; it never edits DNS or changes sending permissions. Missing, malformed, multiple and unavailable are distinct. A valid record does not prove any individual message passes DMARC. p=none monitors only. Records may be inherited; existing policies must not be overwritten. Domain Connect is optional.
curl --request GET \
--url https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"checking": true,
"freshness": "pending",
"instructions": {
"explanation": "<string>",
"name": "<string>",
"type": "TXT",
"value": "<string>"
},
"resourceId": "<string>",
"result": {
"checkedAt": "2023-11-07T05:31:56Z",
"domain": "<string>",
"effectivePolicy": "none",
"expiresAt": "2023-11-07T05:31:56Z",
"inherited": true,
"nonExistentPolicy": "none",
"observations": [
{
"name": "<string>",
"records": [
"<string>"
],
"status": "valid",
"parsed": {
"adkim": "r",
"aspf": "r",
"p": "none",
"psd": "u",
"np": "none",
"sp": "none"
}
}
],
"sourceDomain": "<string>",
"standard": "RFC9989",
"status": "valid"
}
}{
"code": "NOT_AUTHENTICATED",
"status": 401,
"title": "Not Authenticated",
"type": "https://photon.codes/docs/problems/not-authenticated"
}{
"code": "FORBIDDEN",
"status": 403,
"title": "Forbidden",
"type": "https://photon.codes/docs/problems/forbidden"
}{
"code": "RESOURCE_NOT_FOUND",
"status": 404,
"title": "Resource Not Found",
"type": "https://photon.codes/docs/problems/resource-not-found"
}{
"code": "VALIDATION_FAILED",
"issues": [
{
"code": "invalid_type",
"location": "json",
"message": "Expected a string.",
"path": "/name"
}
],
"status": 422,
"title": "Request Validation Failed",
"type": "https://photon.codes/docs/problems/validation-failed"
}{
"code": "INTERNAL_ERROR",
"status": 500,
"title": "Internal Server Error",
"type": "https://photon.codes/docs/problems/internal-error"
}{
"code": "UPSTREAM_FAILURE",
"status": 502,
"title": "Upstream Service Failure",
"type": "https://photon.codes/docs/problems/upstream-failure"
}{
"code": "UPSTREAM_UNAVAILABLE",
"status": 503,
"title": "Upstream Service Unavailable",
"type": "https://photon.codes/docs/problems/upstream-unavailable"
}{
"code": "REQUEST_TIMEOUT",
"status": 504,
"title": "Request Timeout",
"type": "https://photon.codes/docs/problems/request-timeout"
}Authorizations
Account Service Key, prefixed with pho_ask_, sent as Authorization: Bearer <key>. Acts on behalf of its owning account, subject to the permissions and credential restrictions of each operation. Account access tokens and OAuth grants also use the Bearer header. In organizations that require SSO, Account Service Keys are not accepted for managing the organization's SSO settings, deleting the organization, or checking whether it can be deleted.
Was this page helpful?
curl --request GET \
--url https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.photon.codes/v1/projects/{id}/platforms/email/domains/{resourceId}/dmarc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"checking": true,
"freshness": "pending",
"instructions": {
"explanation": "<string>",
"name": "<string>",
"type": "TXT",
"value": "<string>"
},
"resourceId": "<string>",
"result": {
"checkedAt": "2023-11-07T05:31:56Z",
"domain": "<string>",
"effectivePolicy": "none",
"expiresAt": "2023-11-07T05:31:56Z",
"inherited": true,
"nonExistentPolicy": "none",
"observations": [
{
"name": "<string>",
"records": [
"<string>"
],
"status": "valid",
"parsed": {
"adkim": "r",
"aspf": "r",
"p": "none",
"psd": "u",
"np": "none",
"sp": "none"
}
}
],
"sourceDomain": "<string>",
"standard": "RFC9989",
"status": "valid"
}
}{
"code": "NOT_AUTHENTICATED",
"status": 401,
"title": "Not Authenticated",
"type": "https://photon.codes/docs/problems/not-authenticated"
}{
"code": "FORBIDDEN",
"status": 403,
"title": "Forbidden",
"type": "https://photon.codes/docs/problems/forbidden"
}{
"code": "RESOURCE_NOT_FOUND",
"status": 404,
"title": "Resource Not Found",
"type": "https://photon.codes/docs/problems/resource-not-found"
}{
"code": "VALIDATION_FAILED",
"issues": [
{
"code": "invalid_type",
"location": "json",
"message": "Expected a string.",
"path": "/name"
}
],
"status": 422,
"title": "Request Validation Failed",
"type": "https://photon.codes/docs/problems/validation-failed"
}{
"code": "INTERNAL_ERROR",
"status": 500,
"title": "Internal Server Error",
"type": "https://photon.codes/docs/problems/internal-error"
}{
"code": "UPSTREAM_FAILURE",
"status": 502,
"title": "Upstream Service Failure",
"type": "https://photon.codes/docs/problems/upstream-failure"
}{
"code": "UPSTREAM_UNAVAILABLE",
"status": 503,
"title": "Upstream Service Unavailable",
"type": "https://photon.codes/docs/problems/upstream-unavailable"
}{
"code": "REQUEST_TIMEOUT",
"status": 504,
"title": "Request Timeout",
"type": "https://photon.codes/docs/problems/request-timeout"
}