Skip to content

ArfExternalReport

Stores an ARF feedback report received from an external source.

This object can be configured from the WebUI under Management › Reports › Inbox › ARF

Type: ArfFeedbackReport · required

Parsed ARF feedback report content

Type: EmailAddress · required

Email address of the report sender

Type: String · required

Subject line of the report email

Type: EmailAddress[]

List of recipient email addresses

Type: UTCDateTime · required

When the report email was received

Type: UTCDateTime · required

When the report is scheduled to be deleted

Type: Id<Tenant>? · enterprise

Identifier for the tenant this report belongs to

The ArfExternalReport object is available via the urn:stalwart:jmap capability.

This is a standard Foo/get method as defined in RFC 8620, Section 5.1.

This method requires the sysArfExternalReportGet permission.

Terminal window
curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:ArfExternalReport/get",
{
"ids": [
"id1"
]
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

This is a standard Foo/set method as defined in RFC 8620, Section 5.3.

Supports create, update, and destroy operations in a single call.

This operation requires the sysArfExternalReportCreate permission.

Terminal window
curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:ArfExternalReport/set",
{
"create": {
"new1": {
"expiresAt": "2026-01-01T00:00:00Z",
"from": "[email protected]",
"receivedAt": "2026-01-01T00:00:00Z",
"report": {
"authFailure": "adsp",
"authenticationResults": {},
"deliveryResult": "delivered",
"feedbackType": "abuse",
"identityAlignment": "none",
"reportedDomains": {},
"reportedUris": {}
},
"subject": "Example",
"to": {}
}
}
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

This operation requires the sysArfExternalReportUpdate permission.

Terminal window
curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:ArfExternalReport/set",
{
"update": {
"id1": {
"subject": "updated value"
}
}
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

This operation requires the sysArfExternalReportDestroy permission.

Terminal window
curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:ArfExternalReport/set",
{
"destroy": [
"id1"
]
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

This is a standard Foo/query method as defined in RFC 8620, Section 5.5.

This method requires the sysArfExternalReportQuery permission.

Terminal window
curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:ArfExternalReport/query",
{
"filter": {}
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

stalwart-cli wraps the same JMAP calls. See the CLI reference for installation, authentication, and general usage.

Terminal window
stalwart-cli get ArfExternalReport id1
Terminal window
stalwart-cli create ArfExternalReport \
--field 'report={"authFailure":"adsp","authenticationResults":{},"deliveryResult":"delivered","feedbackType":"abuse","identityAlignment":"none","reportedDomains":{},"reportedUris":{}}' \
--field subject=Example \
--field 'to={}' \
--field receivedAt=2026-01-01T00:00:00Z \
--field expiresAt=2026-01-01T00:00:00Z
Terminal window
stalwart-cli query ArfExternalReport
Terminal window
stalwart-cli update ArfExternalReport id1 --field subject='updated value'
Terminal window
stalwart-cli delete ArfExternalReport --ids id1

Parsed content of an ARF feedback report.

Type: ArfFeedbackType · required

Type of feedback being reported

Type: UTCDateTime?

When the original message arrived

Type: String[]

Authentication-Results header values from the original message

Type: UnsignedInt · default: 0

Number of incidents represented by this report

Type: String?

Original SMTP envelope ID (ENVID)

Type: EmailAddress?

Original envelope sender address (MAIL FROM)

Type: EmailAddress?

Original envelope recipient address (RCPT TO)

Type: DomainName[]

Domains being reported

Type: Uri[]

URIs being reported

Type: String?

Hostname of the MTA generating this report

Type: IpAddr?

IP address of the original message source

Type: UnsignedInt? · min: 1 · max: 65535

Port of the original message source

Type: String?

Software that generated this report

Type: UnsignedInt · default: 1

ARF format version

Type: ArfAuthFailureType · required

Type of authentication failure (for auth-failure reports)

Type: ArfDeliveryResult · required

What happened to the original message

Type: String?

DKIM ADSP DNS record content

Type: String?

Message body after DKIM canonicalization

Type: String?

Message headers after DKIM canonicalization

Type: String?

Domain from the DKIM signature

Type: String?

Identity from the DKIM signature (i= tag)

Type: String?

Selector from the DKIM signature

Type: String?

DKIM selector DNS record content

Type: String?

SPF DNS record content

Type: ArfIdentityAlignment · required

Which identities were aligned

Type: String?

Original message content that triggered the report

Type: String?

Original message headers that triggered the report

ValueLabel
abuseMessage was reported as abusive or unwanted
authFailureMessage failed authentication checks
fraudMessage was reported as fraudulent
notSpamMessage was incorrectly classified as spam
virusMessage contained a virus
otherOther feedback type
ValueLabel
adspDKIM ADSP policy failure
bodyHashDKIM body hash verification failed
revokedDKIM key has been revoked
signatureDKIM signature verification failed
spfSPF authentication failed
dmarcDMARC authentication failed
unspecifiedAuthentication failure type not specified
ValueLabel
deliveredMessage was delivered to recipient
spamMessage was delivered to spam folder
policyMessage was handled according to policy
rejectMessage was rejected
otherOther delivery result
unspecifiedDelivery result not specified
ValueLabel
noneNo identity alignment
spfSPF identity aligned
dkimDKIM identity aligned
dkimSpfBoth DKIM and SPF identities aligned
unspecifiedIdentity alignment not specified