My agentic slop goes here. Not intended for anyone else!
1# Query 1: Last Week's Unread Email
2
3## Use Case Description
4Retrieve all unread emails from the past 7 days, sorted by received date (newest first). This is one of the most common email queries - getting up to date with recent unread messages.
5
6## Key JMAP Concepts Used
7- **Email/query**: Filtering emails by keywords and date ranges
8- **Filter conditions**: Using `hasKeyword` (negated) and `after` date filtering
9- **Sorting**: By `receivedAt` in descending order
10- **Property selection**: Requesting common display properties for efficiency
11
12## JMAP Request
13
14```json
15{
16 "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],
17 "methodCalls": [
18 [
19 "Email/query",
20 {
21 "accountId": "u12345678",
22 "filter": {
23 "operator": "AND",
24 "conditions": [
25 {
26 "hasKeyword": "$seen",
27 "value": false
28 },
29 {
30 "after": "2024-08-18T00:00:00Z"
31 }
32 ]
33 },
34 "sort": [
35 {
36 "property": "receivedAt",
37 "isAscending": false
38 }
39 ],
40 "limit": 50
41 },
42 "q0"
43 ],
44 [
45 "Email/get",
46 {
47 "accountId": "u12345678",
48 "#ids": {
49 "resultOf": "q0",
50 "name": "Email/query",
51 "path": "/ids"
52 },
53 "properties": [
54 "id", "threadId", "mailboxIds", "keywords", "from", "to", "cc",
55 "subject", "receivedAt", "hasAttachment", "preview", "size"
56 ]
57 },
58 "g0"
59 ]
60 ]
61}
62```
63
64## Expected Response Structure
65
66```json
67{
68 "methodResponses": [
69 [
70 "Email/query",
71 {
72 "accountId": "u12345678",
73 "queryState": "q1234567890",
74 "canCalculateChanges": true,
75 "position": 0,
76 "ids": ["Memail123", "Memail124", "Memail125"],
77 "total": 47,
78 "limit": 50
79 },
80 "q0"
81 ],
82 [
83 "Email/get",
84 {
85 "accountId": "u12345678",
86 "state": "s9876543210",
87 "list": [
88 {
89 "id": "Memail123",
90 "threadId": "Tthread456",
91 "mailboxIds": {"Minbox": true},
92 "keywords": {},
93 "from": [{"email": "alice@example.com", "name": "Alice Smith"}],
94 "to": [{"email": "me@example.com", "name": "John Doe"}],
95 "subject": "Re: Project Update",
96 "receivedAt": "2024-08-24T14:30:00Z",
97 "hasAttachment": false,
98 "preview": "Thanks for the update. I've reviewed the documents and...",
99 "size": 2543
100 }
101 ],
102 "notFound": []
103 },
104 "g0"
105 ]
106 ]
107}
108```
109
110## Explanation of Key Features
111
112### Filter Logic
113- `hasKeyword: "$seen", value: false` - Find emails that do NOT have the `$seen` keyword (unread emails)
114- `after: "2024-08-18T00:00:00Z"` - Only emails received after 7 days ago
115- `operator: "AND"` - Both conditions must be satisfied
116
117### Result References
118- `#ids` with `resultOf` - Passes the list of email IDs from the query directly to Email/get
119- This avoids duplicating IDs in the request and ensures consistency
120
121### Property Selection
122- Includes essential display properties while excluding heavy content like `bodyStructure` and `bodyValues`
123- `preview` gives a text snippet for quick scanning
124- `hasAttachment` allows UI indicators for attachments
125
126### Sorting and Pagination
127- `sort` by `receivedAt` descending shows newest emails first
128- `limit: 50` prevents overwhelming responses while handling most inbox scenarios
129- `total` in response shows how many unread emails exist overall