ArfExternalReport
ArfExternalReport
Section titled “ArfExternalReport”Stores an ARF feedback report received from an external source.
This object can be configured from the WebUI under Management › Reports › Inbox › ARF
Fields
Section titled “Fields”report
Section titled “report”Type:
ArfFeedbackReport· requiredParsed ARF feedback report content
Type:
EmailAddress· requiredEmail address of the report sender
subject
Section titled “subject”Type:
String· requiredSubject line of the report email
Type:
EmailAddress[]List of recipient email addresses
receivedAt
Section titled “receivedAt”Type:
UTCDateTime· requiredWhen the report email was received
expiresAt
Section titled “expiresAt”Type:
UTCDateTime· requiredWhen the report is scheduled to be deleted
memberTenantId
Section titled “memberTenantId”Type:
Id<Tenant>?· enterpriseIdentifier for the tenant this report belongs to
JMAP API
Section titled “JMAP API”The ArfExternalReport object is available via the urn:stalwart:jmap capability.
x:ArfExternalReport/get
Section titled “x:ArfExternalReport/get”This is a standard Foo/get method as defined in RFC 8620, Section 5.1.
This method requires the sysArfExternalReportGet permission.
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" ] }'x:ArfExternalReport/set
Section titled “x:ArfExternalReport/set”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.
Create
Section titled “Create”This operation requires the sysArfExternalReportCreate permission.
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" ] }'Update
Section titled “Update”This operation requires the sysArfExternalReportUpdate permission.
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" ] }'Destroy
Section titled “Destroy”This operation requires the sysArfExternalReportDestroy permission.
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" ] }'x:ArfExternalReport/query
Section titled “x:ArfExternalReport/query”This is a standard Foo/query method as defined in RFC 8620, Section 5.5.
This method requires the sysArfExternalReportQuery permission.
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.
stalwart-cli get ArfExternalReport id1Create
Section titled “Create”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:00Zstalwart-cli query ArfExternalReportUpdate
Section titled “Update”stalwart-cli update ArfExternalReport id1 --field subject='updated value'Delete
Section titled “Delete”stalwart-cli delete ArfExternalReport --ids id1Nested types
Section titled “Nested types”ArfFeedbackReport
Section titled “ArfFeedbackReport”Parsed content of an ARF feedback report.
feedbackType
Section titled “feedbackType”Type:
ArfFeedbackType· requiredType of feedback being reported
arrivalDate
Section titled “arrivalDate”Type:
UTCDateTime?When the original message arrived
authenticationResults
Section titled “authenticationResults”Type:
String[]Authentication-Results header values from the original message
incidents
Section titled “incidents”Type:
UnsignedInt· default:0Number of incidents represented by this report
originalEnvelopeId
Section titled “originalEnvelopeId”Type:
String?Original SMTP envelope ID (ENVID)
originalMailFrom
Section titled “originalMailFrom”Type:
EmailAddress?Original envelope sender address (MAIL FROM)
originalRcptTo
Section titled “originalRcptTo”Type:
EmailAddress?Original envelope recipient address (RCPT TO)
reportedDomains
Section titled “reportedDomains”Type:
DomainName[]Domains being reported
reportedUris
Section titled “reportedUris”Type:
Uri[]URIs being reported
reportingMta
Section titled “reportingMta”Type:
String?Hostname of the MTA generating this report
sourceIp
Section titled “sourceIp”Type:
IpAddr?IP address of the original message source
sourcePort
Section titled “sourcePort”Type:
UnsignedInt?· min: 1 · max: 65535Port of the original message source
userAgent
Section titled “userAgent”Type:
String?Software that generated this report
version
Section titled “version”Type:
UnsignedInt· default:1ARF format version
authFailure
Section titled “authFailure”Type:
ArfAuthFailureType· requiredType of authentication failure (for auth-failure reports)
deliveryResult
Section titled “deliveryResult”Type:
ArfDeliveryResult· requiredWhat happened to the original message
dkimAdspDns
Section titled “dkimAdspDns”Type:
String?DKIM ADSP DNS record content
dkimCanonicalizedBody
Section titled “dkimCanonicalizedBody”Type:
String?Message body after DKIM canonicalization
dkimCanonicalizedHeader
Section titled “dkimCanonicalizedHeader”Type:
String?Message headers after DKIM canonicalization
dkimDomain
Section titled “dkimDomain”Type:
String?Domain from the DKIM signature
dkimIdentity
Section titled “dkimIdentity”Type:
String?Identity from the DKIM signature (i= tag)
dkimSelector
Section titled “dkimSelector”Type:
String?Selector from the DKIM signature
dkimSelectorDns
Section titled “dkimSelectorDns”Type:
String?DKIM selector DNS record content
spfDns
Section titled “spfDns”Type:
String?SPF DNS record content
identityAlignment
Section titled “identityAlignment”Type:
ArfIdentityAlignment· requiredWhich identities were aligned
message
Section titled “message”Type:
String?Original message content that triggered the report
headers
Section titled “headers”Type:
String?Original message headers that triggered the report
ArfFeedbackType
Section titled “ArfFeedbackType”| Value | Label |
|---|---|
abuse | Message was reported as abusive or unwanted |
authFailure | Message failed authentication checks |
fraud | Message was reported as fraudulent |
notSpam | Message was incorrectly classified as spam |
virus | Message contained a virus |
other | Other feedback type |
ArfAuthFailureType
Section titled “ArfAuthFailureType”| Value | Label |
|---|---|
adsp | DKIM ADSP policy failure |
bodyHash | DKIM body hash verification failed |
revoked | DKIM key has been revoked |
signature | DKIM signature verification failed |
spf | SPF authentication failed |
dmarc | DMARC authentication failed |
unspecified | Authentication failure type not specified |
ArfDeliveryResult
Section titled “ArfDeliveryResult”| Value | Label |
|---|---|
delivered | Message was delivered to recipient |
spam | Message was delivered to spam folder |
policy | Message was handled according to policy |
reject | Message was rejected |
other | Other delivery result |
unspecified | Delivery result not specified |
ArfIdentityAlignment
Section titled “ArfIdentityAlignment”| Value | Label |
|---|---|
none | No identity alignment |
spf | SPF identity aligned |
dkim | DKIM identity aligned |
dkimSpf | Both DKIM and SPF identities aligned |
unspecified | Identity alignment not specified |