Page stored inbound mail for a workspace address
Read-only human inbox. Returns stored sender fields, subject, and the raw plain-text body — never parsed codes, executed HTML, or remotely fetched assets. The address is resolved inside the caller’s workspace: an absent, repeated, foreign, or malformed addressId returns the same opaque 404 and never another workspace’s mail.
Ordered by received_at DESC, id DESC, including equal timestamps. Pass nextCursor back unchanged to load older retained mail; null means no further rows were observed. This is not a snapshot: newly received mail requires refreshing the first page, and stored retention — not this API — is what removes older messages. Expiry is enforced against the database clock, so a message past its stored retention window is never returned. Reset pagination when the workspace or address changes. No total, unread count, or complete sender list is implied.
workspaceId is resolved before this endpoint’s own validation and
is optional for an API key, which is bound to its workspace. A request that
resolves no workspace at all returns 400; a workspace UUID that does
not exist, or that the caller cannot access, returns an opaque 404.
Unknown or repeated limit/cursor values, and any other unknown
query parameter, return 400 — addressId is governed by the 404 rule
above, not this one. All responses use Cache-Control: no-store.
curl --request GET \
--url https://api.lusor.ai/v1/emails/messages \
--header 'X-Api-Key: <api-key>'const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.lusor.ai/v1/emails/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.lusor.ai/v1/emails/messages"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"addressId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"senderName": "<string>",
"senderAddress": "<string>",
"receivedAt": "2023-11-07T05:31:56Z",
"subject": "<string>",
"body": "<string>"
}
],
"nextCursor": "<string>"
}{
"error": "validation_error",
"details": {}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
Workspace API key, created in the dashboard under Settings → API Keys.
Query Parameters
Workspace the request is scoped to. Optional for API keys: a key is bound to one workspace when it is created, and naming any other workspace returns an opaque 404.
Agent Mail address UUID, resolved inside the caller's workspace. Absent, repeated, foreign, and malformed ids all return an opaque 404.
Decimal integer without signs, whitespace, or leading zeroes.
1 <= x <= 100Opaque validated pagination cursor from the previous page.
1 - 512^[A-Za-z0-9_-]+$Was this page helpful?
curl --request GET \
--url https://api.lusor.ai/v1/emails/messages \
--header 'X-Api-Key: <api-key>'const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.lusor.ai/v1/emails/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.lusor.ai/v1/emails/messages"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"addressId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"senderName": "<string>",
"senderAddress": "<string>",
"receivedAt": "2023-11-07T05:31:56Z",
"subject": "<string>",
"body": "<string>"
}
],
"nextCursor": "<string>"
}{
"error": "validation_error",
"details": {}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}
