resend-cli 2.21.1 → 2.22.0-preview-inboxes.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resend-cli",
3
- "version": "2.21.1",
3
+ "version": "2.22.0-preview-inboxes.1",
4
4
  "description": "The official CLI for Resend",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -46,7 +46,7 @@
46
46
  "esbuild": "0.28.1",
47
47
  "esbuild-wasm": "0.28.0",
48
48
  "picocolors": "1.1.1",
49
- "resend": "6.28.0"
49
+ "resend": "6.28.1-preview-inboxes.0"
50
50
  },
51
51
  "pkg": {
52
52
  "scripts": [
@@ -13,7 +13,7 @@ metadata:
13
13
  author: resend
14
14
  # Skill version is independent from the CLI/package.json version —
15
15
  # bump it on skill content changes, not CLI releases.
16
- version: "2.14.0"
16
+ version: "2.18.0"
17
17
  homepage: https://resend.com/docs/cli-agents
18
18
  source: https://github.com/resend/resend-cli
19
19
  openclaw:
@@ -59,6 +59,7 @@ references:
59
59
  - references/logs.md
60
60
  - references/careers.md
61
61
  - references/suppressions.md
62
+ - references/inboxes.md
62
63
  - references/webhooks.md
63
64
  - references/auth.md
64
65
  - references/workflows.md
@@ -136,6 +137,7 @@ Auth resolves: `RESEND_API_KEY` env > config file (`resend login --key`). Use `-
136
137
  | `logs` | list, get, open |
137
138
  | `careers` | list, apply — browse open positions at Resend and apply |
138
139
  | `suppressions` _(beta)_ | list, add, get, delete, batch — requires account enrollment |
140
+ | `inboxes` _(beta)_ | create, list, get, update, delete, threads (list, get, update, delete, emails get/reply/forward), labels, drafts — requires account enrollment |
139
141
  | `api-keys` | create, list, update, delete |
140
142
  | `automations` | create, get, list, update, delete, duplicate, stop, open, runs |
141
143
  | `events` | create, get, list, update, delete, send, open |
@@ -221,6 +223,7 @@ resend doctor -q
221
223
  - **Viewing API request logs** → [references/logs.md](references/logs.md)
222
224
  - **Browsing or applying to jobs at Resend** → [references/careers.md](references/careers.md)
223
225
  - **Managing the suppression list** (beta) → [references/suppressions.md](references/suppressions.md)
226
+ - **Managing inboxes and received email** (beta) → [references/inboxes.md](references/inboxes.md)
224
227
  - **Creating automations or sending events** → [references/automations.md](references/automations.md)
225
228
  - **Setting up webhooks or listening for events** → [references/webhooks.md](references/webhooks.md)
226
229
  - **Auth, profiles, or health checks** → [references/auth.md](references/auth.md)
@@ -0,0 +1,346 @@
1
+ # inboxes
2
+
3
+ Detailed flag specifications for `resend inboxes` commands.
4
+
5
+ > **Beta:** Inboxes is a pre-GA feature gated per account. Commands appear in
6
+ > `--help` but return an API error unless inboxes is enabled for your account.
7
+ > Reach out to Resend to join the beta.
8
+
9
+ An inbox is an email address at one of your verified domains (with receiving
10
+ enabled) that can receive email. Received messages are grouped into threads
11
+ inside the inbox. Inboxes require a **full-access** API key — sending-only keys
12
+ are rejected.
13
+
14
+ ---
15
+
16
+ ## inboxes create
17
+
18
+ Create a new inbox at one of your verified domains.
19
+
20
+ | Flag | Type | Required | Description |
21
+ |------|------|----------|-------------|
22
+ | `--email_address <address>` | string | Yes (non-interactive) | Address for the inbox, e.g. `support@yourdomain.com` |
23
+ | `--name <name>` | string | No | Inbox name shown in the dashboard (max 64 chars) |
24
+ | `--friendly_name <name>` | string | No | Name used when sending from this inbox, e.g. `Ada from Support` |
25
+ | `--forwarding` | boolean | No | Enable forwarding — received emails are also forwarded to a generated forwarding address |
26
+
27
+ **Output:** `{"object":"inbox","id":"<uuid>","name":"<name>","email_address":"<address>","domain_id":"<uuid>","forwarding_address":"<address>"|null,"unread":0,"created_at":"<date>"}`
28
+
29
+ ---
30
+
31
+ ## inboxes list
32
+
33
+ List all inboxes (default subcommand — `resend inboxes` alone runs it).
34
+
35
+ | Flag | Type | Default | Description |
36
+ |------|------|---------|-------------|
37
+ | `--limit <n>` | number | 10 | Max results, 1-100 |
38
+ | `--after <cursor>` | string | — | Forward pagination cursor (an inbox ID) |
39
+ | `--before <cursor>` | string | — | Backward pagination cursor (an inbox ID) |
40
+
41
+ **Alias:** `ls`
42
+
43
+ **Output:** `{"object":"list","has_more":false,"data":[{"id":"<uuid>","name":"<name>"|null,"email_address":"<address>","unread":0,"last_received":"<date>"|null}]}`
44
+
45
+ ---
46
+
47
+ ## inboxes get
48
+
49
+ Retrieve a single inbox.
50
+
51
+ **Argument:** `<id>` — inbox UUID (required in non-interactive mode)
52
+
53
+ **Output:** `{"object":"inbox","id":"<uuid>","name":"<name>"|null,"email_address":"<address>","forwarding_address":"<address>"|null,"unread":0,"drafts":0,"last_received":"<date>"|null}`
54
+
55
+ ---
56
+
57
+ ## inboxes update
58
+
59
+ Update an inbox's name or friendly name. At least one option is required.
60
+ The email address cannot be changed after creation.
61
+
62
+ **Argument:** `<id>` — inbox UUID
63
+
64
+ | Flag | Type | Description |
65
+ |------|------|-------------|
66
+ | `--name <name>` | string | New inbox name (max 64 chars) |
67
+ | `--friendly_name <name>` | string | New name used when sending from this inbox |
68
+
69
+ **Output:** `{"object":"inbox","id":"<uuid>"}`
70
+
71
+ ---
72
+
73
+ ## inboxes threads list
74
+
75
+ List threads in an inbox (default subcommand of `resend inboxes threads`).
76
+ Pages are fixed at 50 threads, newest activity first — there is no `--limit`.
77
+
78
+ **Flags:** `--inbox_id <id>` — required in non-interactive mode
79
+
80
+ | Flag | Type | Default | Description |
81
+ |------|------|---------|-------------|
82
+ | `--folder <folder>` | string | `inbox` | One of `inbox`, `archive`, `spam`, `sent`, `trash` |
83
+ | `--query <text>` | string | — | Search subject, sender, and label names |
84
+ | `--from <sender>` | string | — | Filter by sender address or name |
85
+ | `--label <label_id>` | string | — | Filter by label **UUID** (not name); repeat for multiple |
86
+ | `--cursor <cursor>` | string | — | `next_cursor` from a previous response |
87
+
88
+ **Alias:** `ls`
89
+
90
+ **Output:** `{"object":"list","has_more":false,"next_cursor":"<cursor>"|null,"data":[{"id":"<uuid>","subject":"<subject>"|null,"from":"<sender>"|null,"to":[],"cc":[],"bcc":[],"labels":[],"message_count":1,"has_attachment":false,"has_draft":false,"read":false,"received_at":"<date>"}]}`
91
+
92
+ ---
93
+
94
+ ## inboxes threads get
95
+
96
+ Retrieve a thread with every message inline, including `html` and `text`
97
+ bodies. Use the message `id` values as the email ID for replies.
98
+
99
+ **Flags:** `--inbox_id <id> --thread_id <id>` — required in non-interactive mode
100
+
101
+ **Output:** `{"object":"inbox_thread","id":"<uuid>","subject":"<subject>"|null,"folder":"inbox","labels":[],"read":true,"messages":{"has_more":false,"data":[{"id":"<uuid>","direction":"inbound|outbound","from":"<sender>","to":[],"subject":"<subject>"|null,"html":"<html>"|null,"text":"<text>"|null,"attachments":[],"read":true,"received_at":"<date>"}]}}`
102
+
103
+ ---
104
+
105
+ ## inboxes threads update
106
+
107
+ Mark a thread read/unread, move it, or apply a label. At least one option is
108
+ required.
109
+
110
+ **Flags:** `--inbox_id <id> --thread_id <id>` — required in non-interactive mode
111
+
112
+ | Flag | Type | Description |
113
+ |------|------|-------------|
114
+ | `--read` | boolean | Mark every message in the thread as read |
115
+ | `--unread` | boolean | Mark every message in the thread as unread |
116
+ | `--folder <folder>` | string | Move to one of `inbox`, `archive`, `spam`, `trash` (`sent` is not a valid target) |
117
+ | `--label_id <label_id>` | string | Apply this label (UUID) to the thread |
118
+
119
+ **Output:** `{"object":"inbox_thread","id":"<uuid>","subject":"<subject>"|null,"folder":"<folder>","labels":[],"read":true}`
120
+
121
+ ---
122
+
123
+ ## inboxes threads delete
124
+
125
+ Delete a thread and all of its messages.
126
+
127
+ **Flags:** `--inbox_id <id> --thread_id <id>` — required in non-interactive mode
128
+
129
+ | Flag | Type | Required | Description |
130
+ |------|------|----------|-------------|
131
+ | `--yes` | boolean | Yes (non-interactive) | Skip confirmation |
132
+
133
+ **Alias:** `rm`
134
+
135
+ **Output:** `{"object":"inbox_thread","id":"<uuid>","deleted":true}`
136
+
137
+ ---
138
+
139
+ ## inboxes threads emails get
140
+
141
+ Retrieve a single email from a thread.
142
+
143
+ **Flags:** `--inbox_id <id> --thread_id <id> --email_id <id>` — required in non-interactive mode
144
+
145
+ **Output:** `{"id":"<uuid>","direction":"inbound|outbound","from":"<sender>","to":[],"cc":[],"bcc":[],"reply_to":[],"subject":"<subject>"|null,"html":"<html>"|null,"text":"<text>"|null,"attachments":[{"id":"<id>","filename":"<name>"|null,"size":123}],"read":true,"received_at":"<date>"}`
146
+
147
+ ---
148
+
149
+ ## inboxes threads emails reply
150
+
151
+ Reply to a specific email in a thread. The reply is sent from the inbox
152
+ address to the sender of the original email.
153
+
154
+ **Flags:** `--inbox_id <id> --thread_id <id> --email_id <id>` — required in
155
+ non-interactive mode; the email ID comes from `inboxes threads get`
156
+
157
+ | Flag | Type | Required | Description |
158
+ |------|------|----------|-------------|
159
+ | `--text <text>` | string | One of text/html | Plain text reply body |
160
+ | `--html <html>` | string | One of text/html | HTML reply body |
161
+ | `--subject <subject>` | string | No | Override the reply subject |
162
+
163
+ **Output:** `{"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"text":"<text>"|null,"html":"<html>"|null,"read":true,"received_at":"<date>"}`
164
+
165
+ ---
166
+
167
+ ## inboxes threads emails forward
168
+
169
+ Forward an email to other recipients from the inbox address.
170
+
171
+ **Flags:** `--inbox_id <id> --thread_id <id> --email_id <id>` — required in non-interactive mode
172
+
173
+ | Flag | Type | Required | Description |
174
+ |------|------|----------|-------------|
175
+ | `--to <address>` | string | Yes | Recipient; repeat the flag for multiple |
176
+ | `--text <text>` | string | No | Plain text note to include |
177
+ | `--html <html>` | string | No | HTML note to include |
178
+ | `--subject <subject>` | string | No | Override the forwarded subject |
179
+
180
+ **Output:** `{"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"text":"<text>"|null,"html":"<html>"|null,"attachments":[],"read":true,"received_at":"<date>"}`
181
+
182
+ ---
183
+
184
+ ## inboxes labels list
185
+
186
+ List all labels in an inbox (not paginated; default subcommand of
187
+ `resend inboxes labels`). Use label IDs with `threads update --label_id` and
188
+ `threads list --label`.
189
+
190
+ **Flags:** `--inbox_id <id>` — required in non-interactive mode
191
+
192
+ **Alias:** `ls`
193
+
194
+ **Output:** `{"object":"list","has_more":false,"data":[{"id":"<uuid>","name":"<name>","color":"<color>","created_at":"<date>"}]}`
195
+
196
+ ---
197
+
198
+ ## inboxes labels create
199
+
200
+ Create a label. An inbox can have up to 100 labels.
201
+
202
+ **Flags:** `--inbox_id <id>` — required in non-interactive mode
203
+
204
+ | Flag | Type | Required | Description |
205
+ |------|------|----------|-------------|
206
+ | `--name <name>` | string | Yes (non-interactive) | Label name, max 64 characters |
207
+ | `--color <color>` | string | No | One of `cyan`, `teal`, `grass`, `lime`, `yellow`, `orange`, `iris`, `plum`, `crimson`, `bronze`, `mauve` (random when omitted) |
208
+
209
+ **Output:** `{"object":"inbox_label","id":"<uuid>","name":"<name>","color":"<color>","created_at":"<date>"}`
210
+
211
+ ---
212
+
213
+ ## inboxes labels update
214
+
215
+ Update a label's name or color. At least one option is required.
216
+
217
+ **Flags:** `--inbox_id <id> --label_id <id>` — required in non-interactive mode
218
+
219
+ | Flag | Type | Description |
220
+ |------|------|-------------|
221
+ | `--name <name>` | string | New label name |
222
+ | `--color <color>` | string | New label color (same choices as create) |
223
+
224
+ **Output:** `{"object":"inbox_label","id":"<uuid>"}`
225
+
226
+ ---
227
+
228
+ ## inboxes labels delete
229
+
230
+ Delete a label. It is removed from every thread that has it.
231
+
232
+ **Flags:** `--inbox_id <id> --label_id <id>` — required in non-interactive mode
233
+
234
+ | Flag | Type | Required | Description |
235
+ |------|------|----------|-------------|
236
+ | `--yes` | boolean | Yes (non-interactive) | Skip confirmation |
237
+
238
+ **Alias:** `rm`
239
+
240
+ **Output:** `{"object":"inbox_label","id":"<uuid>","deleted":true}`
241
+
242
+ ---
243
+
244
+ ## inboxes drafts list
245
+
246
+ List drafts in an inbox (default subcommand of `resend inboxes drafts`).
247
+ Opaque cursor pagination like threads — no `--limit`.
248
+
249
+ **Flags:** `--inbox_id <id>` — required in non-interactive mode
250
+
251
+ | Flag | Type | Description |
252
+ |------|------|-------------|
253
+ | `--cursor <cursor>` | string | `next_cursor` from a previous response |
254
+
255
+ **Alias:** `ls`
256
+
257
+ **Output:** `{"object":"list","has_more":false,"next_cursor":"<cursor>"|null,"data":[{"id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>"|null,"snippet":"<text>"|null,"thread_id":"<uuid>"|null,"reply_to_email_id":"<uuid>"|null,"updated_at":"<date>"}]}`
258
+
259
+ ---
260
+
261
+ ## inboxes drafts create
262
+
263
+ Create a standalone draft, or a reply draft when `--thread_id` and
264
+ `--reply_to_email_id` are passed **together**. At least one content field is
265
+ required.
266
+
267
+ **Flags:** `--inbox_id <id>` — required in non-interactive mode
268
+
269
+ | Flag | Type | Description |
270
+ |------|------|-------------|
271
+ | `--to <address>` | string | Recipient; repeat for multiple |
272
+ | `--cc <address>` | string | Cc; repeat for multiple |
273
+ | `--bcc <address>` | string | Bcc; repeat for multiple |
274
+ | `--subject <subject>` | string | Draft subject |
275
+ | `--text <text>` | string | Plain text body |
276
+ | `--html <html>` | string | HTML body |
277
+ | `--thread_id <thread_id>` | string | Thread to reply to (pairs with `--reply_to_email_id`) |
278
+ | `--reply_to_email_id <email_id>` | string | Email the draft replies to (pairs with `--thread_id`) |
279
+
280
+ **Output:** `{"object":"inbox_draft","id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>"|null,"html":"<html>"|null,"text":"<text>"|null,"thread_id":"<uuid>"|null,"reply_to_email_id":"<uuid>"|null,"email_id":null,"created_at":"<date>","updated_at":"<date>"}`
281
+
282
+ ---
283
+
284
+ ## inboxes drafts get
285
+
286
+ Retrieve a draft, including its full body.
287
+
288
+ **Flags:** `--inbox_id <id> --draft_id <id>` — required in non-interactive mode
289
+
290
+ **Output:** same shape as `drafts create`.
291
+
292
+ ---
293
+
294
+ ## inboxes drafts update
295
+
296
+ Update a draft's recipients, subject, or body. At least one option is
297
+ required; provided fields replace existing values. Same flags as
298
+ `drafts create` minus `--thread_id`/`--reply_to_email_id`.
299
+
300
+ **Flags:** `--inbox_id <id> --draft_id <id>` — required in non-interactive mode
301
+
302
+ **Output:** same shape as `drafts create`.
303
+
304
+ ---
305
+
306
+ ## inboxes drafts delete
307
+
308
+ Delete a draft.
309
+
310
+ **Flags:** `--inbox_id <id> --draft_id <id>` — required in non-interactive mode
311
+
312
+ | Flag | Type | Required | Description |
313
+ |------|------|----------|-------------|
314
+ | `--yes` | boolean | Yes (non-interactive) | Skip confirmation |
315
+
316
+ **Alias:** `rm`
317
+
318
+ **Output:** `{"object":"inbox_draft","id":"<uuid>","deleted":true}`
319
+
320
+ ---
321
+
322
+ ## inboxes drafts send
323
+
324
+ Send a draft from the inbox address. The draft must have recipients and a
325
+ body.
326
+
327
+ **Flags:** `--inbox_id <id> --draft_id <id>` — required in non-interactive mode
328
+
329
+ **Output:** `{"object":"inbox_draft","id":"<uuid>","thread_id":"<uuid>","email_id":"<uuid>"}`
330
+
331
+ ---
332
+
333
+ ## inboxes delete
334
+
335
+ Delete an inbox. Its threads and messages are removed and the address stops
336
+ receiving email.
337
+
338
+ **Argument:** `<id>` — inbox UUID
339
+
340
+ | Flag | Type | Required | Description |
341
+ |------|------|----------|-------------|
342
+ | `--yes` | boolean | Yes (non-interactive) | Skip confirmation |
343
+
344
+ **Alias:** `rm`
345
+
346
+ **Output:** `{"object":"inbox","id":"<uuid>","deleted":true}`