Endpoints
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
Obtain OAuth token
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/oauth', headers = headers)
print(r.json())
POST /oauth
Body parameter
{
"type": "code",
"client_id": "webadmin",
"redirect_uri": "stalwart://auth",
"nonce": "ttsaXca3qx"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
» type | body | string | false | none |
» client_id | body | string | false | none |
» redirect_uri | body | string | false | none |
» nonce | body | string | false | none |
Example responses
200 Response
{
"data": {
"code": "4YmRFLu9Df1t4JO7Iffnuney4B8tVLAxjimdRxEg",
"permissions": [
"webadmin-update",
"spam-filter-update",
"dkim-signature-get",
"dkim-signature-create",
"undelete",
"fts-reindex",
"purge-account",
"purge-in-memory-store",
"purge-data-store",
"purge-blob-store"
],
"version": "0.11.0",
"isEnterprise": true
}
}
401 Response
{
"type": "about:blank",
"status": 401,
"title": "Unauthorized",
"detail": "You have to authenticate first."
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
401 | Unauthorized | Unauthorized | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» code | string | false | none | none |
»» permissions | [string] | false | none | none |
»» version | string | false | none | none |
»» isEnterprise | boolean | false | none | none |
Status Code 401
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» type | string | false | none | none |
» status | number | false | none | none |
» title | string | false | none | none |
» detail | string | false | none | none |
Fetch Telemetry Metrics
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/telemetry/metrics', headers = headers)
print(r.json())
GET /telemetry/metrics
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
after | query | string | false | none |
Example responses
200 Response
{
"error": "other",
"details": "No metrics store has been defined",
"reason": "You need to configure a metrics store in order to use this feature."
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» error | string | false | none | none |
» details | string | false | none | none |
» reason | string | false | none | none |
Obtain Metrics Telemetry token
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/telemetry/live/metrics-token', headers = headers)
print(r.json())
GET /telemetry/live/metrics-token
Example responses
200 Response
{
"data": "2GO4RahIkSAms6S00R9BRsroo97ZdYTz4QVxFCOwGrGkr7zguP0AVyTMA/iha3Vz/////w8DhZi1+ALBmLX4AndlYg=="
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | string | false | none | none |
Live Metrics
Code samples
import requests
r = requests.get('https://mail.example.org/api/telemetry/metrics/live')
print(r.json())
GET /telemetry/metrics/live
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
metrics | query | string | false | none |
interval | query | number | false | none |
token | query | string | false | none |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
List Principals
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/principal', headers = headers)
print(r.json())
GET /principal
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | number | false | none |
limit | query | number | false | none |
types | query | string | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
Create Principal
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/principal', headers = headers)
print(r.json())
POST /principal
Body parameter
{
"type": "domain",
"quota": 0,
"name": "example.org",
"description": "Example domain",
"secrets": [],
"emails": [],
"urls": [],
"memberOf": [],
"roles": [],
"lists": [],
"members": [],
"enabledPermissions": [],
"disabledPermissions": [],
"externalMembers": []
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
» type | body | string | false | none |
» quota | body | number | false | none |
» name | body | string | false | none |
» description | body | string | false | none |
» secrets | body | [any] | false | none |
» emails | body | [any] | false | none |
» urls | body | [any] | false | none |
» memberOf | body | [any] | false | none |
» roles | body | [any] | false | none |
» lists | body | [any] | false | none |
» members | body | [any] | false | none |
» enabledPermissions | body | [any] | false | none |
» disabledPermissions | body | [any] | false | none |
» externalMembers | body | [any] | false | none |
Example responses
200 Response
{
"data": 50
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | number | false | none | none |
Create DKIM Signature
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/dkim', headers = headers)
print(r.json())
POST /dkim
Body parameter
{
"id": null,
"algorithm": "Ed25519",
"domain": "example.org",
"selector": null
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
» id | body | object¦null | false | none |
» algorithm | body | string | false | none |
» domain | body | string | false | none |
» selector | body | object¦null | false | none |
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Fetch Principal
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/principal/{principal_id}', headers = headers)
print(r.json())
GET /principal/{principal_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
principal_id | path | string | true | none |
Example responses
200 Response
{
"data": {
"id": 90,
"type": "individual",
"secrets": "$6$ONjGT6nQtmPNaxw0$NNF5DXtPfOay2mfVnPJ0uQ77C.L3LNxXO/QMyphP/DzpODqbDBBGd4/gCnckYPQj3st6pqwY8/KeBsCJ.oe1Y1",
"name": "jane",
"quota": 0,
"description": "Jane Doe",
"emails": "[email protected]",
"roles": [
"user"
],
"lists": [
"all"
]
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» id | number | false | none | none |
»» type | string | false | none | none |
»» secrets | string | false | none | none |
»» name | string | false | none | none |
»» quota | number | false | none | none |
»» description | string | false | none | none |
»» emails | string | false | none | none |
»» roles | [string] | false | none | none |
»» lists | [string] | false | none | none |
Update Principal
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.patch('https://mail.example.org/api/principal/{principal_id}', headers = headers)
print(r.json())
PATCH /principal/{principal_id}
Body parameter
[
{
"action": "set",
"field": "name",
"value": "jane.doe"
},
{
"action": "set",
"field": "description",
"value": "Jane Mary Doe"
},
{
"action": "addItem",
"field": "emails",
"value": "[email protected]"
},
{
"action": "removeItem",
"field": "emails",
"value": "[email protected]"
}
]
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
principal_id | path | string | true | none |
body | body | array[object] | false | none |
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Delete Principal
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.delete('https://mail.example.org/api/principal/{principal_id}', headers = headers)
print(r.json())
DELETE /principal/{principal_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
principal_id | path | string | true | none |
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
List Queued Messages
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/queue/messages', headers = headers)
print(r.json())
GET /queue/messages
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | number | false | none |
max-total | query | number | false | none |
limit | query | number | false | none |
values | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0,
"status": true
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
»» status | boolean | false | none | none |
Reschedule Queued Messages
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.patch('https://mail.example.org/api/queue/messages', headers = headers)
print(r.json())
PATCH /queue/messages
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
filter | query | string | false | none |
Example responses
200 Response
{
"data": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
Delete Queued Messages
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.delete('https://mail.example.org/api/queue/messages', headers = headers)
print(r.json())
DELETE /queue/messages
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
text | query | string | false | none |
Example responses
200 Response
{
"data": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
List Queued Reports
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/queue/reports', headers = headers)
print(r.json())
GET /queue/reports
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
max-total | query | number | false | none |
limit | query | number | false | none |
page | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
List Incoming DMARC Reports
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/reports/dmarc', headers = headers)
print(r.json())
GET /reports/dmarc
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
max-total | query | number | false | none |
limit | query | number | false | none |
page | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
List Incoming TLS Reports
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/reports/tls', headers = headers)
print(r.json())
GET /reports/tls
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
limit | query | number | false | none |
max-total | query | number | false | none |
page | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
List Incoming ARF Reports
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/reports/arf', headers = headers)
print(r.json())
GET /reports/arf
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | number | false | none |
limit | query | number | false | none |
max-total | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
List Stored Traces
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/telemetry/traces', headers = headers)
print(r.json())
GET /telemetry/traces
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
type | query | string | false | none |
page | query | number | false | none |
limit | query | number | false | none |
values | query | number | false | none |
Example responses
200 Response
{
"error": "unsupported",
"details": "No tracing store has been configured"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» error | string | false | none | none |
» details | string | false | none | none |
Quere Log Files
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/logs', headers = headers)
print(r.json())
GET /logs
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | number | false | none |
limit | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [
{
"timestamp": "2025-01-05T14:06:29Z",
"level": "TRACE",
"event": "HTTP request body",
"event_id": "http.request-body",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, contents = \"\", size = 0"
},
{
"timestamp": "2025-01-05T14:06:29Z",
"level": "TRACE",
"event": "Write batch operation",
"event_id": "store.data-write",
"details": "elapsed = 0ms, total = 2"
},
{
"timestamp": "2025-01-05T14:06:29Z",
"level": "TRACE",
"event": "Expression evaluation result",
"event_id": "eval.result",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, id = \"server.http.allowed-endpoint\", result = \"Integer(200)\""
},
{
"timestamp": "2025-01-05T14:06:29Z",
"level": "DEBUG",
"event": "HTTP request URL",
"event_id": "http.request-url",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, url = \"/api/logs?page=1&limit=50&\""
},
{
"timestamp": "2025-01-05T14:06:23Z",
"level": "TRACE",
"event": "HTTP response body",
"event_id": "http.response-body",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, contents = \"{\"error\":\"unsupported\",\"details\":\"No tracing store has been configured\"}\", code = 200, size = 72"
},
{
"timestamp": "2025-01-05T14:06:23Z",
"level": "DEBUG",
"event": "Management operation not supported",
"event_id": "manage.not-supported",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, details = No tracing store has been configured"
},
{
"timestamp": "2025-01-05T14:06:23Z",
"level": "TRACE",
"event": "HTTP request body",
"event_id": "http.request-body",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, contents = \"\", size = 0"
},
{
"timestamp": "2025-01-05T14:06:23Z",
"level": "TRACE",
"event": "Write batch operation",
"event_id": "store.data-write",
"details": "elapsed = 0ms, total = 2"
},
{
"timestamp": "2025-01-05T14:06:23Z",
"level": "TRACE",
"event": "Expression evaluation result",
"event_id": "eval.result",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, id = \"server.http.allowed-endpoint\", result = \"Integer(200)\""
},
{
"timestamp": "2025-01-05T14:06:23Z",
"level": "DEBUG",
"event": "HTTP request URL",
"event_id": "http.request-url",
"details": "listenerId = \"http\", localPort = 1443, remoteIp = ::1, remotePort = 57223, url = \"/api/telemetry/traces?page=1&type=delivery.attempt-start&limit=10&values=1&\""
}
],
"total": 100
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [object] | false | none | none |
»»» timestamp | string | false | none | none |
»»» level | string | false | none | none |
»»» event | string | false | none | none |
»»» event_id | string | false | none | none |
»»» details | string | false | none | none |
»» total | number | false | none | none |
Train Spam Filter as Spam
Code samples
import requests
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/spam-filter/train/spam', headers = headers)
print(r.json())
POST /spam-filter/train/spam
Body parameter
"From: [email protected]\nTo: [email protected]\nSubject: Testing, please ignore\nContent-Type: text/plain; charset": |
"utf-8"
Content-Transfer-Encoding: 8bit
Testing 1, 2, 3
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
|» From: [email protected] To: [email protected] Subject: Testing, please ignore Content-Type: text|body|string|false|none|
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Train Spam Filter as Ham
Code samples
import requests
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/spam-filter/train/ham', headers = headers)
print(r.json())
POST /spam-filter/train/ham
Body parameter
"From: [email protected]\nTo: [email protected]\nSubject: Testing, please ignore\nContent-Type: text/plain; charset": |
"utf-8"
Content-Transfer-Encoding: 8bit
Testing 1, 2, 3
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
|» From: [email protected] To: [email protected] Subject: Testing, please ignore Content-Type: text|body|string|false|none|
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Train Account's Spam Filter as Spam
Code samples
import requests
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/spam-filter/train/spam/{account_id}', headers = headers)
print(r.json())
POST /spam-filter/train/spam/{account_id}
Body parameter
"From: [email protected]\nTo: [email protected]\nSubject: Testing, please ignore\nContent-Type: text/plain; charset": |
"utf-8"
Content-Transfer-Encoding: 8bit
Testing 1, 2, 3
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
body | body | object | false | none |
|» From: [email protected] To: [email protected] Subject: Testing, please ignore Content-Type: text|body|string|false|none|
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Train Account's Spam Filter as Ham
Code samples
import requests
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/spam-filter/train/ham/{account_id}', headers = headers)
print(r.json())
POST /spam-filter/train/ham/{account_id}
Body parameter
"From: [email protected]\nTo: [email protected]\nSubject: Testing, please ignore\nContent-Type: text/plain; charset": |
"utf-8"
Content-Transfer-Encoding: 8bit
Testing 1, 2, 3
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
body | body | object | false | none |
|» From: [email protected] To: [email protected] Subject: Testing, please ignore Content-Type: text|body|string|false|none|
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Test Spam Filter Classification
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/spam-filter/classify', headers = headers)
print(r.json())
POST /spam-filter/classify
Body parameter
{
"message": "From: [email protected]\nTo: [email protected]\nSubject: Testing, please ignore\nContent-Type: text/plain; charset=\"utf-8\"\nContent-Transfer-Encoding: 8bit\n\nTesting 1, 2, 3\n",
"remoteIp": "8.8.8.8",
"ehloDomain": "foo.org",
"authenticatedAs": null,
"isTls": true,
"envFrom": "[email protected]",
"envFromFlags": 0,
"envRcptTo": [
"[email protected]"
]
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
» message | body | string | false | none |
» remoteIp | body | string | false | none |
» ehloDomain | body | string | false | none |
» authenticatedAs | body | object¦null | false | none |
» isTls | body | boolean | false | none |
» envFrom | body | string | false | none |
» envFromFlags | body | number | false | none |
» envRcptTo | body | [string] | false | none |
Example responses
200 Response
{
"data": {
"score": 12.7,
"tags": {
"FROM_NO_DN": {
"action": "allow",
"value": 0
},
"SOURCE_ASN_15169": {
"action": "allow",
"value": 0
},
"SOURCE_COUNTRY_US": {
"action": "allow",
"value": 0
},
"MISSING_DATE": {
"action": "allow",
"value": 1
},
"FROMHOST_NORES_A_OR_MX": {
"action": "allow",
"value": 1.5
},
"MISSING_MIME_VERSION": {
"action": "allow",
"value": 2
},
"FORGED_SENDER": {
"action": "allow",
"value": 0.3
},
"SPF_NA": {
"action": "allow",
"value": 0
},
"X_HDR_TO": {
"action": "allow",
"value": 0
},
"HELO_IPREV_MISMATCH": {
"action": "allow",
"value": 1
},
"X_HDR_CONTENT_TYPE": {
"action": "allow",
"value": 0
},
"AUTH_NA": {
"action": "allow",
"value": 1
},
"FORGED_RECIPIENTS": {
"action": "allow",
"value": 2
},
"RBL_SENDERSCORE_REPUT_BLOCKED": {
"action": "allow",
"value": 0
},
"RCVD_COUNT_ZERO": {
"action": "allow",
"value": 0.1
},
"X_HDR_SUBJECT": {
"action": "allow",
"value": 0
},
"X_HDR_FROM": {
"action": "allow",
"value": 0
},
"RCPT_COUNT_ONE": {
"action": "allow",
"value": 0
},
"MISSING_MID": {
"action": "allow",
"value": 2.5
},
"TO_DOM_EQ_FROM_DOM": {
"action": "allow",
"value": 0
},
"ARC_NA": {
"action": "allow",
"value": 0
},
"RCVD_TLS_LAST": {
"action": "allow",
"value": 0
},
"X_HDR_CONTENT_TRANSFER_ENCODING": {
"action": "allow",
"value": 0
},
"HELO_NORES_A_OR_MX": {
"action": "allow",
"value": 0.3
},
"TO_DN_NONE": {
"action": "allow",
"value": 0
},
"FROM_NEQ_ENV_FROM": {
"action": "allow",
"value": 0
},
"DMARC_NA": {
"action": "allow",
"value": 1
},
"SINGLE_SHORT_PART": {
"action": "allow",
"value": 0
},
"DKIM_NA": {
"action": "allow",
"value": 0
}
},
"disposition": {
"action": "allow",
"value": "X-Spam-Result: ARC_NA (0.00),\r\n\tDKIM_NA (0.00),\r\n \tFROM_NEQ_ENV_FROM (0.00),\r\n\tFROM_NO_DN (0.00),\r\n\tRBL_SENDERSCORE_REPUT_BLOCKED (0.00),\r\n\tRCPT_COUNT_ONE (0.00),\r\n\tRCVD_TLS_LAST (0.00),\r \n\tSINGLE_SHORT_PART (0.00),\r\n\tSPF_NA (0.00),\r\n\tTO_DN_NONE (0.00),\r\n\tTO_DOM_EQ_FROM_DOM (0.00),\r\n\tRCVD_COUNT_ZERO (0.10),\r\n\tFORGED_SENDER (0.30),\r\n\tHELO_NORES_A_OR_MX (0.30),\r \n\tAUTH_NA (1.00),\r\n\tDMARC_NA (1.00),\r\n\tHELO_IPREV_MISMATCH (1.00),\r\n\tMISSING_DATE (1.00),\r\n\tFROMHOST_NORES_A_OR_MX (1.50),\r\n\tFORGED_RECIPIENTS (2.00),\r\n\tMISSING_MIME_VERSION (2.00),\r\n\tMISSING_MID (2.50)\r\nX-Spam-Status: Yes, score=12.70\r\n"
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» score | number | false | none | none |
»» tags | object | false | none | none |
»»» FROM_NO_DN | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» SOURCE_ASN_15169 | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» SOURCE_COUNTRY_US | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» MISSING_DATE | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» FROMHOST_NORES_A_OR_MX | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» MISSING_MIME_VERSION | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» FORGED_SENDER | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» SPF_NA | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» X_HDR_TO | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» HELO_IPREV_MISMATCH | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» X_HDR_CONTENT_TYPE | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» AUTH_NA | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» FORGED_RECIPIENTS | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» RBL_SENDERSCORE_REPUT_BLOCKED | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» RCVD_COUNT_ZERO | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» X_HDR_SUBJECT | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» X_HDR_FROM | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» RCPT_COUNT_ONE | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» MISSING_MID | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» TO_DOM_EQ_FROM_DOM | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» ARC_NA | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» RCVD_TLS_LAST | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» X_HDR_CONTENT_TRANSFER_ENCODING | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» HELO_NORES_A_OR_MX | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» TO_DN_NONE | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» FROM_NEQ_ENV_FROM | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» DMARC_NA | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» SINGLE_SHORT_PART | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»»» DKIM_NA | object | false | none | none |
»»»» action | string | false | none | none |
»»»» value | number | false | none | none |
»» disposition | object | false | none | none |
»»» action | string | false | none | none |
»»» value | string | false | none | none |
Obtain a Troubleshooting Token
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/troubleshoot/token', headers = headers)
print(r.json())
GET /troubleshoot/token
Example responses
200 Response
{
"data": "+bS1rCUcrjoEtl9f7Vz1P6daqVs4nywxa56bHltPIASijRFrj1JrwvHxJCWphPKs/////w8E8p21+AKunrX4AndlYg=="
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | string | false | none | none |
Run Delivery Troubleshooting
Code samples
import requests
r = requests.get('https://mail.example.org/api/troubleshoot/delivery/{recipient}')
print(r.json())
GET /troubleshoot/delivery/{recipient}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
recipient | path | string | true | none |
token | query | string | false | none |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Run DMARC Troubleshooting
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/troubleshoot/dmarc', headers = headers)
print(r.json())
POST /troubleshoot/dmarc
Body parameter
{
"remoteIp": "8.8.8.8",
"ehloDomain": "mx.google.com",
"mailFrom": "[email protected]",
"body": "From: [email protected]\nTo: [email protected]\nSubject: Testing, please ignore\nContent-Type: text/plain; charset=\"utf-8\"\nContent-Transfer-Encoding: 8bit\n\nTesting 1, 2, 3\n"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
» remoteIp | body | string | false | none |
» ehloDomain | body | string | false | none |
» mailFrom | body | string | false | none |
» body | body | string | false | none |
Example responses
200 Response
{
"data": {
"spfEhloDomain": "mx.google.com",
"spfEhloResult": {
"type": "none"
},
"spfMailFromDomain": "google.com",
"spfMailFromResult": {
"type": "softFail",
"details": null
},
"ipRevResult": {
"type": "pass"
},
"ipRevPtr": [
"dns.google."
],
"dkimResults": [],
"dkimPass": false,
"arcResult": {
"type": "none"
},
"dmarcResult": {
"type": "none"
},
"dmarcPass": false,
"dmarcPolicy": "reject",
"elapsed": 200
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» spfEhloDomain | string | false | none | none |
»» spfEhloResult | object | false | none | none |
»»» type | string | false | none | none |
»» spfMailFromDomain | string | false | none | none |
»» spfMailFromResult | object | false | none | none |
»»» type | string | false | none | none |
»»» details | object¦null | false | none | none |
»» ipRevResult | object | false | none | none |
»»» type | string | false | none | none |
»» ipRevPtr | [string] | false | none | none |
»» dkimResults | [any] | false | none | none |
»» dkimPass | boolean | false | none | none |
»» arcResult | object | false | none | none |
»»» type | string | false | none | none |
»» dmarcResult | object | false | none | none |
»»» type | string | false | none | none |
»» dmarcPass | boolean | false | none | none |
»» dmarcPolicy | string | false | none | none |
»» elapsed | number | false | none | none |
Reload Settings
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/reload/', headers = headers)
print(r.json())
GET /reload/
Example responses
200 Response
{
"data": {
"warnings": {},
"errors": {}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» warnings | object | false | none | none |
»» errors | object | false | none | none |
Update Spam Filter
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/update/spam-filter', headers = headers)
print(r.json())
GET /update/spam-filter
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Update WebAdmin
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/update/webadmin', headers = headers)
print(r.json())
GET /update/webadmin
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Request FTS Reindex
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/reindex', headers = headers)
print(r.json())
GET /store/reindex
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Delete Global Bayes Model
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/in-memory/default/bayes-global', headers = headers)
print(r.json())
GET /store/purge/in-memory/default/bayes-global
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
List Settings by Key
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/settings/keys', headers = headers)
print(r.json())
GET /settings/keys
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
prefixes | query | string | false | none |
keys | query | string | false | none |
Example responses
200 Response
{
"data": {
"server.hostname": "mx.fr.email"
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» server.hostname | string | false | none | none |
List Settings by Group
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/settings/group', headers = headers)
print(r.json())
GET /settings/group
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
limit | query | number | false | none |
page | query | number | false | none |
suffix | query | string | false | none |
prefix | query | string | false | none |
Example responses
200 Response
{
"data": {
"total": 11,
"items": [
{
"_id": "http",
"bind": "[::]:1443",
"protocol": "http"
},
{
"bind": "[::]:443",
"_id": "https",
"protocol": "http",
"tls.implicit": "true"
},
{
"protocol": "imap",
"bind": "[::]:143",
"_id": "imap"
},
{
"bind": "[::]:1143",
"tls.implicit": "false",
"_id": "imapnotls",
"protocol": "imap",
"proxy.override": "false",
"tls.override": "false",
"tls.enable": "false",
"socket.override": "false"
},
{
"bind": "[::]:993",
"tls.implicit": "true",
"protocol": "imap",
"_id": "imaptls"
},
{
"bind": "[::]:110",
"protocol": "pop3",
"_id": "pop3"
},
{
"tls.implicit": "true",
"_id": "pop3s",
"protocol": "pop3",
"bind": "[::]:995"
},
{
"protocol": "managesieve",
"_id": "sieve",
"bind": "[::]:4190"
},
{
"bind": "[::]:25",
"_id": "smtp",
"protocol": "smtp"
},
{
"_id": "submission",
"bind": "[::]:587",
"protocol": "smtp"
}
]
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» total | number | false | none | none |
»» items | [object] | false | none | none |
»»» _id | string | false | none | none |
»»» bind | string | false | none | none |
»»» protocol | string | false | none | none |
List Settings
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/settings/list', headers = headers)
print(r.json())
GET /settings/list
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
prefix | query | string | false | none |
Example responses
200 Response
{
"data": {
"total": 9,
"items": {
"enable": "true",
"format": "list",
"limits.entries": "100000",
"limits.entry-size": "512",
"limits.size": "104857600",
"refresh": "12h",
"retry": "1h",
"timeout": "30s",
"url": "https://openphish.com/feed.txt"
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» total | number | false | none | none |
»» items | object | false | none | none |
»»» enable | string | false | none | none |
»»» format | string | false | none | none |
»»» limits.entries | string | false | none | none |
»»» limits.entry-size | string | false | none | none |
»»» limits.size | string | false | none | none |
»»» refresh | string | false | none | none |
»»» retry | string | false | none | none |
»»» timeout | string | false | none | none |
»»» url | string | false | none | none |
Update Settings
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/settings', headers = headers)
print(r.json())
POST /settings
Body parameter
[
{
"type": "clear",
"prefix": "spam-filter.rule.stwt_arc_signed."
}
]
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | array[object] | false | none |
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Obtain Encryption-at-Rest Settings
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/account/crypto', headers = headers)
print(r.json())
GET /account/crypto
Example responses
200 Response
{
"data": {
"type": "disabled"
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» type | string | false | none | none |
Update Encryption-at-Rest Settings
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/account/crypto', headers = headers)
print(r.json())
POST /account/crypto
Body parameter
{
"type": "pGP",
"algo": "Aes256",
"certs": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n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\n=0TDv\n-----END PGP PUBLIC KEY BLOCK-----\n\n\n"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | false | none |
» type | body | string | false | none |
» algo | body | string | false | none |
» certs | body | string | false | none |
Example responses
200 Response
{
"data": 1
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | number | false | none | none |
Obtain Account Authentication Settings
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/account/auth', headers = headers)
print(r.json())
GET /account/auth
Example responses
200 Response
{
"data": {
"otpEnabled": false,
"appPasswords": []
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» otpEnabled | boolean | false | none | none |
»» appPasswords | [any] | false | none | none |
Update Account Authentication Settings
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/account/auth', headers = headers)
print(r.json())
POST /account/auth
Body parameter
[
{
"type": "addAppPassword",
"name": "dGVzdCQyMDI1LTAxLTA1VDE0OjEyOjUxLjg0NyswMDowMA==",
"password": "$6$4M/5LmG7b13r0cdE$6zb.i6wJ3pAQHA2MRHkKg0t8bgSYb2IeqiIU115t.NugwW6VXifE0VKI5n2BQUNwdeDMUzaX82TmhuVVgC0Gx1"
}
]
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | array[object] | false | none |
Example responses
200 Response
{
"error": "other",
"details": "Fallback administrator accounts do not support 2FA or AppPasswords",
"reason": null
}
401 Response
{
"type": "about:blank",
"status": 401,
"title": "Unauthorized",
"detail": "You have to authenticate first."
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
401 | Unauthorized | Unauthorized | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» error | string | false | none | none |
» details | string | false | none | none |
» reason | object¦null | false | none | none |
Status Code 401
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» type | string | false | none | none |
» status | number | false | none | none |
» title | string | false | none | none |
» detail | string | false | none | none |
Stop Queue Processing
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.patch('https://mail.example.org/api/queue/status/stop', headers = headers)
print(r.json())
PATCH /queue/status/stop
Example responses
200 Response
{
"data": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
Resume Queue Processing
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.patch('https://mail.example.org/api/queue/status/start', headers = headers)
print(r.json())
PATCH /queue/status/start
Example responses
200 Response
{
"data": false
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
Obtain Queued Message Details
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/queue/messages/{message_id}', headers = headers)
print(r.json())
GET /queue/messages/{message_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
message_id | path | string | true | none |
Example responses
200 Response
{
"data": {
"id": 217700302698266620,
"return_path": "[email protected]",
"domains": [
{
"name": "example.org",
"status": "scheduled",
"recipients": [
{
"address": "[email protected]",
"status": "scheduled"
}
],
"retry_num": 0,
"next_retry": "2025-01-05T14:33:15Z",
"next_notify": "2025-01-06T14:33:15Z",
"expires": "2025-01-10T14:33:15Z"
}
],
"created": "2025-01-05T14:33:15Z",
"size": 1451,
"blob_hash": "ykrZ_KghvdG2AdjH4AZajkSvZvcsxP_oI2HEZvw-tS0"
}
}
404 Response
{
"type": "about:blank",
"status": 404,
"title": "Not Found",
"detail": "The requested resource does not exist on this server."
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
404 | Not Found | Not Found | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» id | number | false | none | none |
»» return_path | string | false | none | none |
»» domains | [object] | false | none | none |
»»» name | string | false | none | none |
»»» status | string | false | none | none |
»»» recipients | [object] | false | none | none |
»»»» address | string | false | none | none |
»»»» status | string | false | none | none |
»»» retry_num | number | false | none | none |
»»» next_retry | string | false | none | none |
»»» next_notify | string | false | none | none |
»»» expires | string | false | none | none |
»» created | string | false | none | none |
»» size | number | false | none | none |
»» blob_hash | string | false | none | none |
Status Code 404
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» type | string | false | none | none |
» status | number | false | none | none |
» title | string | false | none | none |
» detail | string | false | none | none |
Reschedule Delivery of Queued Message
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.patch('https://mail.example.org/api/queue/messages/{message_id}', headers = headers)
print(r.json())
PATCH /queue/messages/{message_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
message_id | path | string | true | none |
Example responses
200 Response
{
"data": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
Cancel Delivery of Queued Message
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.delete('https://mail.example.org/api/queue/messages/{message_id}', headers = headers)
print(r.json())
DELETE /queue/messages/{message_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
message_id | path | string | true | none |
Example responses
200 Response
{
"data": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
Fetch Blob by ID
Code samples
import requests
r = requests.get('https://mail.example.org/api/store/blobs/{blob_id}')
print(r.json())
GET /store/blobs/{blob_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
blob_id | path | string | true | none |
limit | query | number | false | none |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Obtain Trace Details
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/telemetry/trace/{trace_id}', headers = headers)
print(r.json())
GET /telemetry/trace/{trace_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
trace_id | path | string | true | none |
Example responses
200 Response
{
"data": [
{
"text": "SMTP connection started",
"details": "A new SMTP connection was started",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.connection-start",
"data": {
"listenerId": "smtp",
"localPort": 25,
"remoteIp": "::1",
"remotePort": 57513
}
},
{
"text": "SMTP EHLO command",
"details": "The remote server sent an EHLO command",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.ehlo",
"data": {
"domain": "test.eml"
}
},
{
"text": "SPF EHLO check failed",
"details": "EHLO identity failed SPF check",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.spf-ehlo-fail",
"data": {
"domain": "test.eml",
"result": {
"type": "spf.none",
"text": "No SPF record",
"details": "No SPF record was found",
"data": {}
},
"elapsed": 24
}
},
{
"text": "IPREV check passed",
"details": "Reverse IP check passed",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.iprev-pass",
"data": {
"domain": "test.eml",
"result": {
"type": "iprev.pass",
"text": "IPREV check passed",
"details": "The IPREV check has passed",
"data": {
"details": [
"localhost."
]
}
},
"elapsed": 0
}
},
{
"text": "SPF From check failed",
"details": "MAIL FROM identity failed SPF check",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.spf-from-fail",
"data": {
"domain": "test.eml",
"from": "[email protected]",
"result": {
"type": "spf.none",
"text": "No SPF record",
"details": "No SPF record was found",
"data": {}
},
"elapsed": 18
}
},
{
"text": "SMTP MAIL FROM command",
"details": "The remote client sent a MAIL FROM command",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.mail-from",
"data": {
"from": "[email protected]"
}
},
{
"text": "SMTP RCPT TO command",
"details": "The remote client sent an RCPT TO command",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.rcpt-to",
"data": {
"to": "[email protected]"
}
},
{
"text": "DKIM verification failed",
"details": "Failed to verify DKIM signature",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.dkim-fail",
"data": {
"strict": false,
"result": [],
"elapsed": 0
}
},
{
"text": "ARC verification passed",
"details": "Successful ARC verification",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.arc-pass",
"data": {
"strict": false,
"result": {
"type": "dkim.none",
"text": "No DKIM signature",
"details": "No DKIM signature was found",
"data": {}
},
"elapsed": 0
}
},
{
"text": "DMARC check failed",
"details": "Failed to verify DMARC policy",
"createdAt": "2025-01-05T14:34:50Z",
"type": "smtp.dmarc-fail",
"data": {
"strict": false,
"domain": "example.org",
"policy": "reject",
"result": {
"type": "dmarc.none",
"text": "No DMARC record",
"details": "No DMARC record was found",
"data": {}
},
"elapsed": 0
}
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | [object] | false | none | none |
»» text | string | false | none | none |
»» details | string | false | none | none |
»» createdAt | string | false | none | none |
»» type | string | false | none | none |
»» data | object | false | none | none |
»»» listenerId | string | false | none | none |
»»» localPort | number | false | none | none |
»»» remoteIp | string | false | none | none |
»»» remotePort | number | false | none | none |
Request a Tracing Token
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/telemetry/live/tracing-token', headers = headers)
print(r.json())
GET /telemetry/live/tracing-token
Example responses
200 Response
{
"data": "VLxkixOwgDF8Frj0wi8kPhx3SpzKqtsDvbo25wgKw2tBIz/O8La0dwioQw9pN11c/////w8Ctau1+ALxq7X4AndlYg=="
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | string | false | none | none |
Start Live Tracing
Code samples
import requests
r = requests.get('https://mail.example.org/api/telemetry/traces/live')
print(r.json())
GET /telemetry/traces/live
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
filter | query | string | false | none |
token | query | string | false | none |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Obtain DNS Records for Domain
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/dns/records/{domain}', headers = headers)
print(r.json())
GET /dns/records/{domain}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
domain | path | string | true | none |
Example responses
200 Response
{
"data": [
{
"type": "MX",
"name": "example.org.",
"content": "10 mx.fr.email."
},
{
"type": "CNAME",
"name": "mail.example.org.",
"content": "mx.fr.email."
},
{
"type": "TXT",
"name": "202501e._domainkey.example.org.",
"content": "v=DKIM1; k=ed25519; h=sha256; p=82LqzMGRHEBI2HGDogjojWGz+Crrv0TAi8pcaOBd1vw="
},
{
"type": "TXT",
"name": "202501r._domainkey.example.org.",
"content": "v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1qtCbIlrZffIqm7gHqpihPUlxOq1zD6K3j1RO/enhkZRp5dEdCqcLbyFk5d+rqRsVIWwUZiU4HXHWqMTN1hlKojUlzmU1JYtlHRMwtM5vN4mzG4x1KA0i8ZHxkahE8ITsP+kPByDF9x0vAySHXpyErNXq3BeFyu/VW+6X+fmUW6x39PfWq7kQQTcwU0Ogo447oJfmAX9H4Z+/cD5WJVNiLgvLY6faVgoXm0mJJjRU5xoEStXoUcKwrwbl7G3K7JfxtmWsgEn97auV6v4he2LRRfTxbY9smkqUtcJs61E9iyyYroJv0iRda2pv71qg8e4wTb2sqBloZv/F2FZQhM+wIDAQAB"
},
{
"type": "TXT",
"name": "example.org.",
"content": "v=spf1 mx ra=postmaster -all"
},
{
"type": "SRV",
"name": "_jmap._tcp.example.org.",
"content": "0 1 443 mx.fr.email."
},
{
"type": "SRV",
"name": "_imaps._tcp.example.org.",
"content": "0 1 993 mx.fr.email."
},
{
"type": "SRV",
"name": "_imap._tcp.example.org.",
"content": "0 1 143 mx.fr.email."
},
{
"type": "SRV",
"name": "_imap._tcp.example.org.",
"content": "0 1 1143 mx.fr.email."
},
{
"type": "SRV",
"name": "_pop3s._tcp.example.org.",
"content": "0 1 995 mx.fr.email."
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | [object] | false | none | none |
»» type | string | false | none | none |
»» name | string | false | none | none |
»» content | string | false | none | none |
Purge Account
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/account/{account_id}', headers = headers)
print(r.json())
GET /store/purge/account/{account_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Delete Bayes Model for Account
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/in-memory/default/bayes-account/{account_id}', headers = headers)
print(r.json())
GET /store/purge/in-memory/default/bayes-account/{account_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
List Deleted Messages
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/undelete/{account_id}', headers = headers)
print(r.json())
GET /store/undelete/{account_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
limit | query | number | false | none |
page | query | number | false | none |
Example responses
200 Response
{
"data": {
"items": [],
"total": 0
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object | false | none | none |
»» items | [any] | false | none | none |
»» total | number | false | none | none |
Undelete Messages
Code samples
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://mail.example.org/api/store/undelete/{account_id}', headers = headers)
print(r.json())
POST /store/undelete/{account_id}
Body parameter
[
{
"hash": "9pDYGrkDlLYuBNl062qhi0wStnDYyq4ZWalnj2vXbLY",
"collection": "email",
"restoreTime": "2025-01-05T14:50:13Z",
"cancelDeletion": "2025-02-04T14:50:13Z"
}
]
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
body | body | array[object] | false | none |
Example responses
200 Response
{
"data": [
{
"type": "success"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | [object] | false | none | none |
»» type | string | false | none | none |
Obtain Queue Status
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/queue/status', headers = headers)
print(r.json())
GET /queue/status
Example responses
200 Response
{
"data": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | boolean | false | none | none |
Purge Blob Store
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/blob', headers = headers)
print(r.json())
GET /store/purge/blob
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Purge Data Store
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/data', headers = headers)
print(r.json())
GET /store/purge/data
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Purge In-Memory Store
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/in-memory', headers = headers)
print(r.json())
GET /store/purge/in-memory
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Purge All Accounts
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('https://mail.example.org/api/store/purge/account', headers = headers)
print(r.json())
GET /store/purge/account
Example responses
200 Response
{
"data": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | object¦null | false | none | none |
Reset IMAP UIDs for Account
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.delete('https://mail.example.org/api/store/uids/{account_id}', headers = headers)
print(r.json())
DELETE /store/uids/{account_id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
account_id | path | string | true | none |
Example responses
200 Response
{
"data": [
0,
0
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» data | [number] | false | none | none |