@primitivedotdev/cli 0.24.0

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.
@@ -0,0 +1,4287 @@
1
+ {
2
+ "commands": {
3
+ "completion": {
4
+ "aliases": [],
5
+ "args": {
6
+ "shell": {
7
+ "description": "Shell type",
8
+ "name": "shell",
9
+ "options": [
10
+ "bash",
11
+ "zsh",
12
+ "powershell",
13
+ "fish"
14
+ ],
15
+ "required": true
16
+ }
17
+ },
18
+ "description": "Show shell completion output or installation instructions for supported shells",
19
+ "flags": {},
20
+ "hasDynamicHelp": false,
21
+ "hiddenAliases": [],
22
+ "id": "completion",
23
+ "pluginAlias": "@primitivedotdev/cli",
24
+ "pluginName": "@primitivedotdev/cli",
25
+ "pluginType": "core",
26
+ "strict": true,
27
+ "summary": "Show shell completion output or installation instructions",
28
+ "enableJsonFlag": false
29
+ },
30
+ "list-operations": {
31
+ "aliases": [],
32
+ "args": {},
33
+ "description": "List all generated API operations as JSON. Useful for piping to `jq` to discover available commands, their request/response schemas, and per-field descriptions. For inspecting a single operation in detail, prefer `primitive describe <command>`.",
34
+ "flags": {},
35
+ "hasDynamicHelp": false,
36
+ "hiddenAliases": [],
37
+ "id": "list-operations",
38
+ "pluginAlias": "@primitivedotdev/cli",
39
+ "pluginName": "@primitivedotdev/cli",
40
+ "pluginType": "core",
41
+ "strict": true,
42
+ "summary": "List all generated API operations (JSON)",
43
+ "enableJsonFlag": false
44
+ },
45
+ "describe": {
46
+ "aliases": [],
47
+ "args": {
48
+ "command": {
49
+ "description": "Command id to describe, in `<topic>:<command>` form (e.g. `emails:get-email`). Run `primitive list-operations | jq -r '.[] | \"\\(.tagCommand):\\(.command)\"'` to enumerate.",
50
+ "name": "command",
51
+ "required": true
52
+ }
53
+ },
54
+ "description": "Print the full operation manifest entry for a single API command, including the path, request schema, response schema, and per-field descriptions sourced from the OpenAPI spec.\n\n The manifest entry's `responseSchema` carries the inlined JSON Schema for the operation's 200/201 `data` envelope contents (`$ref`s resolved). Use it to look up what specific response fields mean. Examples:\n\n # Which of EmailDetail's sender-shaped fields is canonical?\n primitive describe emails:get-email | jq '.responseSchema.properties | keys'\n primitive describe emails:get-email | jq -r '.responseSchema.properties.from_email.description'\n\n # What does each value of SentEmailStatus mean?\n primitive describe sending:get-sent-email | jq -r '.responseSchema.properties.status.description'\n\n `requestSchema` is the same shape for the request body when one exists. For a single field across many operations at once, use `primitive list-operations | jq` instead.",
55
+ "examples": [
56
+ "<%= config.bin %> describe emails:get-email",
57
+ "<%= config.bin %> describe sending:send-email"
58
+ ],
59
+ "flags": {},
60
+ "hasDynamicHelp": false,
61
+ "hiddenAliases": [],
62
+ "id": "describe",
63
+ "pluginAlias": "@primitivedotdev/cli",
64
+ "pluginName": "@primitivedotdev/cli",
65
+ "pluginType": "core",
66
+ "strict": true,
67
+ "summary": "Describe a single API operation in detail",
68
+ "enableJsonFlag": false
69
+ },
70
+ "send": {
71
+ "aliases": [],
72
+ "args": {},
73
+ "description": "Send an outbound email. Agent-grade shortcut for sending:send-email with sensible defaults.\n\n --from defaults to agent@<your-first-verified-outbound-domain> when omitted.\n --subject defaults to the first line of the body when omitted.\n\n For the full flag set (custom message-id threading on the wire,\n references arrays, etc.), use `primitive sending:send-email`.",
74
+ "examples": [
75
+ "<%= config.bin %> send --to alice@example.com --body 'Hi Alice!'",
76
+ "<%= config.bin %> send --to alice@example.com --from support@yourcompany.com --subject 'Quick question' --body 'Are you free Thursday?'",
77
+ "<%= config.bin %> send --to alice@example.com --html '<p>Hello!</p>'",
78
+ "<%= config.bin %> send --to alice@example.com --body 'Confirmed' --wait",
79
+ "<%= config.bin %> send --to inbox@your-managed-domain.primitive.email --body 'self-loop smoke test' --wait # any *.primitive.email address routes back to the sending account; useful for proving outbound + inbound work end-to-end"
80
+ ],
81
+ "flags": {
82
+ "api-key": {
83
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
84
+ "env": "PRIMITIVE_API_KEY",
85
+ "name": "api-key",
86
+ "hasDynamicHelp": false,
87
+ "multiple": false,
88
+ "type": "option"
89
+ },
90
+ "api-base-url-1": {
91
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
92
+ "env": "PRIMITIVE_API_BASE_URL_1",
93
+ "hidden": true,
94
+ "name": "api-base-url-1",
95
+ "hasDynamicHelp": false,
96
+ "multiple": false,
97
+ "type": "option"
98
+ },
99
+ "api-base-url-2": {
100
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
101
+ "env": "PRIMITIVE_API_BASE_URL_2",
102
+ "hidden": true,
103
+ "name": "api-base-url-2",
104
+ "hasDynamicHelp": false,
105
+ "multiple": false,
106
+ "type": "option"
107
+ },
108
+ "to": {
109
+ "description": "Recipient address (e.g. alice@example.com).",
110
+ "name": "to",
111
+ "required": true,
112
+ "hasDynamicHelp": false,
113
+ "multiple": false,
114
+ "type": "option"
115
+ },
116
+ "from": {
117
+ "description": "Sender address. Defaults to agent@<your-first-verified-outbound-domain>.",
118
+ "name": "from",
119
+ "hasDynamicHelp": false,
120
+ "multiple": false,
121
+ "type": "option"
122
+ },
123
+ "subject": {
124
+ "description": "Subject line. Defaults to the first line of --body / --html when omitted.",
125
+ "name": "subject",
126
+ "hasDynamicHelp": false,
127
+ "multiple": false,
128
+ "type": "option"
129
+ },
130
+ "body": {
131
+ "description": "Plain-text message body. Either --body or --html (or both) is required.",
132
+ "name": "body",
133
+ "hasDynamicHelp": false,
134
+ "multiple": false,
135
+ "type": "option"
136
+ },
137
+ "html": {
138
+ "description": "HTML message body. Either --body or --html (or both) is required.",
139
+ "name": "html",
140
+ "hasDynamicHelp": false,
141
+ "multiple": false,
142
+ "type": "option"
143
+ },
144
+ "in-reply-to": {
145
+ "description": "Message-Id of the parent email when threading a reply on the wire. For replying to an inbound message you received, prefer `primitive sending:reply-to-email --id <inbound-id>`.",
146
+ "name": "in-reply-to",
147
+ "hasDynamicHelp": false,
148
+ "multiple": false,
149
+ "type": "option"
150
+ },
151
+ "wait": {
152
+ "description": "Block until the receiving MTA returns an outcome. Without --wait, the call returns once Primitive has accepted the message for delivery.",
153
+ "name": "wait",
154
+ "allowNo": false,
155
+ "type": "boolean"
156
+ },
157
+ "wait-timeout-ms": {
158
+ "description": "Maximum time to wait when --wait is set. Defaults to 30000ms.",
159
+ "name": "wait-timeout-ms",
160
+ "hasDynamicHelp": false,
161
+ "multiple": false,
162
+ "type": "option"
163
+ },
164
+ "time": {
165
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
166
+ "name": "time",
167
+ "allowNo": false,
168
+ "type": "boolean"
169
+ }
170
+ },
171
+ "hasDynamicHelp": false,
172
+ "hiddenAliases": [],
173
+ "id": "send",
174
+ "pluginAlias": "@primitivedotdev/cli",
175
+ "pluginName": "@primitivedotdev/cli",
176
+ "pluginType": "core",
177
+ "strict": true,
178
+ "summary": "Send an email (simplified, agent-friendly)",
179
+ "enableJsonFlag": false
180
+ },
181
+ "login": {
182
+ "aliases": [],
183
+ "args": {},
184
+ "description": "Log in by opening Primitive in your browser and saving an org-scoped CLI API key locally.",
185
+ "examples": [
186
+ "<%= config.bin %> login",
187
+ "<%= config.bin %> login --device-name work-laptop",
188
+ "<%= config.bin %> login --force"
189
+ ],
190
+ "flags": {
191
+ "api-base-url-1": {
192
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
193
+ "env": "PRIMITIVE_API_BASE_URL_1",
194
+ "hidden": true,
195
+ "name": "api-base-url-1",
196
+ "hasDynamicHelp": false,
197
+ "multiple": false,
198
+ "type": "option"
199
+ },
200
+ "device-name": {
201
+ "description": "Device name shown in the browser approval screen",
202
+ "name": "device-name",
203
+ "hasDynamicHelp": false,
204
+ "multiple": false,
205
+ "type": "option"
206
+ },
207
+ "no-browser": {
208
+ "description": "Do not attempt to open the browser automatically",
209
+ "name": "no-browser",
210
+ "allowNo": false,
211
+ "type": "boolean"
212
+ },
213
+ "force": {
214
+ "char": "f",
215
+ "description": "Replace saved credentials without first verifying the existing login",
216
+ "name": "force",
217
+ "allowNo": false,
218
+ "type": "boolean"
219
+ }
220
+ },
221
+ "hasDynamicHelp": false,
222
+ "hiddenAliases": [],
223
+ "id": "login",
224
+ "pluginAlias": "@primitivedotdev/cli",
225
+ "pluginName": "@primitivedotdev/cli",
226
+ "pluginType": "core",
227
+ "strict": true,
228
+ "summary": "Log in with browser approval",
229
+ "enableJsonFlag": false
230
+ },
231
+ "logout": {
232
+ "aliases": [],
233
+ "args": {},
234
+ "description": "Log out by revoking the saved Primitive CLI API key and deleting local credentials.",
235
+ "examples": [
236
+ "<%= config.bin %> logout"
237
+ ],
238
+ "flags": {
239
+ "api-base-url-1": {
240
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
241
+ "env": "PRIMITIVE_API_BASE_URL_1",
242
+ "hidden": true,
243
+ "name": "api-base-url-1",
244
+ "hasDynamicHelp": false,
245
+ "multiple": false,
246
+ "type": "option"
247
+ }
248
+ },
249
+ "hasDynamicHelp": false,
250
+ "hiddenAliases": [],
251
+ "id": "logout",
252
+ "pluginAlias": "@primitivedotdev/cli",
253
+ "pluginName": "@primitivedotdev/cli",
254
+ "pluginType": "core",
255
+ "strict": true,
256
+ "summary": "Log out and revoke the saved CLI key",
257
+ "enableJsonFlag": false
258
+ },
259
+ "whoami": {
260
+ "aliases": [],
261
+ "args": {},
262
+ "description": "Print the account currently authenticated by the API key. Useful as a credentials smoke test: confirms the key is live and shows which account it belongs to.",
263
+ "examples": [
264
+ "<%= config.bin %> whoami",
265
+ "<%= config.bin %> whoami --api-key prim_..."
266
+ ],
267
+ "flags": {
268
+ "api-key": {
269
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
270
+ "env": "PRIMITIVE_API_KEY",
271
+ "name": "api-key",
272
+ "hasDynamicHelp": false,
273
+ "multiple": false,
274
+ "type": "option"
275
+ },
276
+ "api-base-url-1": {
277
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
278
+ "env": "PRIMITIVE_API_BASE_URL_1",
279
+ "hidden": true,
280
+ "name": "api-base-url-1",
281
+ "hasDynamicHelp": false,
282
+ "multiple": false,
283
+ "type": "option"
284
+ },
285
+ "api-base-url-2": {
286
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
287
+ "env": "PRIMITIVE_API_BASE_URL_2",
288
+ "hidden": true,
289
+ "name": "api-base-url-2",
290
+ "hasDynamicHelp": false,
291
+ "multiple": false,
292
+ "type": "option"
293
+ },
294
+ "time": {
295
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
296
+ "name": "time",
297
+ "allowNo": false,
298
+ "type": "boolean"
299
+ }
300
+ },
301
+ "hasDynamicHelp": false,
302
+ "hiddenAliases": [],
303
+ "id": "whoami",
304
+ "pluginAlias": "@primitivedotdev/cli",
305
+ "pluginName": "@primitivedotdev/cli",
306
+ "pluginType": "core",
307
+ "strict": true,
308
+ "summary": "Print the authenticated account (credentials smoke test)",
309
+ "enableJsonFlag": false
310
+ },
311
+ "emails:latest": {
312
+ "aliases": [],
313
+ "args": {},
314
+ "description": "Print the N most recent inbound emails as a one-line-per-row text table. Designed for quick triage and visual scanning. For programmatic access, use `primitive emails:list-emails` (full JSON envelope, cursor pagination, filters) or pass `--json` here for the same raw shape without pagination/filters.\n\n ID display is TTY-aware. When STDOUT is a terminal, the table truncates each row's id to the first 8 characters for readability. When STDOUT is piped or redirected (the row stream is being consumed by another command), the full UUID is printed so the id can be fed straight back into `emails:get-email`, `emails:delete-email`, etc. without a separate `--json` round-trip.\n\n Output streams: the column header line is written to STDERR so the row data on STDOUT stays grep/awk-friendly. `--json` writes everything (including the envelope) to STDOUT and is equivalent to running `emails:list-emails --limit N` for the same N.",
315
+ "examples": [
316
+ "<%= config.bin %> emails latest",
317
+ "<%= config.bin %> emails latest --limit 25",
318
+ "<%= config.bin %> emails latest | head -1 | awk '{print $1}' # full UUID since piped",
319
+ "<%= config.bin %> emails latest --json | jq '.data[0].id'"
320
+ ],
321
+ "flags": {
322
+ "api-key": {
323
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
324
+ "env": "PRIMITIVE_API_KEY",
325
+ "name": "api-key",
326
+ "hasDynamicHelp": false,
327
+ "multiple": false,
328
+ "type": "option"
329
+ },
330
+ "api-base-url-1": {
331
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
332
+ "env": "PRIMITIVE_API_BASE_URL_1",
333
+ "hidden": true,
334
+ "name": "api-base-url-1",
335
+ "hasDynamicHelp": false,
336
+ "multiple": false,
337
+ "type": "option"
338
+ },
339
+ "api-base-url-2": {
340
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
341
+ "env": "PRIMITIVE_API_BASE_URL_2",
342
+ "hidden": true,
343
+ "name": "api-base-url-2",
344
+ "hasDynamicHelp": false,
345
+ "multiple": false,
346
+ "type": "option"
347
+ },
348
+ "limit": {
349
+ "description": "Number of rows to print (1-100, default 10).",
350
+ "name": "limit",
351
+ "default": 10,
352
+ "hasDynamicHelp": false,
353
+ "multiple": false,
354
+ "type": "option"
355
+ },
356
+ "json": {
357
+ "description": "Print the raw response envelope (with full UUIDs and meta) as JSON on STDOUT instead of the text table. Useful for piping into `jq`, capturing ids for follow-up commands, or scripting.",
358
+ "name": "json",
359
+ "allowNo": false,
360
+ "type": "boolean"
361
+ },
362
+ "time": {
363
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
364
+ "name": "time",
365
+ "allowNo": false,
366
+ "type": "boolean"
367
+ }
368
+ },
369
+ "hasDynamicHelp": false,
370
+ "hiddenAliases": [],
371
+ "id": "emails:latest",
372
+ "pluginAlias": "@primitivedotdev/cli",
373
+ "pluginName": "@primitivedotdev/cli",
374
+ "pluginType": "core",
375
+ "strict": true,
376
+ "summary": "Show the most recent inbound emails as a compact table",
377
+ "enableJsonFlag": false
378
+ },
379
+ "emails:watch": {
380
+ "aliases": [],
381
+ "args": {},
382
+ "description": "Poll for new inbound emails and print matching messages as they arrive.",
383
+ "examples": [
384
+ "<%= config.bin %> emails watch --to support@example.com",
385
+ "<%= config.bin %> emails watch --subject verify --seconds 300",
386
+ "<%= config.bin %> emails watch --number 20 --jsonl"
387
+ ],
388
+ "flags": {
389
+ "api-key": {
390
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
391
+ "env": "PRIMITIVE_API_KEY",
392
+ "name": "api-key",
393
+ "hasDynamicHelp": false,
394
+ "multiple": false,
395
+ "type": "option"
396
+ },
397
+ "api-base-url-1": {
398
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
399
+ "env": "PRIMITIVE_API_BASE_URL_1",
400
+ "hidden": true,
401
+ "name": "api-base-url-1",
402
+ "hasDynamicHelp": false,
403
+ "multiple": false,
404
+ "type": "option"
405
+ },
406
+ "api-base-url-2": {
407
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
408
+ "env": "PRIMITIVE_API_BASE_URL_2",
409
+ "hidden": true,
410
+ "name": "api-base-url-2",
411
+ "hasDynamicHelp": false,
412
+ "multiple": false,
413
+ "type": "option"
414
+ },
415
+ "body": {
416
+ "description": "Full-text body filter",
417
+ "name": "body",
418
+ "hasDynamicHelp": false,
419
+ "multiple": false,
420
+ "type": "option"
421
+ },
422
+ "domain": {
423
+ "description": "Filter by inbound email domain",
424
+ "name": "domain",
425
+ "hasDynamicHelp": false,
426
+ "multiple": false,
427
+ "type": "option"
428
+ },
429
+ "domain-id": {
430
+ "description": "Filter by domain UUID",
431
+ "name": "domain-id",
432
+ "hasDynamicHelp": false,
433
+ "multiple": false,
434
+ "type": "option"
435
+ },
436
+ "from": {
437
+ "description": "Filter by sender address or domain",
438
+ "name": "from",
439
+ "hasDynamicHelp": false,
440
+ "multiple": false,
441
+ "type": "option"
442
+ },
443
+ "has-attachment": {
444
+ "description": "Only show emails with one or more attachments",
445
+ "name": "has-attachment",
446
+ "allowNo": false,
447
+ "type": "boolean"
448
+ },
449
+ "include-existing": {
450
+ "description": "Start from existing matching emails instead of only new arrivals",
451
+ "name": "include-existing",
452
+ "allowNo": false,
453
+ "type": "boolean"
454
+ },
455
+ "interval": {
456
+ "description": "Seconds to wait between empty polls",
457
+ "name": "interval",
458
+ "default": 2,
459
+ "hasDynamicHelp": false,
460
+ "multiple": false,
461
+ "type": "option"
462
+ },
463
+ "jsonl": {
464
+ "description": "Print each email as one JSON object per line",
465
+ "name": "jsonl",
466
+ "allowNo": false,
467
+ "type": "boolean"
468
+ },
469
+ "number": {
470
+ "description": "Exit after printing this many matching emails",
471
+ "name": "number",
472
+ "hasDynamicHelp": false,
473
+ "multiple": false,
474
+ "type": "option"
475
+ },
476
+ "page-size": {
477
+ "description": "Emails to fetch per poll (1-100)",
478
+ "name": "page-size",
479
+ "default": 50,
480
+ "hasDynamicHelp": false,
481
+ "multiple": false,
482
+ "type": "option"
483
+ },
484
+ "q": {
485
+ "description": "Full-text search DSL query",
486
+ "name": "q",
487
+ "hasDynamicHelp": false,
488
+ "multiple": false,
489
+ "type": "option"
490
+ },
491
+ "seconds": {
492
+ "description": "Exit after this many seconds",
493
+ "name": "seconds",
494
+ "hasDynamicHelp": false,
495
+ "multiple": false,
496
+ "type": "option"
497
+ },
498
+ "since": {
499
+ "description": "Only show emails received on or after this date/time",
500
+ "name": "since",
501
+ "hasDynamicHelp": false,
502
+ "multiple": false,
503
+ "type": "option"
504
+ },
505
+ "spam-score-gte": {
506
+ "description": "Only show emails with spam score greater than or equal to this value",
507
+ "name": "spam-score-gte",
508
+ "hasDynamicHelp": false,
509
+ "multiple": false,
510
+ "type": "option"
511
+ },
512
+ "spam-score-lt": {
513
+ "description": "Only show emails with spam score below this value",
514
+ "name": "spam-score-lt",
515
+ "hasDynamicHelp": false,
516
+ "multiple": false,
517
+ "type": "option"
518
+ },
519
+ "subject": {
520
+ "description": "Full-text subject filter",
521
+ "name": "subject",
522
+ "hasDynamicHelp": false,
523
+ "multiple": false,
524
+ "type": "option"
525
+ },
526
+ "to": {
527
+ "description": "Filter by recipient address or domain",
528
+ "name": "to",
529
+ "hasDynamicHelp": false,
530
+ "multiple": false,
531
+ "type": "option"
532
+ }
533
+ },
534
+ "hasDynamicHelp": false,
535
+ "hiddenAliases": [],
536
+ "id": "emails:watch",
537
+ "pluginAlias": "@primitivedotdev/cli",
538
+ "pluginName": "@primitivedotdev/cli",
539
+ "pluginType": "core",
540
+ "strict": true,
541
+ "summary": "Watch inbound emails with filters",
542
+ "enableJsonFlag": false
543
+ },
544
+ "emails:wait": {
545
+ "aliases": [],
546
+ "args": {},
547
+ "description": "Poll until matching inbound emails arrive, printing each match as it is found.",
548
+ "examples": [
549
+ "<%= config.bin %> emails wait --to test@example.com",
550
+ "<%= config.bin %> emails wait --subject verify --number 5 --timeout 120",
551
+ "<%= config.bin %> emails wait --q 'domain:example.com' --table"
552
+ ],
553
+ "flags": {
554
+ "api-key": {
555
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
556
+ "env": "PRIMITIVE_API_KEY",
557
+ "name": "api-key",
558
+ "hasDynamicHelp": false,
559
+ "multiple": false,
560
+ "type": "option"
561
+ },
562
+ "api-base-url-1": {
563
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
564
+ "env": "PRIMITIVE_API_BASE_URL_1",
565
+ "hidden": true,
566
+ "name": "api-base-url-1",
567
+ "hasDynamicHelp": false,
568
+ "multiple": false,
569
+ "type": "option"
570
+ },
571
+ "api-base-url-2": {
572
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
573
+ "env": "PRIMITIVE_API_BASE_URL_2",
574
+ "hidden": true,
575
+ "name": "api-base-url-2",
576
+ "hasDynamicHelp": false,
577
+ "multiple": false,
578
+ "type": "option"
579
+ },
580
+ "body": {
581
+ "description": "Full-text body filter",
582
+ "name": "body",
583
+ "hasDynamicHelp": false,
584
+ "multiple": false,
585
+ "type": "option"
586
+ },
587
+ "domain": {
588
+ "description": "Filter by inbound email domain",
589
+ "name": "domain",
590
+ "hasDynamicHelp": false,
591
+ "multiple": false,
592
+ "type": "option"
593
+ },
594
+ "domain-id": {
595
+ "description": "Filter by domain UUID",
596
+ "name": "domain-id",
597
+ "hasDynamicHelp": false,
598
+ "multiple": false,
599
+ "type": "option"
600
+ },
601
+ "from": {
602
+ "description": "Filter by sender address or domain",
603
+ "name": "from",
604
+ "hasDynamicHelp": false,
605
+ "multiple": false,
606
+ "type": "option"
607
+ },
608
+ "has-attachment": {
609
+ "description": "Only match emails with one or more attachments",
610
+ "name": "has-attachment",
611
+ "allowNo": false,
612
+ "type": "boolean"
613
+ },
614
+ "include-existing": {
615
+ "description": "Start from existing matching emails instead of only new arrivals",
616
+ "name": "include-existing",
617
+ "allowNo": false,
618
+ "type": "boolean"
619
+ },
620
+ "interval": {
621
+ "description": "Seconds to wait between empty polls",
622
+ "name": "interval",
623
+ "default": 2,
624
+ "hasDynamicHelp": false,
625
+ "multiple": false,
626
+ "type": "option"
627
+ },
628
+ "number": {
629
+ "char": "n",
630
+ "description": "Exit successfully after this many matching emails",
631
+ "name": "number",
632
+ "default": 1,
633
+ "hasDynamicHelp": false,
634
+ "multiple": false,
635
+ "type": "option"
636
+ },
637
+ "page-size": {
638
+ "description": "Emails to fetch per poll (1-100)",
639
+ "name": "page-size",
640
+ "default": 50,
641
+ "hasDynamicHelp": false,
642
+ "multiple": false,
643
+ "type": "option"
644
+ },
645
+ "q": {
646
+ "description": "Full-text search DSL query",
647
+ "name": "q",
648
+ "hasDynamicHelp": false,
649
+ "multiple": false,
650
+ "type": "option"
651
+ },
652
+ "since": {
653
+ "description": "Only match emails received on or after this date/time",
654
+ "name": "since",
655
+ "hasDynamicHelp": false,
656
+ "multiple": false,
657
+ "type": "option"
658
+ },
659
+ "spam-score-gte": {
660
+ "description": "Only match emails with spam score greater than or equal to this value",
661
+ "name": "spam-score-gte",
662
+ "hasDynamicHelp": false,
663
+ "multiple": false,
664
+ "type": "option"
665
+ },
666
+ "spam-score-lt": {
667
+ "description": "Only match emails with spam score below this value",
668
+ "name": "spam-score-lt",
669
+ "hasDynamicHelp": false,
670
+ "multiple": false,
671
+ "type": "option"
672
+ },
673
+ "subject": {
674
+ "description": "Full-text subject filter",
675
+ "name": "subject",
676
+ "hasDynamicHelp": false,
677
+ "multiple": false,
678
+ "type": "option"
679
+ },
680
+ "table": {
681
+ "description": "Print a human-readable table instead of JSONL",
682
+ "name": "table",
683
+ "allowNo": false,
684
+ "type": "boolean"
685
+ },
686
+ "timeout": {
687
+ "description": "Seconds to wait before exiting nonzero; 0 waits forever",
688
+ "name": "timeout",
689
+ "default": 300,
690
+ "hasDynamicHelp": false,
691
+ "multiple": false,
692
+ "type": "option"
693
+ },
694
+ "to": {
695
+ "description": "Filter by recipient address or domain",
696
+ "name": "to",
697
+ "hasDynamicHelp": false,
698
+ "multiple": false,
699
+ "type": "option"
700
+ }
701
+ },
702
+ "hasDynamicHelp": false,
703
+ "hiddenAliases": [],
704
+ "id": "emails:wait",
705
+ "pluginAlias": "@primitivedotdev/cli",
706
+ "pluginName": "@primitivedotdev/cli",
707
+ "pluginType": "core",
708
+ "strict": true,
709
+ "summary": "Wait for matching inbound emails",
710
+ "enableJsonFlag": false
711
+ },
712
+ "functions:init": {
713
+ "aliases": [],
714
+ "args": {
715
+ "name": {
716
+ "description": "Function name. Lowercase letters, digits, hyphens, underscores. 1-63 chars. Used as the directory name (when --out-dir is not set) and as the package.json name.",
717
+ "name": "name",
718
+ "required": true
719
+ }
720
+ },
721
+ "description": "Scaffold a new Primitive Function project in ./<name>/ with handler.ts, package.json, build.mjs, tsconfig.json, .gitignore, and README.md.\n\n The scaffolded handler imports `createPrimitiveClient` from\n `@primitivedotdev/sdk/api` and demonstrates the canonical pattern:\n parse the email.received event, send a reply via the SDK, return a\n JSON envelope. The build script uses esbuild's JS API and emits\n ./dist/handler.js, ready to hand to `primitive functions:deploy --file`.\n\n Refuses to overwrite an existing directory. Use --out-dir to pick a\n different target path than ./<name>/.",
722
+ "examples": [
723
+ "<%= config.bin %> functions:init my-fn",
724
+ "<%= config.bin %> functions:init my-fn --out-dir ./functions/my-fn"
725
+ ],
726
+ "flags": {
727
+ "out-dir": {
728
+ "description": "Directory to scaffold into. Defaults to ./<name>/. Must not already exist.",
729
+ "name": "out-dir",
730
+ "hasDynamicHelp": false,
731
+ "multiple": false,
732
+ "type": "option"
733
+ }
734
+ },
735
+ "hasDynamicHelp": false,
736
+ "hiddenAliases": [],
737
+ "id": "functions:init",
738
+ "pluginAlias": "@primitivedotdev/cli",
739
+ "pluginName": "@primitivedotdev/cli",
740
+ "pluginType": "core",
741
+ "strict": true,
742
+ "summary": "Scaffold a new Primitive Function project ready for functions:deploy",
743
+ "enableJsonFlag": false
744
+ },
745
+ "functions:deploy": {
746
+ "aliases": [],
747
+ "args": {},
748
+ "description": "Deploy a new function from a bundled handler file. Agent-grade shortcut for functions:create-function.\n\n Reads the bundle off disk (--file) instead of forcing the caller to\n serialize the source into a JSON body. Use the underlying operation\n `functions:create-function` if you need the full flag surface\n (raw-body JSON, etc.).",
749
+ "examples": [
750
+ "<%= config.bin %> functions:deploy --name forwarder --file ./bundle.js",
751
+ "<%= config.bin %> functions:deploy --name forwarder --file ./bundle.js --source-map-file ./bundle.js.map"
752
+ ],
753
+ "flags": {
754
+ "api-key": {
755
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
756
+ "env": "PRIMITIVE_API_KEY",
757
+ "name": "api-key",
758
+ "hasDynamicHelp": false,
759
+ "multiple": false,
760
+ "type": "option"
761
+ },
762
+ "api-base-url-1": {
763
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
764
+ "env": "PRIMITIVE_API_BASE_URL_1",
765
+ "hidden": true,
766
+ "name": "api-base-url-1",
767
+ "hasDynamicHelp": false,
768
+ "multiple": false,
769
+ "type": "option"
770
+ },
771
+ "api-base-url-2": {
772
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
773
+ "env": "PRIMITIVE_API_BASE_URL_2",
774
+ "hidden": true,
775
+ "name": "api-base-url-2",
776
+ "hasDynamicHelp": false,
777
+ "multiple": false,
778
+ "type": "option"
779
+ },
780
+ "name": {
781
+ "description": "Slug-style name. Lowercase letters, digits, hyphens, underscores. 1-64 chars. Must be unique within the org.",
782
+ "name": "name",
783
+ "required": true,
784
+ "hasDynamicHelp": false,
785
+ "multiple": false,
786
+ "type": "option"
787
+ },
788
+ "file": {
789
+ "description": "Path to the bundled ESM handler file (single self-contained module). Loaded as the `code` body field.",
790
+ "name": "file",
791
+ "required": true,
792
+ "hasDynamicHelp": false,
793
+ "multiple": false,
794
+ "type": "option"
795
+ },
796
+ "source-map-file": {
797
+ "description": "Optional path to a source map for the bundle. Stored only on the runtime side and used to symbolicate stack traces.",
798
+ "name": "source-map-file",
799
+ "hasDynamicHelp": false,
800
+ "multiple": false,
801
+ "type": "option"
802
+ },
803
+ "time": {
804
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
805
+ "name": "time",
806
+ "allowNo": false,
807
+ "type": "boolean"
808
+ }
809
+ },
810
+ "hasDynamicHelp": false,
811
+ "hiddenAliases": [],
812
+ "id": "functions:deploy",
813
+ "pluginAlias": "@primitivedotdev/cli",
814
+ "pluginName": "@primitivedotdev/cli",
815
+ "pluginType": "core",
816
+ "strict": true,
817
+ "summary": "Deploy a new function from a bundled handler file",
818
+ "enableJsonFlag": false
819
+ },
820
+ "functions:redeploy": {
821
+ "aliases": [],
822
+ "args": {},
823
+ "description": "Update or redeploy a function from a bundled handler file. Agent-grade shortcut for functions:update-function.\n\n Use to push a new bundle OR to refresh secret bindings into the\n running handler. The same file is fine for both: the deploy reads\n the bindings table fresh on every call, so passing the existing\n bundle picks up any secret writes since the last deploy.",
824
+ "examples": [
825
+ "<%= config.bin %> functions:redeploy --id <fn-id> --file ./bundle.js",
826
+ "<%= config.bin %> functions:redeploy --id <fn-id> --file ./bundle.js --source-map-file ./bundle.js.map"
827
+ ],
828
+ "flags": {
829
+ "api-key": {
830
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
831
+ "env": "PRIMITIVE_API_KEY",
832
+ "name": "api-key",
833
+ "hasDynamicHelp": false,
834
+ "multiple": false,
835
+ "type": "option"
836
+ },
837
+ "api-base-url-1": {
838
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
839
+ "env": "PRIMITIVE_API_BASE_URL_1",
840
+ "hidden": true,
841
+ "name": "api-base-url-1",
842
+ "hasDynamicHelp": false,
843
+ "multiple": false,
844
+ "type": "option"
845
+ },
846
+ "api-base-url-2": {
847
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
848
+ "env": "PRIMITIVE_API_BASE_URL_2",
849
+ "hidden": true,
850
+ "name": "api-base-url-2",
851
+ "hasDynamicHelp": false,
852
+ "multiple": false,
853
+ "type": "option"
854
+ },
855
+ "id": {
856
+ "description": "Function id (UUID). The function must already exist.",
857
+ "name": "id",
858
+ "required": true,
859
+ "hasDynamicHelp": false,
860
+ "multiple": false,
861
+ "type": "option"
862
+ },
863
+ "file": {
864
+ "description": "Path to the bundled ESM handler file. Loaded as the `code` body field.",
865
+ "name": "file",
866
+ "required": true,
867
+ "hasDynamicHelp": false,
868
+ "multiple": false,
869
+ "type": "option"
870
+ },
871
+ "source-map-file": {
872
+ "description": "Optional path to a source map for the bundle. Used to symbolicate stack traces in the function's logs.",
873
+ "name": "source-map-file",
874
+ "hasDynamicHelp": false,
875
+ "multiple": false,
876
+ "type": "option"
877
+ },
878
+ "time": {
879
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
880
+ "name": "time",
881
+ "allowNo": false,
882
+ "type": "boolean"
883
+ }
884
+ },
885
+ "hasDynamicHelp": false,
886
+ "hiddenAliases": [],
887
+ "id": "functions:redeploy",
888
+ "pluginAlias": "@primitivedotdev/cli",
889
+ "pluginName": "@primitivedotdev/cli",
890
+ "pluginType": "core",
891
+ "strict": true,
892
+ "summary": "Redeploy a function from a bundled handler file",
893
+ "enableJsonFlag": false
894
+ },
895
+ "functions:set-secret": {
896
+ "aliases": [],
897
+ "args": {},
898
+ "description": "Write a function secret and optionally redeploy so the new value lands in the running handler. Agent-grade shortcut for functions:set-function-secret + functions:redeploy.\n\n Without --redeploy this is a plain secret upsert: the value is\n encrypted at rest but is NOT visible to the running handler until\n the next deploy. Pass --redeploy to re-run the deploy with the\n function's current code in the same call, which refreshes the\n binding set with the value you just wrote.\n\n Keys must match `^[A-Z_][A-Z0-9_]*$` (uppercase letters, digits,\n underscores; first character is a letter or underscore). System-\n managed keys are reserved and rejected.",
899
+ "examples": [
900
+ "<%= config.bin %> functions:set-secret --id <fn-id> --key API_TOKEN --value abc123",
901
+ "<%= config.bin %> functions:set-secret --id <fn-id> --key API_TOKEN --value abc123 --redeploy"
902
+ ],
903
+ "flags": {
904
+ "api-key": {
905
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
906
+ "env": "PRIMITIVE_API_KEY",
907
+ "name": "api-key",
908
+ "hasDynamicHelp": false,
909
+ "multiple": false,
910
+ "type": "option"
911
+ },
912
+ "api-base-url-1": {
913
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
914
+ "env": "PRIMITIVE_API_BASE_URL_1",
915
+ "hidden": true,
916
+ "name": "api-base-url-1",
917
+ "hasDynamicHelp": false,
918
+ "multiple": false,
919
+ "type": "option"
920
+ },
921
+ "api-base-url-2": {
922
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
923
+ "env": "PRIMITIVE_API_BASE_URL_2",
924
+ "hidden": true,
925
+ "name": "api-base-url-2",
926
+ "hasDynamicHelp": false,
927
+ "multiple": false,
928
+ "type": "option"
929
+ },
930
+ "id": {
931
+ "description": "Function id (UUID). The function must already exist.",
932
+ "name": "id",
933
+ "required": true,
934
+ "hasDynamicHelp": false,
935
+ "multiple": false,
936
+ "type": "option"
937
+ },
938
+ "key": {
939
+ "description": "Secret key. Uppercase letters, digits, underscores; must start with a letter or underscore. System-managed keys are reserved.",
940
+ "name": "key",
941
+ "required": true,
942
+ "hasDynamicHelp": false,
943
+ "multiple": false,
944
+ "type": "option"
945
+ },
946
+ "value": {
947
+ "description": "Secret value (up to 4096 UTF-8 bytes). Encrypted at rest.",
948
+ "name": "value",
949
+ "required": true,
950
+ "hasDynamicHelp": false,
951
+ "multiple": false,
952
+ "type": "option"
953
+ },
954
+ "redeploy": {
955
+ "description": "Also redeploy the function with its current code so the new value lands in the running handler. Without this, the secret is written but not visible to the handler until the next deploy. Note: source maps are stored only on the runtime side and getFunction does not return them, so this redeploy drops any previously-uploaded source map. If preserving stack-trace symbolication matters, use `functions:redeploy --file <bundle.js> --source-map-file <bundle.js.map>` instead.",
956
+ "name": "redeploy",
957
+ "allowNo": false,
958
+ "type": "boolean"
959
+ },
960
+ "time": {
961
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
962
+ "name": "time",
963
+ "allowNo": false,
964
+ "type": "boolean"
965
+ }
966
+ },
967
+ "hasDynamicHelp": false,
968
+ "hiddenAliases": [],
969
+ "id": "functions:set-secret",
970
+ "pluginAlias": "@primitivedotdev/cli",
971
+ "pluginName": "@primitivedotdev/cli",
972
+ "pluginType": "core",
973
+ "strict": true,
974
+ "summary": "Write a function secret (optionally redeploying to push it live)",
975
+ "enableJsonFlag": false
976
+ },
977
+ "account:get-account": {
978
+ "aliases": [],
979
+ "args": {},
980
+ "description": "GET /account",
981
+ "flags": {
982
+ "api-key": {
983
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
984
+ "env": "PRIMITIVE_API_KEY",
985
+ "name": "api-key",
986
+ "hasDynamicHelp": false,
987
+ "multiple": false,
988
+ "type": "option"
989
+ },
990
+ "api-base-url-1": {
991
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
992
+ "env": "PRIMITIVE_API_BASE_URL_1",
993
+ "hidden": true,
994
+ "name": "api-base-url-1",
995
+ "hasDynamicHelp": false,
996
+ "multiple": false,
997
+ "type": "option"
998
+ },
999
+ "api-base-url-2": {
1000
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1001
+ "env": "PRIMITIVE_API_BASE_URL_2",
1002
+ "hidden": true,
1003
+ "name": "api-base-url-2",
1004
+ "hasDynamicHelp": false,
1005
+ "multiple": false,
1006
+ "type": "option"
1007
+ },
1008
+ "time": {
1009
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1010
+ "name": "time",
1011
+ "allowNo": false,
1012
+ "type": "boolean"
1013
+ }
1014
+ },
1015
+ "hasDynamicHelp": false,
1016
+ "hiddenAliases": [],
1017
+ "id": "account:get-account",
1018
+ "pluginAlias": "@primitivedotdev/cli",
1019
+ "pluginName": "@primitivedotdev/cli",
1020
+ "pluginType": "core",
1021
+ "strict": true,
1022
+ "summary": "Get account info",
1023
+ "enableJsonFlag": false
1024
+ },
1025
+ "account:get-storage-stats": {
1026
+ "aliases": [],
1027
+ "args": {},
1028
+ "description": "GET /account/storage",
1029
+ "flags": {
1030
+ "api-key": {
1031
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1032
+ "env": "PRIMITIVE_API_KEY",
1033
+ "name": "api-key",
1034
+ "hasDynamicHelp": false,
1035
+ "multiple": false,
1036
+ "type": "option"
1037
+ },
1038
+ "api-base-url-1": {
1039
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1040
+ "env": "PRIMITIVE_API_BASE_URL_1",
1041
+ "hidden": true,
1042
+ "name": "api-base-url-1",
1043
+ "hasDynamicHelp": false,
1044
+ "multiple": false,
1045
+ "type": "option"
1046
+ },
1047
+ "api-base-url-2": {
1048
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1049
+ "env": "PRIMITIVE_API_BASE_URL_2",
1050
+ "hidden": true,
1051
+ "name": "api-base-url-2",
1052
+ "hasDynamicHelp": false,
1053
+ "multiple": false,
1054
+ "type": "option"
1055
+ },
1056
+ "time": {
1057
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1058
+ "name": "time",
1059
+ "allowNo": false,
1060
+ "type": "boolean"
1061
+ }
1062
+ },
1063
+ "hasDynamicHelp": false,
1064
+ "hiddenAliases": [],
1065
+ "id": "account:get-storage-stats",
1066
+ "pluginAlias": "@primitivedotdev/cli",
1067
+ "pluginName": "@primitivedotdev/cli",
1068
+ "pluginType": "core",
1069
+ "strict": true,
1070
+ "summary": "Get storage usage",
1071
+ "enableJsonFlag": false
1072
+ },
1073
+ "account:get-webhook-secret": {
1074
+ "aliases": [],
1075
+ "args": {},
1076
+ "description": "Returns the webhook signing secret for your account. If no\nsecret exists yet, one is generated automatically on first\naccess.\n\nSigning is account-scoped, not per-endpoint. Every webhook\ndelivery from any of your registered endpoints is signed\nwith this single secret. Rotate via\n`POST /account/webhook-secret/rotate`.\n\n**Secret format**: the returned string looks base64-shaped\n(e.g. `XNHBBW8VqoBjRfNs1tkZj11jTk...`) but is NOT base64.\nUse it AS-IS as a UTF-8 string when computing HMAC over a\ndelivery body. Base64-decoding before HMAC will silently\nproduce mismatched signatures.\n\nSee the API-level \"Webhook signing\" section for the full\nwire format (header name, signed string shape, hash algo,\ntolerance) including a language-agnostic verification\nrecipe.\n",
1077
+ "flags": {
1078
+ "api-key": {
1079
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1080
+ "env": "PRIMITIVE_API_KEY",
1081
+ "name": "api-key",
1082
+ "hasDynamicHelp": false,
1083
+ "multiple": false,
1084
+ "type": "option"
1085
+ },
1086
+ "api-base-url-1": {
1087
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1088
+ "env": "PRIMITIVE_API_BASE_URL_1",
1089
+ "hidden": true,
1090
+ "name": "api-base-url-1",
1091
+ "hasDynamicHelp": false,
1092
+ "multiple": false,
1093
+ "type": "option"
1094
+ },
1095
+ "api-base-url-2": {
1096
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1097
+ "env": "PRIMITIVE_API_BASE_URL_2",
1098
+ "hidden": true,
1099
+ "name": "api-base-url-2",
1100
+ "hasDynamicHelp": false,
1101
+ "multiple": false,
1102
+ "type": "option"
1103
+ },
1104
+ "time": {
1105
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1106
+ "name": "time",
1107
+ "allowNo": false,
1108
+ "type": "boolean"
1109
+ }
1110
+ },
1111
+ "hasDynamicHelp": false,
1112
+ "hiddenAliases": [],
1113
+ "id": "account:get-webhook-secret",
1114
+ "pluginAlias": "@primitivedotdev/cli",
1115
+ "pluginName": "@primitivedotdev/cli",
1116
+ "pluginType": "core",
1117
+ "strict": true,
1118
+ "summary": "Get webhook signing secret",
1119
+ "enableJsonFlag": false
1120
+ },
1121
+ "account:rotate-webhook-secret": {
1122
+ "aliases": [],
1123
+ "args": {},
1124
+ "description": "Generates a new webhook signing secret, replacing the current one.\nRate limited to once per 60 minutes.\n",
1125
+ "flags": {
1126
+ "api-key": {
1127
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1128
+ "env": "PRIMITIVE_API_KEY",
1129
+ "name": "api-key",
1130
+ "hasDynamicHelp": false,
1131
+ "multiple": false,
1132
+ "type": "option"
1133
+ },
1134
+ "api-base-url-1": {
1135
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1136
+ "env": "PRIMITIVE_API_BASE_URL_1",
1137
+ "hidden": true,
1138
+ "name": "api-base-url-1",
1139
+ "hasDynamicHelp": false,
1140
+ "multiple": false,
1141
+ "type": "option"
1142
+ },
1143
+ "api-base-url-2": {
1144
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1145
+ "env": "PRIMITIVE_API_BASE_URL_2",
1146
+ "hidden": true,
1147
+ "name": "api-base-url-2",
1148
+ "hasDynamicHelp": false,
1149
+ "multiple": false,
1150
+ "type": "option"
1151
+ },
1152
+ "time": {
1153
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1154
+ "name": "time",
1155
+ "allowNo": false,
1156
+ "type": "boolean"
1157
+ }
1158
+ },
1159
+ "hasDynamicHelp": false,
1160
+ "hiddenAliases": [],
1161
+ "id": "account:rotate-webhook-secret",
1162
+ "pluginAlias": "@primitivedotdev/cli",
1163
+ "pluginName": "@primitivedotdev/cli",
1164
+ "pluginType": "core",
1165
+ "strict": true,
1166
+ "summary": "Rotate webhook signing secret",
1167
+ "enableJsonFlag": false
1168
+ },
1169
+ "account:update-account": {
1170
+ "aliases": [],
1171
+ "args": {},
1172
+ "description": "PATCH /account",
1173
+ "flags": {
1174
+ "api-key": {
1175
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1176
+ "env": "PRIMITIVE_API_KEY",
1177
+ "name": "api-key",
1178
+ "hasDynamicHelp": false,
1179
+ "multiple": false,
1180
+ "type": "option"
1181
+ },
1182
+ "api-base-url-1": {
1183
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1184
+ "env": "PRIMITIVE_API_BASE_URL_1",
1185
+ "hidden": true,
1186
+ "name": "api-base-url-1",
1187
+ "hasDynamicHelp": false,
1188
+ "multiple": false,
1189
+ "type": "option"
1190
+ },
1191
+ "api-base-url-2": {
1192
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1193
+ "env": "PRIMITIVE_API_BASE_URL_2",
1194
+ "hidden": true,
1195
+ "name": "api-base-url-2",
1196
+ "hasDynamicHelp": false,
1197
+ "multiple": false,
1198
+ "type": "option"
1199
+ },
1200
+ "time": {
1201
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1202
+ "name": "time",
1203
+ "allowNo": false,
1204
+ "type": "boolean"
1205
+ },
1206
+ "raw-body": {
1207
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
1208
+ "name": "raw-body",
1209
+ "hasDynamicHelp": false,
1210
+ "multiple": false,
1211
+ "type": "option"
1212
+ },
1213
+ "body-file": {
1214
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
1215
+ "name": "body-file",
1216
+ "hasDynamicHelp": false,
1217
+ "multiple": false,
1218
+ "type": "option"
1219
+ },
1220
+ "discard-content-on-webhook-confirmed": {
1221
+ "description": "Whether to discard email content after the webhook endpoint confirms receipt.",
1222
+ "name": "discard-content-on-webhook-confirmed",
1223
+ "allowNo": false,
1224
+ "type": "boolean"
1225
+ },
1226
+ "spam-threshold": {
1227
+ "description": "Global spam score threshold (0-15). Emails scoring above this are rejected. Set to null to disable.",
1228
+ "name": "spam-threshold",
1229
+ "hasDynamicHelp": false,
1230
+ "multiple": false,
1231
+ "type": "option"
1232
+ }
1233
+ },
1234
+ "hasDynamicHelp": false,
1235
+ "hiddenAliases": [],
1236
+ "id": "account:update-account",
1237
+ "pluginAlias": "@primitivedotdev/cli",
1238
+ "pluginName": "@primitivedotdev/cli",
1239
+ "pluginType": "core",
1240
+ "strict": true,
1241
+ "summary": "Update account settings",
1242
+ "enableJsonFlag": false
1243
+ },
1244
+ "cli:cli-logout": {
1245
+ "aliases": [],
1246
+ "args": {},
1247
+ "description": "Revokes the API key used to authenticate the request. CLI clients use\nthis endpoint during `primitive logout` before removing local credentials.\n",
1248
+ "flags": {
1249
+ "api-key": {
1250
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1251
+ "env": "PRIMITIVE_API_KEY",
1252
+ "name": "api-key",
1253
+ "hasDynamicHelp": false,
1254
+ "multiple": false,
1255
+ "type": "option"
1256
+ },
1257
+ "api-base-url-1": {
1258
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1259
+ "env": "PRIMITIVE_API_BASE_URL_1",
1260
+ "hidden": true,
1261
+ "name": "api-base-url-1",
1262
+ "hasDynamicHelp": false,
1263
+ "multiple": false,
1264
+ "type": "option"
1265
+ },
1266
+ "api-base-url-2": {
1267
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1268
+ "env": "PRIMITIVE_API_BASE_URL_2",
1269
+ "hidden": true,
1270
+ "name": "api-base-url-2",
1271
+ "hasDynamicHelp": false,
1272
+ "multiple": false,
1273
+ "type": "option"
1274
+ },
1275
+ "time": {
1276
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1277
+ "name": "time",
1278
+ "allowNo": false,
1279
+ "type": "boolean"
1280
+ },
1281
+ "raw-body": {
1282
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
1283
+ "name": "raw-body",
1284
+ "hasDynamicHelp": false,
1285
+ "multiple": false,
1286
+ "type": "option"
1287
+ },
1288
+ "body-file": {
1289
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
1290
+ "name": "body-file",
1291
+ "hasDynamicHelp": false,
1292
+ "multiple": false,
1293
+ "type": "option"
1294
+ },
1295
+ "key-id": {
1296
+ "description": "Optional key id guard; when provided it must match the authenticated API key",
1297
+ "name": "key-id",
1298
+ "hasDynamicHelp": false,
1299
+ "multiple": false,
1300
+ "type": "option"
1301
+ }
1302
+ },
1303
+ "hasDynamicHelp": false,
1304
+ "hiddenAliases": [],
1305
+ "id": "cli:cli-logout",
1306
+ "pluginAlias": "@primitivedotdev/cli",
1307
+ "pluginName": "@primitivedotdev/cli",
1308
+ "pluginType": "core",
1309
+ "strict": true,
1310
+ "summary": "Revoke the current CLI API key",
1311
+ "enableJsonFlag": false
1312
+ },
1313
+ "cli:poll-cli-login": {
1314
+ "aliases": [],
1315
+ "args": {},
1316
+ "description": "Polls a CLI login session until the browser approval either succeeds,\nis denied, expires, or is polled too quickly. The API key is generated\nonly after approval and is returned exactly once.\n",
1317
+ "flags": {
1318
+ "api-key": {
1319
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1320
+ "env": "PRIMITIVE_API_KEY",
1321
+ "name": "api-key",
1322
+ "hasDynamicHelp": false,
1323
+ "multiple": false,
1324
+ "type": "option"
1325
+ },
1326
+ "api-base-url-1": {
1327
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1328
+ "env": "PRIMITIVE_API_BASE_URL_1",
1329
+ "hidden": true,
1330
+ "name": "api-base-url-1",
1331
+ "hasDynamicHelp": false,
1332
+ "multiple": false,
1333
+ "type": "option"
1334
+ },
1335
+ "api-base-url-2": {
1336
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1337
+ "env": "PRIMITIVE_API_BASE_URL_2",
1338
+ "hidden": true,
1339
+ "name": "api-base-url-2",
1340
+ "hasDynamicHelp": false,
1341
+ "multiple": false,
1342
+ "type": "option"
1343
+ },
1344
+ "time": {
1345
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1346
+ "name": "time",
1347
+ "allowNo": false,
1348
+ "type": "boolean"
1349
+ },
1350
+ "raw-body": {
1351
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
1352
+ "name": "raw-body",
1353
+ "hasDynamicHelp": false,
1354
+ "multiple": false,
1355
+ "type": "option"
1356
+ },
1357
+ "body-file": {
1358
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
1359
+ "name": "body-file",
1360
+ "hasDynamicHelp": false,
1361
+ "multiple": false,
1362
+ "type": "option"
1363
+ },
1364
+ "device-code": {
1365
+ "description": "device_code",
1366
+ "name": "device-code",
1367
+ "hasDynamicHelp": false,
1368
+ "multiple": false,
1369
+ "type": "option"
1370
+ }
1371
+ },
1372
+ "hasDynamicHelp": false,
1373
+ "hiddenAliases": [],
1374
+ "id": "cli:poll-cli-login",
1375
+ "pluginAlias": "@primitivedotdev/cli",
1376
+ "pluginName": "@primitivedotdev/cli",
1377
+ "pluginType": "core",
1378
+ "strict": true,
1379
+ "summary": "Poll CLI browser login",
1380
+ "enableJsonFlag": false
1381
+ },
1382
+ "cli:start-cli-login": {
1383
+ "aliases": [],
1384
+ "args": {},
1385
+ "description": "Starts a browser-assisted CLI login session. The response includes a\ndevice code for polling and a user code that the user approves in the\nbrowser. This endpoint does not require an API key.\n\n\nBody fields requiring --raw-body JSON (these are not exposed as flags):\n metadata object Optional client metadata stored with the login session; serialized JSON mus...\n(* = required. Scalar body fields are exposed as individual --flag-name flags; see FLAGS above.)",
1386
+ "flags": {
1387
+ "api-key": {
1388
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1389
+ "env": "PRIMITIVE_API_KEY",
1390
+ "name": "api-key",
1391
+ "hasDynamicHelp": false,
1392
+ "multiple": false,
1393
+ "type": "option"
1394
+ },
1395
+ "api-base-url-1": {
1396
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1397
+ "env": "PRIMITIVE_API_BASE_URL_1",
1398
+ "hidden": true,
1399
+ "name": "api-base-url-1",
1400
+ "hasDynamicHelp": false,
1401
+ "multiple": false,
1402
+ "type": "option"
1403
+ },
1404
+ "api-base-url-2": {
1405
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1406
+ "env": "PRIMITIVE_API_BASE_URL_2",
1407
+ "hidden": true,
1408
+ "name": "api-base-url-2",
1409
+ "hasDynamicHelp": false,
1410
+ "multiple": false,
1411
+ "type": "option"
1412
+ },
1413
+ "time": {
1414
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1415
+ "name": "time",
1416
+ "allowNo": false,
1417
+ "type": "boolean"
1418
+ },
1419
+ "raw-body": {
1420
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
1421
+ "name": "raw-body",
1422
+ "hasDynamicHelp": false,
1423
+ "multiple": false,
1424
+ "type": "option"
1425
+ },
1426
+ "body-file": {
1427
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
1428
+ "name": "body-file",
1429
+ "hasDynamicHelp": false,
1430
+ "multiple": false,
1431
+ "type": "option"
1432
+ },
1433
+ "device-name": {
1434
+ "description": "Human-readable device name shown during browser approval",
1435
+ "name": "device-name",
1436
+ "hasDynamicHelp": false,
1437
+ "multiple": false,
1438
+ "type": "option"
1439
+ }
1440
+ },
1441
+ "hasDynamicHelp": false,
1442
+ "hiddenAliases": [],
1443
+ "id": "cli:start-cli-login",
1444
+ "pluginAlias": "@primitivedotdev/cli",
1445
+ "pluginName": "@primitivedotdev/cli",
1446
+ "pluginType": "core",
1447
+ "strict": true,
1448
+ "summary": "Start CLI browser login",
1449
+ "enableJsonFlag": false
1450
+ },
1451
+ "domains:add-domain": {
1452
+ "aliases": [],
1453
+ "args": {},
1454
+ "description": "Creates an unverified domain claim. You will receive a\n`verification_token` to add as a DNS TXT record before\ncalling the verify endpoint.\n",
1455
+ "flags": {
1456
+ "api-key": {
1457
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1458
+ "env": "PRIMITIVE_API_KEY",
1459
+ "name": "api-key",
1460
+ "hasDynamicHelp": false,
1461
+ "multiple": false,
1462
+ "type": "option"
1463
+ },
1464
+ "api-base-url-1": {
1465
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1466
+ "env": "PRIMITIVE_API_BASE_URL_1",
1467
+ "hidden": true,
1468
+ "name": "api-base-url-1",
1469
+ "hasDynamicHelp": false,
1470
+ "multiple": false,
1471
+ "type": "option"
1472
+ },
1473
+ "api-base-url-2": {
1474
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1475
+ "env": "PRIMITIVE_API_BASE_URL_2",
1476
+ "hidden": true,
1477
+ "name": "api-base-url-2",
1478
+ "hasDynamicHelp": false,
1479
+ "multiple": false,
1480
+ "type": "option"
1481
+ },
1482
+ "time": {
1483
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1484
+ "name": "time",
1485
+ "allowNo": false,
1486
+ "type": "boolean"
1487
+ },
1488
+ "raw-body": {
1489
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
1490
+ "name": "raw-body",
1491
+ "hasDynamicHelp": false,
1492
+ "multiple": false,
1493
+ "type": "option"
1494
+ },
1495
+ "body-file": {
1496
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
1497
+ "name": "body-file",
1498
+ "hasDynamicHelp": false,
1499
+ "multiple": false,
1500
+ "type": "option"
1501
+ },
1502
+ "domain": {
1503
+ "description": "The domain name to claim (e.g. \"example.com\")",
1504
+ "name": "domain",
1505
+ "hasDynamicHelp": false,
1506
+ "multiple": false,
1507
+ "type": "option"
1508
+ }
1509
+ },
1510
+ "hasDynamicHelp": false,
1511
+ "hiddenAliases": [],
1512
+ "id": "domains:add-domain",
1513
+ "pluginAlias": "@primitivedotdev/cli",
1514
+ "pluginName": "@primitivedotdev/cli",
1515
+ "pluginType": "core",
1516
+ "strict": true,
1517
+ "summary": "Claim a new domain",
1518
+ "enableJsonFlag": false
1519
+ },
1520
+ "domains:delete-domain": {
1521
+ "aliases": [],
1522
+ "args": {},
1523
+ "description": "Deletes a verified or unverified domain claim.",
1524
+ "flags": {
1525
+ "api-key": {
1526
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1527
+ "env": "PRIMITIVE_API_KEY",
1528
+ "name": "api-key",
1529
+ "hasDynamicHelp": false,
1530
+ "multiple": false,
1531
+ "type": "option"
1532
+ },
1533
+ "api-base-url-1": {
1534
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1535
+ "env": "PRIMITIVE_API_BASE_URL_1",
1536
+ "hidden": true,
1537
+ "name": "api-base-url-1",
1538
+ "hasDynamicHelp": false,
1539
+ "multiple": false,
1540
+ "type": "option"
1541
+ },
1542
+ "api-base-url-2": {
1543
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1544
+ "env": "PRIMITIVE_API_BASE_URL_2",
1545
+ "hidden": true,
1546
+ "name": "api-base-url-2",
1547
+ "hasDynamicHelp": false,
1548
+ "multiple": false,
1549
+ "type": "option"
1550
+ },
1551
+ "time": {
1552
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1553
+ "name": "time",
1554
+ "allowNo": false,
1555
+ "type": "boolean"
1556
+ },
1557
+ "id": {
1558
+ "description": "Resource UUID",
1559
+ "name": "id",
1560
+ "required": true,
1561
+ "hasDynamicHelp": false,
1562
+ "multiple": false,
1563
+ "type": "option"
1564
+ }
1565
+ },
1566
+ "hasDynamicHelp": false,
1567
+ "hiddenAliases": [],
1568
+ "id": "domains:delete-domain",
1569
+ "pluginAlias": "@primitivedotdev/cli",
1570
+ "pluginName": "@primitivedotdev/cli",
1571
+ "pluginType": "core",
1572
+ "strict": true,
1573
+ "summary": "Delete a domain",
1574
+ "enableJsonFlag": false
1575
+ },
1576
+ "domains:list-domains": {
1577
+ "aliases": [],
1578
+ "args": {},
1579
+ "description": "Returns all verified and unverified domains for your organization,\nsorted by creation date (newest first). Each domain includes a\n`verified` boolean to distinguish between the two states.\n",
1580
+ "flags": {
1581
+ "api-key": {
1582
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1583
+ "env": "PRIMITIVE_API_KEY",
1584
+ "name": "api-key",
1585
+ "hasDynamicHelp": false,
1586
+ "multiple": false,
1587
+ "type": "option"
1588
+ },
1589
+ "api-base-url-1": {
1590
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1591
+ "env": "PRIMITIVE_API_BASE_URL_1",
1592
+ "hidden": true,
1593
+ "name": "api-base-url-1",
1594
+ "hasDynamicHelp": false,
1595
+ "multiple": false,
1596
+ "type": "option"
1597
+ },
1598
+ "api-base-url-2": {
1599
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1600
+ "env": "PRIMITIVE_API_BASE_URL_2",
1601
+ "hidden": true,
1602
+ "name": "api-base-url-2",
1603
+ "hasDynamicHelp": false,
1604
+ "multiple": false,
1605
+ "type": "option"
1606
+ },
1607
+ "time": {
1608
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1609
+ "name": "time",
1610
+ "allowNo": false,
1611
+ "type": "boolean"
1612
+ }
1613
+ },
1614
+ "hasDynamicHelp": false,
1615
+ "hiddenAliases": [],
1616
+ "id": "domains:list-domains",
1617
+ "pluginAlias": "@primitivedotdev/cli",
1618
+ "pluginName": "@primitivedotdev/cli",
1619
+ "pluginType": "core",
1620
+ "strict": true,
1621
+ "summary": "List all domains",
1622
+ "enableJsonFlag": false
1623
+ },
1624
+ "domains:update-domain": {
1625
+ "aliases": [],
1626
+ "args": {},
1627
+ "description": "Update a verified domain's settings. Only verified domains can be\nupdated. Per-domain spam thresholds require a Pro plan.\n",
1628
+ "flags": {
1629
+ "api-key": {
1630
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1631
+ "env": "PRIMITIVE_API_KEY",
1632
+ "name": "api-key",
1633
+ "hasDynamicHelp": false,
1634
+ "multiple": false,
1635
+ "type": "option"
1636
+ },
1637
+ "api-base-url-1": {
1638
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1639
+ "env": "PRIMITIVE_API_BASE_URL_1",
1640
+ "hidden": true,
1641
+ "name": "api-base-url-1",
1642
+ "hasDynamicHelp": false,
1643
+ "multiple": false,
1644
+ "type": "option"
1645
+ },
1646
+ "api-base-url-2": {
1647
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1648
+ "env": "PRIMITIVE_API_BASE_URL_2",
1649
+ "hidden": true,
1650
+ "name": "api-base-url-2",
1651
+ "hasDynamicHelp": false,
1652
+ "multiple": false,
1653
+ "type": "option"
1654
+ },
1655
+ "time": {
1656
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1657
+ "name": "time",
1658
+ "allowNo": false,
1659
+ "type": "boolean"
1660
+ },
1661
+ "id": {
1662
+ "description": "Resource UUID",
1663
+ "name": "id",
1664
+ "required": true,
1665
+ "hasDynamicHelp": false,
1666
+ "multiple": false,
1667
+ "type": "option"
1668
+ },
1669
+ "raw-body": {
1670
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
1671
+ "name": "raw-body",
1672
+ "hasDynamicHelp": false,
1673
+ "multiple": false,
1674
+ "type": "option"
1675
+ },
1676
+ "body-file": {
1677
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
1678
+ "name": "body-file",
1679
+ "hasDynamicHelp": false,
1680
+ "multiple": false,
1681
+ "type": "option"
1682
+ },
1683
+ "is-active": {
1684
+ "description": "Whether the domain accepts incoming emails",
1685
+ "name": "is-active",
1686
+ "allowNo": false,
1687
+ "type": "boolean"
1688
+ },
1689
+ "spam-threshold": {
1690
+ "description": "Per-domain spam threshold override (Pro plan required)",
1691
+ "name": "spam-threshold",
1692
+ "hasDynamicHelp": false,
1693
+ "multiple": false,
1694
+ "type": "option"
1695
+ }
1696
+ },
1697
+ "hasDynamicHelp": false,
1698
+ "hiddenAliases": [],
1699
+ "id": "domains:update-domain",
1700
+ "pluginAlias": "@primitivedotdev/cli",
1701
+ "pluginName": "@primitivedotdev/cli",
1702
+ "pluginType": "core",
1703
+ "strict": true,
1704
+ "summary": "Update domain settings",
1705
+ "enableJsonFlag": false
1706
+ },
1707
+ "domains:verify-domain": {
1708
+ "aliases": [],
1709
+ "args": {},
1710
+ "description": "Checks DNS records (MX and TXT) to verify domain ownership.\nOn success, the domain is promoted from unverified to verified.\nOn failure, returns which checks passed and which failed.\n",
1711
+ "flags": {
1712
+ "api-key": {
1713
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1714
+ "env": "PRIMITIVE_API_KEY",
1715
+ "name": "api-key",
1716
+ "hasDynamicHelp": false,
1717
+ "multiple": false,
1718
+ "type": "option"
1719
+ },
1720
+ "api-base-url-1": {
1721
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1722
+ "env": "PRIMITIVE_API_BASE_URL_1",
1723
+ "hidden": true,
1724
+ "name": "api-base-url-1",
1725
+ "hasDynamicHelp": false,
1726
+ "multiple": false,
1727
+ "type": "option"
1728
+ },
1729
+ "api-base-url-2": {
1730
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1731
+ "env": "PRIMITIVE_API_BASE_URL_2",
1732
+ "hidden": true,
1733
+ "name": "api-base-url-2",
1734
+ "hasDynamicHelp": false,
1735
+ "multiple": false,
1736
+ "type": "option"
1737
+ },
1738
+ "time": {
1739
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1740
+ "name": "time",
1741
+ "allowNo": false,
1742
+ "type": "boolean"
1743
+ },
1744
+ "id": {
1745
+ "description": "Resource UUID",
1746
+ "name": "id",
1747
+ "required": true,
1748
+ "hasDynamicHelp": false,
1749
+ "multiple": false,
1750
+ "type": "option"
1751
+ }
1752
+ },
1753
+ "hasDynamicHelp": false,
1754
+ "hiddenAliases": [],
1755
+ "id": "domains:verify-domain",
1756
+ "pluginAlias": "@primitivedotdev/cli",
1757
+ "pluginName": "@primitivedotdev/cli",
1758
+ "pluginType": "core",
1759
+ "strict": true,
1760
+ "summary": "Verify domain ownership",
1761
+ "enableJsonFlag": false
1762
+ },
1763
+ "emails:delete-email": {
1764
+ "aliases": [],
1765
+ "args": {},
1766
+ "description": "DELETE /emails/{id}",
1767
+ "flags": {
1768
+ "api-key": {
1769
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1770
+ "env": "PRIMITIVE_API_KEY",
1771
+ "name": "api-key",
1772
+ "hasDynamicHelp": false,
1773
+ "multiple": false,
1774
+ "type": "option"
1775
+ },
1776
+ "api-base-url-1": {
1777
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1778
+ "env": "PRIMITIVE_API_BASE_URL_1",
1779
+ "hidden": true,
1780
+ "name": "api-base-url-1",
1781
+ "hasDynamicHelp": false,
1782
+ "multiple": false,
1783
+ "type": "option"
1784
+ },
1785
+ "api-base-url-2": {
1786
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1787
+ "env": "PRIMITIVE_API_BASE_URL_2",
1788
+ "hidden": true,
1789
+ "name": "api-base-url-2",
1790
+ "hasDynamicHelp": false,
1791
+ "multiple": false,
1792
+ "type": "option"
1793
+ },
1794
+ "time": {
1795
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1796
+ "name": "time",
1797
+ "allowNo": false,
1798
+ "type": "boolean"
1799
+ },
1800
+ "id": {
1801
+ "description": "Resource UUID",
1802
+ "name": "id",
1803
+ "required": true,
1804
+ "hasDynamicHelp": false,
1805
+ "multiple": false,
1806
+ "type": "option"
1807
+ }
1808
+ },
1809
+ "hasDynamicHelp": false,
1810
+ "hiddenAliases": [],
1811
+ "id": "emails:delete-email",
1812
+ "pluginAlias": "@primitivedotdev/cli",
1813
+ "pluginName": "@primitivedotdev/cli",
1814
+ "pluginType": "core",
1815
+ "strict": true,
1816
+ "summary": "Delete an email",
1817
+ "enableJsonFlag": false
1818
+ },
1819
+ "emails:discard-email-content": {
1820
+ "aliases": [],
1821
+ "args": {},
1822
+ "description": "Permanently deletes the email's raw bytes, parsed body (text + HTML),\nand attachments while preserving metadata (sender, recipient,\nsubject, timestamps, hashes, attachment manifest) for audit logs.\nIdempotent: a second call returns success with\n`already_discarded: true` and does no work.\n\n**Gated** on the customer's discard-content opt-in (managed in the\ndashboard at Settings > Webhooks). When the toggle is off, this\nendpoint returns `403` with code `discard_not_enabled` and a\nmessage pointing the human at the dashboard. There is intentionally\nno API to flip this toggle. Opting in to a destructive,\nnon-reversible operation must be a deliberate human click in the\nUI.\n",
1823
+ "flags": {
1824
+ "api-key": {
1825
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1826
+ "env": "PRIMITIVE_API_KEY",
1827
+ "name": "api-key",
1828
+ "hasDynamicHelp": false,
1829
+ "multiple": false,
1830
+ "type": "option"
1831
+ },
1832
+ "api-base-url-1": {
1833
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1834
+ "env": "PRIMITIVE_API_BASE_URL_1",
1835
+ "hidden": true,
1836
+ "name": "api-base-url-1",
1837
+ "hasDynamicHelp": false,
1838
+ "multiple": false,
1839
+ "type": "option"
1840
+ },
1841
+ "api-base-url-2": {
1842
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1843
+ "env": "PRIMITIVE_API_BASE_URL_2",
1844
+ "hidden": true,
1845
+ "name": "api-base-url-2",
1846
+ "hasDynamicHelp": false,
1847
+ "multiple": false,
1848
+ "type": "option"
1849
+ },
1850
+ "time": {
1851
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1852
+ "name": "time",
1853
+ "allowNo": false,
1854
+ "type": "boolean"
1855
+ },
1856
+ "id": {
1857
+ "description": "Resource UUID",
1858
+ "name": "id",
1859
+ "required": true,
1860
+ "hasDynamicHelp": false,
1861
+ "multiple": false,
1862
+ "type": "option"
1863
+ }
1864
+ },
1865
+ "hasDynamicHelp": false,
1866
+ "hiddenAliases": [],
1867
+ "id": "emails:discard-email-content",
1868
+ "pluginAlias": "@primitivedotdev/cli",
1869
+ "pluginName": "@primitivedotdev/cli",
1870
+ "pluginType": "core",
1871
+ "strict": true,
1872
+ "summary": "Discard email content",
1873
+ "enableJsonFlag": false
1874
+ },
1875
+ "emails:download-attachments": {
1876
+ "aliases": [],
1877
+ "args": {},
1878
+ "description": "Downloads all attachments as a gzip-compressed tar archive.\nAuthenticates via a signed download token (provided in webhook\npayloads) or a valid session.\n",
1879
+ "flags": {
1880
+ "api-key": {
1881
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1882
+ "env": "PRIMITIVE_API_KEY",
1883
+ "name": "api-key",
1884
+ "hasDynamicHelp": false,
1885
+ "multiple": false,
1886
+ "type": "option"
1887
+ },
1888
+ "api-base-url-1": {
1889
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1890
+ "env": "PRIMITIVE_API_BASE_URL_1",
1891
+ "hidden": true,
1892
+ "name": "api-base-url-1",
1893
+ "hasDynamicHelp": false,
1894
+ "multiple": false,
1895
+ "type": "option"
1896
+ },
1897
+ "api-base-url-2": {
1898
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1899
+ "env": "PRIMITIVE_API_BASE_URL_2",
1900
+ "hidden": true,
1901
+ "name": "api-base-url-2",
1902
+ "hasDynamicHelp": false,
1903
+ "multiple": false,
1904
+ "type": "option"
1905
+ },
1906
+ "time": {
1907
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1908
+ "name": "time",
1909
+ "allowNo": false,
1910
+ "type": "boolean"
1911
+ },
1912
+ "id": {
1913
+ "description": "Resource UUID",
1914
+ "name": "id",
1915
+ "required": true,
1916
+ "hasDynamicHelp": false,
1917
+ "multiple": false,
1918
+ "type": "option"
1919
+ },
1920
+ "token": {
1921
+ "description": "Signed download token from webhook payload",
1922
+ "name": "token",
1923
+ "required": false,
1924
+ "hasDynamicHelp": false,
1925
+ "multiple": false,
1926
+ "type": "option"
1927
+ },
1928
+ "output": {
1929
+ "description": "Write binary response bytes to a file",
1930
+ "name": "output",
1931
+ "hasDynamicHelp": false,
1932
+ "multiple": false,
1933
+ "type": "option"
1934
+ }
1935
+ },
1936
+ "hasDynamicHelp": false,
1937
+ "hiddenAliases": [],
1938
+ "id": "emails:download-attachments",
1939
+ "pluginAlias": "@primitivedotdev/cli",
1940
+ "pluginName": "@primitivedotdev/cli",
1941
+ "pluginType": "core",
1942
+ "strict": true,
1943
+ "summary": "Download email attachments",
1944
+ "enableJsonFlag": false
1945
+ },
1946
+ "emails:download-raw-email": {
1947
+ "aliases": [],
1948
+ "args": {},
1949
+ "description": "Downloads the raw RFC 822 email file (.eml). Authenticates via\na signed download token (provided in webhook payloads) or a\nvalid session.\n",
1950
+ "flags": {
1951
+ "api-key": {
1952
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1953
+ "env": "PRIMITIVE_API_KEY",
1954
+ "name": "api-key",
1955
+ "hasDynamicHelp": false,
1956
+ "multiple": false,
1957
+ "type": "option"
1958
+ },
1959
+ "api-base-url-1": {
1960
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
1961
+ "env": "PRIMITIVE_API_BASE_URL_1",
1962
+ "hidden": true,
1963
+ "name": "api-base-url-1",
1964
+ "hasDynamicHelp": false,
1965
+ "multiple": false,
1966
+ "type": "option"
1967
+ },
1968
+ "api-base-url-2": {
1969
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
1970
+ "env": "PRIMITIVE_API_BASE_URL_2",
1971
+ "hidden": true,
1972
+ "name": "api-base-url-2",
1973
+ "hasDynamicHelp": false,
1974
+ "multiple": false,
1975
+ "type": "option"
1976
+ },
1977
+ "time": {
1978
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
1979
+ "name": "time",
1980
+ "allowNo": false,
1981
+ "type": "boolean"
1982
+ },
1983
+ "id": {
1984
+ "description": "Resource UUID",
1985
+ "name": "id",
1986
+ "required": true,
1987
+ "hasDynamicHelp": false,
1988
+ "multiple": false,
1989
+ "type": "option"
1990
+ },
1991
+ "token": {
1992
+ "description": "Signed download token from webhook payload",
1993
+ "name": "token",
1994
+ "required": false,
1995
+ "hasDynamicHelp": false,
1996
+ "multiple": false,
1997
+ "type": "option"
1998
+ },
1999
+ "output": {
2000
+ "description": "Write binary response bytes to a file",
2001
+ "name": "output",
2002
+ "hasDynamicHelp": false,
2003
+ "multiple": false,
2004
+ "type": "option"
2005
+ }
2006
+ },
2007
+ "hasDynamicHelp": false,
2008
+ "hiddenAliases": [],
2009
+ "id": "emails:download-raw-email",
2010
+ "pluginAlias": "@primitivedotdev/cli",
2011
+ "pluginName": "@primitivedotdev/cli",
2012
+ "pluginType": "core",
2013
+ "strict": true,
2014
+ "summary": "Download raw email",
2015
+ "enableJsonFlag": false
2016
+ },
2017
+ "emails:get-email": {
2018
+ "aliases": [],
2019
+ "args": {},
2020
+ "description": "Returns the full record for an inbound email received at one\nof your verified domains, including the parsed text and HTML\nbodies, threading metadata, SMTP envelope detail, webhook\ndelivery state, and a `replies` array for any outbound sends\nrecorded as replies to this inbound.\n\nFor listing inbound emails (with cursor pagination, status\nand date filters, and free-text search), use\n`/emails`. Outbound (sent) email records are NOT returned\nhere; use `/sent-emails/{id}` for those.\n\nThe response carries four sender-shaped fields whose\nmeanings overlap. `from_email` is the canonical \"who sent\nthis\" field for most use cases (parsed bare address from\nthe `From:` header, with a `sender` fallback). `from_header`\nis the raw header including any display name. `sender` and\n`smtp_mail_from` both carry the SMTP envelope MAIL FROM\n(return-path) and are equal by construction; `sender` is\nthe older field name retained for compatibility. See\n`primitive describe emails:get-email | jq '.responseSchema.properties'`\nfor per-field detail.\n",
2021
+ "flags": {
2022
+ "api-key": {
2023
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2024
+ "env": "PRIMITIVE_API_KEY",
2025
+ "name": "api-key",
2026
+ "hasDynamicHelp": false,
2027
+ "multiple": false,
2028
+ "type": "option"
2029
+ },
2030
+ "api-base-url-1": {
2031
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2032
+ "env": "PRIMITIVE_API_BASE_URL_1",
2033
+ "hidden": true,
2034
+ "name": "api-base-url-1",
2035
+ "hasDynamicHelp": false,
2036
+ "multiple": false,
2037
+ "type": "option"
2038
+ },
2039
+ "api-base-url-2": {
2040
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2041
+ "env": "PRIMITIVE_API_BASE_URL_2",
2042
+ "hidden": true,
2043
+ "name": "api-base-url-2",
2044
+ "hasDynamicHelp": false,
2045
+ "multiple": false,
2046
+ "type": "option"
2047
+ },
2048
+ "time": {
2049
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2050
+ "name": "time",
2051
+ "allowNo": false,
2052
+ "type": "boolean"
2053
+ },
2054
+ "id": {
2055
+ "description": "Resource UUID",
2056
+ "name": "id",
2057
+ "required": true,
2058
+ "hasDynamicHelp": false,
2059
+ "multiple": false,
2060
+ "type": "option"
2061
+ }
2062
+ },
2063
+ "hasDynamicHelp": false,
2064
+ "hiddenAliases": [],
2065
+ "id": "emails:get-email",
2066
+ "pluginAlias": "@primitivedotdev/cli",
2067
+ "pluginName": "@primitivedotdev/cli",
2068
+ "pluginType": "core",
2069
+ "strict": true,
2070
+ "summary": "Get inbound email by id",
2071
+ "enableJsonFlag": false
2072
+ },
2073
+ "emails:list-emails": {
2074
+ "aliases": [],
2075
+ "args": {},
2076
+ "description": "Returns a paginated list of INBOUND emails received at your\nverified domains. Outbound messages sent via /send-mail are\nnot included; this endpoint is the inbox view, not a\nunified send/receive history.\n\nSupports filtering by domain, status, date range, and\nfree-text search across subject, sender, and recipient\nfields.\n\nFor a compact text-table summary of the most recent N\ninbounds (no filters, no cursor pagination), the CLI ships\n`primitive emails:latest` as a one-line-per-email shortcut.\nIt's TTY-aware so id columns are full UUIDs when piped, and\na `--json` flag returns the same envelope this endpoint\ndoes. Use whichever fits the call site.\n",
2077
+ "flags": {
2078
+ "api-key": {
2079
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2080
+ "env": "PRIMITIVE_API_KEY",
2081
+ "name": "api-key",
2082
+ "hasDynamicHelp": false,
2083
+ "multiple": false,
2084
+ "type": "option"
2085
+ },
2086
+ "api-base-url-1": {
2087
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2088
+ "env": "PRIMITIVE_API_BASE_URL_1",
2089
+ "hidden": true,
2090
+ "name": "api-base-url-1",
2091
+ "hasDynamicHelp": false,
2092
+ "multiple": false,
2093
+ "type": "option"
2094
+ },
2095
+ "api-base-url-2": {
2096
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2097
+ "env": "PRIMITIVE_API_BASE_URL_2",
2098
+ "hidden": true,
2099
+ "name": "api-base-url-2",
2100
+ "hasDynamicHelp": false,
2101
+ "multiple": false,
2102
+ "type": "option"
2103
+ },
2104
+ "time": {
2105
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2106
+ "name": "time",
2107
+ "allowNo": false,
2108
+ "type": "boolean"
2109
+ },
2110
+ "cursor": {
2111
+ "description": "Pagination cursor from a previous response's `meta.cursor` field.\nFormat: `{ISO-datetime}|{id}`\n",
2112
+ "name": "cursor",
2113
+ "required": false,
2114
+ "hasDynamicHelp": false,
2115
+ "multiple": false,
2116
+ "type": "option"
2117
+ },
2118
+ "limit": {
2119
+ "description": "Number of results per page",
2120
+ "name": "limit",
2121
+ "required": false,
2122
+ "hasDynamicHelp": false,
2123
+ "multiple": false,
2124
+ "type": "option"
2125
+ },
2126
+ "domain-id": {
2127
+ "description": "Filter by domain ID",
2128
+ "name": "domain-id",
2129
+ "required": false,
2130
+ "hasDynamicHelp": false,
2131
+ "multiple": false,
2132
+ "type": "option"
2133
+ },
2134
+ "status": {
2135
+ "description": "Filter inbound rows by lifecycle status. See `EmailStatus`\nfor what each value means. Note that the webhook delivery\nstate is a SEPARATE lifecycle on the same row; filter by\n`webhook_status` semantics is not currently supported on\nthis endpoint.\n",
2136
+ "name": "status",
2137
+ "required": false,
2138
+ "hasDynamicHelp": false,
2139
+ "multiple": false,
2140
+ "type": "option"
2141
+ },
2142
+ "search": {
2143
+ "description": "Search subject, sender, and recipient (case-insensitive)",
2144
+ "name": "search",
2145
+ "required": false,
2146
+ "hasDynamicHelp": false,
2147
+ "multiple": false,
2148
+ "type": "option"
2149
+ },
2150
+ "date-from": {
2151
+ "description": "Filter emails created on or after this timestamp",
2152
+ "name": "date-from",
2153
+ "required": false,
2154
+ "hasDynamicHelp": false,
2155
+ "multiple": false,
2156
+ "type": "option"
2157
+ },
2158
+ "date-to": {
2159
+ "description": "Filter emails created on or before this timestamp",
2160
+ "name": "date-to",
2161
+ "required": false,
2162
+ "hasDynamicHelp": false,
2163
+ "multiple": false,
2164
+ "type": "option"
2165
+ }
2166
+ },
2167
+ "hasDynamicHelp": false,
2168
+ "hiddenAliases": [],
2169
+ "id": "emails:list-emails",
2170
+ "pluginAlias": "@primitivedotdev/cli",
2171
+ "pluginName": "@primitivedotdev/cli",
2172
+ "pluginType": "core",
2173
+ "strict": true,
2174
+ "summary": "List inbound emails",
2175
+ "enableJsonFlag": false
2176
+ },
2177
+ "emails:replay-email-webhooks": {
2178
+ "aliases": [],
2179
+ "args": {},
2180
+ "description": "Re-delivers the webhook payload for this email to all active\nendpoints matching the email's domain. Rate limited per-email\n(short cooldown between successive replays of the same email)\nand per-org (burst + sustained windows), sharing an org-wide\nbudget with delivery replays.\n",
2181
+ "flags": {
2182
+ "api-key": {
2183
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2184
+ "env": "PRIMITIVE_API_KEY",
2185
+ "name": "api-key",
2186
+ "hasDynamicHelp": false,
2187
+ "multiple": false,
2188
+ "type": "option"
2189
+ },
2190
+ "api-base-url-1": {
2191
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2192
+ "env": "PRIMITIVE_API_BASE_URL_1",
2193
+ "hidden": true,
2194
+ "name": "api-base-url-1",
2195
+ "hasDynamicHelp": false,
2196
+ "multiple": false,
2197
+ "type": "option"
2198
+ },
2199
+ "api-base-url-2": {
2200
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2201
+ "env": "PRIMITIVE_API_BASE_URL_2",
2202
+ "hidden": true,
2203
+ "name": "api-base-url-2",
2204
+ "hasDynamicHelp": false,
2205
+ "multiple": false,
2206
+ "type": "option"
2207
+ },
2208
+ "time": {
2209
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2210
+ "name": "time",
2211
+ "allowNo": false,
2212
+ "type": "boolean"
2213
+ },
2214
+ "id": {
2215
+ "description": "Resource UUID",
2216
+ "name": "id",
2217
+ "required": true,
2218
+ "hasDynamicHelp": false,
2219
+ "multiple": false,
2220
+ "type": "option"
2221
+ }
2222
+ },
2223
+ "hasDynamicHelp": false,
2224
+ "hiddenAliases": [],
2225
+ "id": "emails:replay-email-webhooks",
2226
+ "pluginAlias": "@primitivedotdev/cli",
2227
+ "pluginName": "@primitivedotdev/cli",
2228
+ "pluginType": "core",
2229
+ "strict": true,
2230
+ "summary": "Replay email webhooks",
2231
+ "enableJsonFlag": false
2232
+ },
2233
+ "emails:search-emails": {
2234
+ "aliases": [],
2235
+ "args": {},
2236
+ "description": "Searches inbound emails with structured filters and optional\nfull-text matching across parsed email fields. This endpoint is\noptimized for filtered inbox views and CLI polling workflows:\ncallers that only need new accepted mail can pass\n`sort=received_at_asc`, `snippet=false`, `include_facets=false`,\nand a `date_from` timestamp.\n\n`q`, `subject`, and `body` use the same English full-text index\nas the web inbox search. Structured filters such as `from`, `to`,\n`domain_id`, status, attachment presence, and spam score bounds\nare combined with the text query.\n",
2237
+ "flags": {
2238
+ "api-key": {
2239
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2240
+ "env": "PRIMITIVE_API_KEY",
2241
+ "name": "api-key",
2242
+ "hasDynamicHelp": false,
2243
+ "multiple": false,
2244
+ "type": "option"
2245
+ },
2246
+ "api-base-url-1": {
2247
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2248
+ "env": "PRIMITIVE_API_BASE_URL_1",
2249
+ "hidden": true,
2250
+ "name": "api-base-url-1",
2251
+ "hasDynamicHelp": false,
2252
+ "multiple": false,
2253
+ "type": "option"
2254
+ },
2255
+ "api-base-url-2": {
2256
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2257
+ "env": "PRIMITIVE_API_BASE_URL_2",
2258
+ "hidden": true,
2259
+ "name": "api-base-url-2",
2260
+ "hasDynamicHelp": false,
2261
+ "multiple": false,
2262
+ "type": "option"
2263
+ },
2264
+ "time": {
2265
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2266
+ "name": "time",
2267
+ "allowNo": false,
2268
+ "type": "boolean"
2269
+ },
2270
+ "q": {
2271
+ "description": "Full-text search DSL query.",
2272
+ "name": "q",
2273
+ "required": false,
2274
+ "hasDynamicHelp": false,
2275
+ "multiple": false,
2276
+ "type": "option"
2277
+ },
2278
+ "from": {
2279
+ "description": "Filter by sender address or sender domain.",
2280
+ "name": "from",
2281
+ "required": false,
2282
+ "hasDynamicHelp": false,
2283
+ "multiple": false,
2284
+ "type": "option"
2285
+ },
2286
+ "to": {
2287
+ "description": "Filter by recipient address or recipient domain.",
2288
+ "name": "to",
2289
+ "required": false,
2290
+ "hasDynamicHelp": false,
2291
+ "multiple": false,
2292
+ "type": "option"
2293
+ },
2294
+ "subject": {
2295
+ "description": "Full-text search restricted to the subject field.",
2296
+ "name": "subject",
2297
+ "required": false,
2298
+ "hasDynamicHelp": false,
2299
+ "multiple": false,
2300
+ "type": "option"
2301
+ },
2302
+ "body": {
2303
+ "description": "Full-text search restricted to the parsed text body.",
2304
+ "name": "body",
2305
+ "required": false,
2306
+ "hasDynamicHelp": false,
2307
+ "multiple": false,
2308
+ "type": "option"
2309
+ },
2310
+ "domain-id": {
2311
+ "description": "Filter by domain ID.",
2312
+ "name": "domain-id",
2313
+ "required": false,
2314
+ "hasDynamicHelp": false,
2315
+ "multiple": false,
2316
+ "type": "option"
2317
+ },
2318
+ "status": {
2319
+ "description": "Filter by inbound email lifecycle status.",
2320
+ "name": "status",
2321
+ "required": false,
2322
+ "hasDynamicHelp": false,
2323
+ "multiple": false,
2324
+ "type": "option"
2325
+ },
2326
+ "date-from": {
2327
+ "description": "Filter emails received on or after this timestamp.",
2328
+ "name": "date-from",
2329
+ "required": false,
2330
+ "hasDynamicHelp": false,
2331
+ "multiple": false,
2332
+ "type": "option"
2333
+ },
2334
+ "date-to": {
2335
+ "description": "Filter emails received on or before this timestamp.",
2336
+ "name": "date-to",
2337
+ "required": false,
2338
+ "hasDynamicHelp": false,
2339
+ "multiple": false,
2340
+ "type": "option"
2341
+ },
2342
+ "has-attachment": {
2343
+ "description": "Filter by whether the email has one or more attachments.",
2344
+ "name": "has-attachment",
2345
+ "required": false,
2346
+ "hasDynamicHelp": false,
2347
+ "multiple": false,
2348
+ "options": [
2349
+ "true",
2350
+ "false"
2351
+ ],
2352
+ "type": "option"
2353
+ },
2354
+ "spam-score-lt": {
2355
+ "description": "Filter to emails with spam score below this value.",
2356
+ "name": "spam-score-lt",
2357
+ "required": false,
2358
+ "hasDynamicHelp": false,
2359
+ "multiple": false,
2360
+ "type": "option"
2361
+ },
2362
+ "spam-score-gte": {
2363
+ "description": "Filter to emails with spam score greater than or equal to this value.",
2364
+ "name": "spam-score-gte",
2365
+ "required": false,
2366
+ "hasDynamicHelp": false,
2367
+ "multiple": false,
2368
+ "type": "option"
2369
+ },
2370
+ "sort": {
2371
+ "description": "Sort mode. Defaults to relevance when a text query is present,\notherwise `received_at_desc`.\n",
2372
+ "name": "sort",
2373
+ "required": false,
2374
+ "hasDynamicHelp": false,
2375
+ "multiple": false,
2376
+ "options": [
2377
+ "relevance",
2378
+ "received_at_desc",
2379
+ "received_at_asc"
2380
+ ],
2381
+ "type": "option"
2382
+ },
2383
+ "cursor": {
2384
+ "description": "Opaque pagination cursor from a previous search response.",
2385
+ "name": "cursor",
2386
+ "required": false,
2387
+ "hasDynamicHelp": false,
2388
+ "multiple": false,
2389
+ "type": "option"
2390
+ },
2391
+ "limit": {
2392
+ "description": "Number of results per page",
2393
+ "name": "limit",
2394
+ "required": false,
2395
+ "hasDynamicHelp": false,
2396
+ "multiple": false,
2397
+ "type": "option"
2398
+ },
2399
+ "snippet": {
2400
+ "description": "Include subject/body highlight snippets when text search is active.",
2401
+ "name": "snippet",
2402
+ "required": false,
2403
+ "hasDynamicHelp": false,
2404
+ "multiple": false,
2405
+ "options": [
2406
+ "true",
2407
+ "false"
2408
+ ],
2409
+ "type": "option"
2410
+ },
2411
+ "include-facets": {
2412
+ "description": "Include facet counts for sender, domain, status, and attachment presence.",
2413
+ "name": "include-facets",
2414
+ "required": false,
2415
+ "hasDynamicHelp": false,
2416
+ "multiple": false,
2417
+ "options": [
2418
+ "true",
2419
+ "false"
2420
+ ],
2421
+ "type": "option"
2422
+ }
2423
+ },
2424
+ "hasDynamicHelp": false,
2425
+ "hiddenAliases": [],
2426
+ "id": "emails:search-emails",
2427
+ "pluginAlias": "@primitivedotdev/cli",
2428
+ "pluginName": "@primitivedotdev/cli",
2429
+ "pluginType": "core",
2430
+ "strict": true,
2431
+ "summary": "Search inbound emails",
2432
+ "enableJsonFlag": false
2433
+ },
2434
+ "endpoints:create-endpoint": {
2435
+ "aliases": [],
2436
+ "args": {},
2437
+ "description": "Creates a new webhook endpoint. If a deactivated endpoint\nwith the same URL and domain exists, it is reactivated\ninstead. Subject to plan limits on the number of active\nendpoints.\n\n**Signing is account-scoped, not per-endpoint.** This call\ndoes not return any signing material; every endpoint on the\naccount uses the same webhook secret, fetched via\n`GET /account/webhook-secret`. See the API-level \"Webhook\nsigning\" section for the full wire format (header name,\nsigned string, hash algo, secret format, tolerance) and a\nlanguage-agnostic verification recipe.\n\nAfter creating the endpoint, fire a test delivery against\nit via `POST /endpoints/{id}/test` to confirm your verifier\naccepts the signature.\n\n\nBody fields requiring --raw-body JSON (these are not exposed as flags):\n rules object Endpoint-specific filtering rules\n(* = required. Scalar body fields are exposed as individual --flag-name flags; see FLAGS above.)",
2438
+ "flags": {
2439
+ "api-key": {
2440
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2441
+ "env": "PRIMITIVE_API_KEY",
2442
+ "name": "api-key",
2443
+ "hasDynamicHelp": false,
2444
+ "multiple": false,
2445
+ "type": "option"
2446
+ },
2447
+ "api-base-url-1": {
2448
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2449
+ "env": "PRIMITIVE_API_BASE_URL_1",
2450
+ "hidden": true,
2451
+ "name": "api-base-url-1",
2452
+ "hasDynamicHelp": false,
2453
+ "multiple": false,
2454
+ "type": "option"
2455
+ },
2456
+ "api-base-url-2": {
2457
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2458
+ "env": "PRIMITIVE_API_BASE_URL_2",
2459
+ "hidden": true,
2460
+ "name": "api-base-url-2",
2461
+ "hasDynamicHelp": false,
2462
+ "multiple": false,
2463
+ "type": "option"
2464
+ },
2465
+ "time": {
2466
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2467
+ "name": "time",
2468
+ "allowNo": false,
2469
+ "type": "boolean"
2470
+ },
2471
+ "raw-body": {
2472
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
2473
+ "name": "raw-body",
2474
+ "hasDynamicHelp": false,
2475
+ "multiple": false,
2476
+ "type": "option"
2477
+ },
2478
+ "body-file": {
2479
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
2480
+ "name": "body-file",
2481
+ "hasDynamicHelp": false,
2482
+ "multiple": false,
2483
+ "type": "option"
2484
+ },
2485
+ "url": {
2486
+ "description": "The webhook URL to deliver events to",
2487
+ "name": "url",
2488
+ "hasDynamicHelp": false,
2489
+ "multiple": false,
2490
+ "type": "option"
2491
+ },
2492
+ "domain-id": {
2493
+ "description": "Restrict to emails from a specific domain",
2494
+ "name": "domain-id",
2495
+ "hasDynamicHelp": false,
2496
+ "multiple": false,
2497
+ "type": "option"
2498
+ },
2499
+ "enabled": {
2500
+ "description": "Whether the endpoint is active",
2501
+ "name": "enabled",
2502
+ "allowNo": false,
2503
+ "type": "boolean"
2504
+ }
2505
+ },
2506
+ "hasDynamicHelp": false,
2507
+ "hiddenAliases": [],
2508
+ "id": "endpoints:create-endpoint",
2509
+ "pluginAlias": "@primitivedotdev/cli",
2510
+ "pluginName": "@primitivedotdev/cli",
2511
+ "pluginType": "core",
2512
+ "strict": true,
2513
+ "summary": "Create a webhook endpoint",
2514
+ "enableJsonFlag": false
2515
+ },
2516
+ "endpoints:delete-endpoint": {
2517
+ "aliases": [],
2518
+ "args": {},
2519
+ "description": "Soft-deletes a webhook endpoint. The endpoint will no longer\nreceive webhook deliveries.\n",
2520
+ "flags": {
2521
+ "api-key": {
2522
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2523
+ "env": "PRIMITIVE_API_KEY",
2524
+ "name": "api-key",
2525
+ "hasDynamicHelp": false,
2526
+ "multiple": false,
2527
+ "type": "option"
2528
+ },
2529
+ "api-base-url-1": {
2530
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2531
+ "env": "PRIMITIVE_API_BASE_URL_1",
2532
+ "hidden": true,
2533
+ "name": "api-base-url-1",
2534
+ "hasDynamicHelp": false,
2535
+ "multiple": false,
2536
+ "type": "option"
2537
+ },
2538
+ "api-base-url-2": {
2539
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2540
+ "env": "PRIMITIVE_API_BASE_URL_2",
2541
+ "hidden": true,
2542
+ "name": "api-base-url-2",
2543
+ "hasDynamicHelp": false,
2544
+ "multiple": false,
2545
+ "type": "option"
2546
+ },
2547
+ "time": {
2548
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2549
+ "name": "time",
2550
+ "allowNo": false,
2551
+ "type": "boolean"
2552
+ },
2553
+ "id": {
2554
+ "description": "Resource UUID",
2555
+ "name": "id",
2556
+ "required": true,
2557
+ "hasDynamicHelp": false,
2558
+ "multiple": false,
2559
+ "type": "option"
2560
+ }
2561
+ },
2562
+ "hasDynamicHelp": false,
2563
+ "hiddenAliases": [],
2564
+ "id": "endpoints:delete-endpoint",
2565
+ "pluginAlias": "@primitivedotdev/cli",
2566
+ "pluginName": "@primitivedotdev/cli",
2567
+ "pluginType": "core",
2568
+ "strict": true,
2569
+ "summary": "Delete a webhook endpoint",
2570
+ "enableJsonFlag": false
2571
+ },
2572
+ "endpoints:list-endpoints": {
2573
+ "aliases": [],
2574
+ "args": {},
2575
+ "description": "Returns all active (non-deleted) webhook endpoints.",
2576
+ "flags": {
2577
+ "api-key": {
2578
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2579
+ "env": "PRIMITIVE_API_KEY",
2580
+ "name": "api-key",
2581
+ "hasDynamicHelp": false,
2582
+ "multiple": false,
2583
+ "type": "option"
2584
+ },
2585
+ "api-base-url-1": {
2586
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2587
+ "env": "PRIMITIVE_API_BASE_URL_1",
2588
+ "hidden": true,
2589
+ "name": "api-base-url-1",
2590
+ "hasDynamicHelp": false,
2591
+ "multiple": false,
2592
+ "type": "option"
2593
+ },
2594
+ "api-base-url-2": {
2595
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2596
+ "env": "PRIMITIVE_API_BASE_URL_2",
2597
+ "hidden": true,
2598
+ "name": "api-base-url-2",
2599
+ "hasDynamicHelp": false,
2600
+ "multiple": false,
2601
+ "type": "option"
2602
+ },
2603
+ "time": {
2604
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2605
+ "name": "time",
2606
+ "allowNo": false,
2607
+ "type": "boolean"
2608
+ }
2609
+ },
2610
+ "hasDynamicHelp": false,
2611
+ "hiddenAliases": [],
2612
+ "id": "endpoints:list-endpoints",
2613
+ "pluginAlias": "@primitivedotdev/cli",
2614
+ "pluginName": "@primitivedotdev/cli",
2615
+ "pluginType": "core",
2616
+ "strict": true,
2617
+ "summary": "List webhook endpoints",
2618
+ "enableJsonFlag": false
2619
+ },
2620
+ "endpoints:test-endpoint": {
2621
+ "aliases": [],
2622
+ "args": {},
2623
+ "description": "Sends a sample `email.received` event to the endpoint. The request\nincludes SSRF protection (private IP rejection and DNS pinning).\nRate limited to 4 per minute and 30 per hour (non-exempt).\nSuccessful deliveries and verified-domain endpoints are exempt\nfrom the rate limit.\n",
2624
+ "flags": {
2625
+ "api-key": {
2626
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2627
+ "env": "PRIMITIVE_API_KEY",
2628
+ "name": "api-key",
2629
+ "hasDynamicHelp": false,
2630
+ "multiple": false,
2631
+ "type": "option"
2632
+ },
2633
+ "api-base-url-1": {
2634
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2635
+ "env": "PRIMITIVE_API_BASE_URL_1",
2636
+ "hidden": true,
2637
+ "name": "api-base-url-1",
2638
+ "hasDynamicHelp": false,
2639
+ "multiple": false,
2640
+ "type": "option"
2641
+ },
2642
+ "api-base-url-2": {
2643
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2644
+ "env": "PRIMITIVE_API_BASE_URL_2",
2645
+ "hidden": true,
2646
+ "name": "api-base-url-2",
2647
+ "hasDynamicHelp": false,
2648
+ "multiple": false,
2649
+ "type": "option"
2650
+ },
2651
+ "time": {
2652
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2653
+ "name": "time",
2654
+ "allowNo": false,
2655
+ "type": "boolean"
2656
+ },
2657
+ "id": {
2658
+ "description": "Resource UUID",
2659
+ "name": "id",
2660
+ "required": true,
2661
+ "hasDynamicHelp": false,
2662
+ "multiple": false,
2663
+ "type": "option"
2664
+ }
2665
+ },
2666
+ "hasDynamicHelp": false,
2667
+ "hiddenAliases": [],
2668
+ "id": "endpoints:test-endpoint",
2669
+ "pluginAlias": "@primitivedotdev/cli",
2670
+ "pluginName": "@primitivedotdev/cli",
2671
+ "pluginType": "core",
2672
+ "strict": true,
2673
+ "summary": "Send a test webhook",
2674
+ "enableJsonFlag": false
2675
+ },
2676
+ "endpoints:update-endpoint": {
2677
+ "aliases": [],
2678
+ "args": {},
2679
+ "description": "Updates an active webhook endpoint. If the URL is changed, the old\nendpoint is deactivated and a new one is created (or an existing\ndeactivated endpoint with the new URL is reactivated).\n\n\nBody fields requiring --raw-body JSON (these are not exposed as flags):\n rules object\n(* = required. Scalar body fields are exposed as individual --flag-name flags; see FLAGS above.)",
2680
+ "flags": {
2681
+ "api-key": {
2682
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2683
+ "env": "PRIMITIVE_API_KEY",
2684
+ "name": "api-key",
2685
+ "hasDynamicHelp": false,
2686
+ "multiple": false,
2687
+ "type": "option"
2688
+ },
2689
+ "api-base-url-1": {
2690
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2691
+ "env": "PRIMITIVE_API_BASE_URL_1",
2692
+ "hidden": true,
2693
+ "name": "api-base-url-1",
2694
+ "hasDynamicHelp": false,
2695
+ "multiple": false,
2696
+ "type": "option"
2697
+ },
2698
+ "api-base-url-2": {
2699
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2700
+ "env": "PRIMITIVE_API_BASE_URL_2",
2701
+ "hidden": true,
2702
+ "name": "api-base-url-2",
2703
+ "hasDynamicHelp": false,
2704
+ "multiple": false,
2705
+ "type": "option"
2706
+ },
2707
+ "time": {
2708
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2709
+ "name": "time",
2710
+ "allowNo": false,
2711
+ "type": "boolean"
2712
+ },
2713
+ "id": {
2714
+ "description": "Resource UUID",
2715
+ "name": "id",
2716
+ "required": true,
2717
+ "hasDynamicHelp": false,
2718
+ "multiple": false,
2719
+ "type": "option"
2720
+ },
2721
+ "raw-body": {
2722
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
2723
+ "name": "raw-body",
2724
+ "hasDynamicHelp": false,
2725
+ "multiple": false,
2726
+ "type": "option"
2727
+ },
2728
+ "body-file": {
2729
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
2730
+ "name": "body-file",
2731
+ "hasDynamicHelp": false,
2732
+ "multiple": false,
2733
+ "type": "option"
2734
+ },
2735
+ "domain-id": {
2736
+ "description": "domain_id",
2737
+ "name": "domain-id",
2738
+ "hasDynamicHelp": false,
2739
+ "multiple": false,
2740
+ "type": "option"
2741
+ },
2742
+ "enabled": {
2743
+ "description": "enabled",
2744
+ "name": "enabled",
2745
+ "allowNo": false,
2746
+ "type": "boolean"
2747
+ },
2748
+ "url": {
2749
+ "description": "New webhook URL (triggers endpoint rotation)",
2750
+ "name": "url",
2751
+ "hasDynamicHelp": false,
2752
+ "multiple": false,
2753
+ "type": "option"
2754
+ }
2755
+ },
2756
+ "hasDynamicHelp": false,
2757
+ "hiddenAliases": [],
2758
+ "id": "endpoints:update-endpoint",
2759
+ "pluginAlias": "@primitivedotdev/cli",
2760
+ "pluginName": "@primitivedotdev/cli",
2761
+ "pluginType": "core",
2762
+ "strict": true,
2763
+ "summary": "Update a webhook endpoint",
2764
+ "enableJsonFlag": false
2765
+ },
2766
+ "filters:create-filter": {
2767
+ "aliases": [],
2768
+ "args": {},
2769
+ "description": "Creates a new whitelist or blocklist filter. Per-domain filters\nrequire a Pro plan. Patterns are stored as lowercase.\n",
2770
+ "flags": {
2771
+ "api-key": {
2772
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2773
+ "env": "PRIMITIVE_API_KEY",
2774
+ "name": "api-key",
2775
+ "hasDynamicHelp": false,
2776
+ "multiple": false,
2777
+ "type": "option"
2778
+ },
2779
+ "api-base-url-1": {
2780
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2781
+ "env": "PRIMITIVE_API_BASE_URL_1",
2782
+ "hidden": true,
2783
+ "name": "api-base-url-1",
2784
+ "hasDynamicHelp": false,
2785
+ "multiple": false,
2786
+ "type": "option"
2787
+ },
2788
+ "api-base-url-2": {
2789
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2790
+ "env": "PRIMITIVE_API_BASE_URL_2",
2791
+ "hidden": true,
2792
+ "name": "api-base-url-2",
2793
+ "hasDynamicHelp": false,
2794
+ "multiple": false,
2795
+ "type": "option"
2796
+ },
2797
+ "time": {
2798
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2799
+ "name": "time",
2800
+ "allowNo": false,
2801
+ "type": "boolean"
2802
+ },
2803
+ "raw-body": {
2804
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
2805
+ "name": "raw-body",
2806
+ "hasDynamicHelp": false,
2807
+ "multiple": false,
2808
+ "type": "option"
2809
+ },
2810
+ "body-file": {
2811
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
2812
+ "name": "body-file",
2813
+ "hasDynamicHelp": false,
2814
+ "multiple": false,
2815
+ "type": "option"
2816
+ },
2817
+ "pattern": {
2818
+ "description": "Email address or pattern to filter",
2819
+ "name": "pattern",
2820
+ "hasDynamicHelp": false,
2821
+ "multiple": false,
2822
+ "type": "option"
2823
+ },
2824
+ "type": {
2825
+ "description": "type",
2826
+ "name": "type",
2827
+ "hasDynamicHelp": false,
2828
+ "multiple": false,
2829
+ "options": [
2830
+ "whitelist",
2831
+ "blocklist"
2832
+ ],
2833
+ "type": "option"
2834
+ },
2835
+ "domain-id": {
2836
+ "description": "Restrict filter to a specific domain (Pro plan required)",
2837
+ "name": "domain-id",
2838
+ "hasDynamicHelp": false,
2839
+ "multiple": false,
2840
+ "type": "option"
2841
+ }
2842
+ },
2843
+ "hasDynamicHelp": false,
2844
+ "hiddenAliases": [],
2845
+ "id": "filters:create-filter",
2846
+ "pluginAlias": "@primitivedotdev/cli",
2847
+ "pluginName": "@primitivedotdev/cli",
2848
+ "pluginType": "core",
2849
+ "strict": true,
2850
+ "summary": "Create a filter rule",
2851
+ "enableJsonFlag": false
2852
+ },
2853
+ "filters:delete-filter": {
2854
+ "aliases": [],
2855
+ "args": {},
2856
+ "description": "DELETE /filters/{id}",
2857
+ "flags": {
2858
+ "api-key": {
2859
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2860
+ "env": "PRIMITIVE_API_KEY",
2861
+ "name": "api-key",
2862
+ "hasDynamicHelp": false,
2863
+ "multiple": false,
2864
+ "type": "option"
2865
+ },
2866
+ "api-base-url-1": {
2867
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2868
+ "env": "PRIMITIVE_API_BASE_URL_1",
2869
+ "hidden": true,
2870
+ "name": "api-base-url-1",
2871
+ "hasDynamicHelp": false,
2872
+ "multiple": false,
2873
+ "type": "option"
2874
+ },
2875
+ "api-base-url-2": {
2876
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2877
+ "env": "PRIMITIVE_API_BASE_URL_2",
2878
+ "hidden": true,
2879
+ "name": "api-base-url-2",
2880
+ "hasDynamicHelp": false,
2881
+ "multiple": false,
2882
+ "type": "option"
2883
+ },
2884
+ "time": {
2885
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2886
+ "name": "time",
2887
+ "allowNo": false,
2888
+ "type": "boolean"
2889
+ },
2890
+ "id": {
2891
+ "description": "Resource UUID",
2892
+ "name": "id",
2893
+ "required": true,
2894
+ "hasDynamicHelp": false,
2895
+ "multiple": false,
2896
+ "type": "option"
2897
+ }
2898
+ },
2899
+ "hasDynamicHelp": false,
2900
+ "hiddenAliases": [],
2901
+ "id": "filters:delete-filter",
2902
+ "pluginAlias": "@primitivedotdev/cli",
2903
+ "pluginName": "@primitivedotdev/cli",
2904
+ "pluginType": "core",
2905
+ "strict": true,
2906
+ "summary": "Delete a filter rule",
2907
+ "enableJsonFlag": false
2908
+ },
2909
+ "filters:list-filters": {
2910
+ "aliases": [],
2911
+ "args": {},
2912
+ "description": "Returns all whitelist and blocklist filter rules.",
2913
+ "flags": {
2914
+ "api-key": {
2915
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2916
+ "env": "PRIMITIVE_API_KEY",
2917
+ "name": "api-key",
2918
+ "hasDynamicHelp": false,
2919
+ "multiple": false,
2920
+ "type": "option"
2921
+ },
2922
+ "api-base-url-1": {
2923
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2924
+ "env": "PRIMITIVE_API_BASE_URL_1",
2925
+ "hidden": true,
2926
+ "name": "api-base-url-1",
2927
+ "hasDynamicHelp": false,
2928
+ "multiple": false,
2929
+ "type": "option"
2930
+ },
2931
+ "api-base-url-2": {
2932
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2933
+ "env": "PRIMITIVE_API_BASE_URL_2",
2934
+ "hidden": true,
2935
+ "name": "api-base-url-2",
2936
+ "hasDynamicHelp": false,
2937
+ "multiple": false,
2938
+ "type": "option"
2939
+ },
2940
+ "time": {
2941
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2942
+ "name": "time",
2943
+ "allowNo": false,
2944
+ "type": "boolean"
2945
+ }
2946
+ },
2947
+ "hasDynamicHelp": false,
2948
+ "hiddenAliases": [],
2949
+ "id": "filters:list-filters",
2950
+ "pluginAlias": "@primitivedotdev/cli",
2951
+ "pluginName": "@primitivedotdev/cli",
2952
+ "pluginType": "core",
2953
+ "strict": true,
2954
+ "summary": "List filter rules",
2955
+ "enableJsonFlag": false
2956
+ },
2957
+ "filters:update-filter": {
2958
+ "aliases": [],
2959
+ "args": {},
2960
+ "description": "Toggle a filter's enabled state.",
2961
+ "flags": {
2962
+ "api-key": {
2963
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
2964
+ "env": "PRIMITIVE_API_KEY",
2965
+ "name": "api-key",
2966
+ "hasDynamicHelp": false,
2967
+ "multiple": false,
2968
+ "type": "option"
2969
+ },
2970
+ "api-base-url-1": {
2971
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
2972
+ "env": "PRIMITIVE_API_BASE_URL_1",
2973
+ "hidden": true,
2974
+ "name": "api-base-url-1",
2975
+ "hasDynamicHelp": false,
2976
+ "multiple": false,
2977
+ "type": "option"
2978
+ },
2979
+ "api-base-url-2": {
2980
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
2981
+ "env": "PRIMITIVE_API_BASE_URL_2",
2982
+ "hidden": true,
2983
+ "name": "api-base-url-2",
2984
+ "hasDynamicHelp": false,
2985
+ "multiple": false,
2986
+ "type": "option"
2987
+ },
2988
+ "time": {
2989
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
2990
+ "name": "time",
2991
+ "allowNo": false,
2992
+ "type": "boolean"
2993
+ },
2994
+ "id": {
2995
+ "description": "Resource UUID",
2996
+ "name": "id",
2997
+ "required": true,
2998
+ "hasDynamicHelp": false,
2999
+ "multiple": false,
3000
+ "type": "option"
3001
+ },
3002
+ "raw-body": {
3003
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
3004
+ "name": "raw-body",
3005
+ "hasDynamicHelp": false,
3006
+ "multiple": false,
3007
+ "type": "option"
3008
+ },
3009
+ "body-file": {
3010
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
3011
+ "name": "body-file",
3012
+ "hasDynamicHelp": false,
3013
+ "multiple": false,
3014
+ "type": "option"
3015
+ },
3016
+ "enabled": {
3017
+ "description": "enabled",
3018
+ "name": "enabled",
3019
+ "allowNo": false,
3020
+ "type": "boolean"
3021
+ }
3022
+ },
3023
+ "hasDynamicHelp": false,
3024
+ "hiddenAliases": [],
3025
+ "id": "filters:update-filter",
3026
+ "pluginAlias": "@primitivedotdev/cli",
3027
+ "pluginName": "@primitivedotdev/cli",
3028
+ "pluginType": "core",
3029
+ "strict": true,
3030
+ "summary": "Update a filter rule",
3031
+ "enableJsonFlag": false
3032
+ },
3033
+ "functions:create-function": {
3034
+ "aliases": [],
3035
+ "args": {},
3036
+ "description": "Creates and deploys a new function. The handler must be a single\nESM module that exports a default async function receiving the\n`email.received` event (see the Webhook payload section for the\nfull schema). Code is bundled before being uploaded; ship a\nsingle self-contained file rather than relying on external\nimports.\n\n**Code limits.** `code` is capped at 1 MiB UTF-8. `sourceMap`\n(optional) is capped at 5 MiB UTF-8 and is stored only on the\nedge runtime side; it is not persisted in Primitive's database.\n\n**Auto-wiring.** On successful deploy, Primitive automatically\ncreates a webhook endpoint that delivers inbound mail to the\nfunction. There is nothing to configure on the Endpoints API\nfor this to work; the gateway URL returned here is for\nreference only and is not directly callable from outside.\n\n**Secrets.** New functions ship with the managed secrets\n(`PRIMITIVE_WEBHOOK_SECRET`, `PRIMITIVE_API_KEY`) already\nbound. Add user-set secrets via\n`POST /functions/{id}/secrets`; secret writes only land in the\nrunning handler on the next redeploy.\n\n\nTip: prefer `primitive functions:deploy --name <name> --file <bundle>` for file-input ergonomics. This raw command exists for callers passing JSON.",
3037
+ "flags": {
3038
+ "api-key": {
3039
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3040
+ "env": "PRIMITIVE_API_KEY",
3041
+ "name": "api-key",
3042
+ "hasDynamicHelp": false,
3043
+ "multiple": false,
3044
+ "type": "option"
3045
+ },
3046
+ "api-base-url-1": {
3047
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3048
+ "env": "PRIMITIVE_API_BASE_URL_1",
3049
+ "hidden": true,
3050
+ "name": "api-base-url-1",
3051
+ "hasDynamicHelp": false,
3052
+ "multiple": false,
3053
+ "type": "option"
3054
+ },
3055
+ "api-base-url-2": {
3056
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3057
+ "env": "PRIMITIVE_API_BASE_URL_2",
3058
+ "hidden": true,
3059
+ "name": "api-base-url-2",
3060
+ "hasDynamicHelp": false,
3061
+ "multiple": false,
3062
+ "type": "option"
3063
+ },
3064
+ "time": {
3065
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3066
+ "name": "time",
3067
+ "allowNo": false,
3068
+ "type": "boolean"
3069
+ },
3070
+ "raw-body": {
3071
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
3072
+ "name": "raw-body",
3073
+ "hasDynamicHelp": false,
3074
+ "multiple": false,
3075
+ "type": "option"
3076
+ },
3077
+ "body-file": {
3078
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
3079
+ "name": "body-file",
3080
+ "hasDynamicHelp": false,
3081
+ "multiple": false,
3082
+ "type": "option"
3083
+ },
3084
+ "code": {
3085
+ "description": "Bundled handler as a single ESM module. Up to 1 MiB UTF-8. Must export a default `{ async fetch(req, env, ctx) { ... } }` object.",
3086
+ "name": "code",
3087
+ "hasDynamicHelp": false,
3088
+ "multiple": false,
3089
+ "type": "option"
3090
+ },
3091
+ "name": {
3092
+ "description": "Slug-style name. Lowercase letters, digits, hyphens, and underscores. 1 to 64 characters. Must be unique within the org; a 409 is returned on collision.",
3093
+ "name": "name",
3094
+ "hasDynamicHelp": false,
3095
+ "multiple": false,
3096
+ "type": "option"
3097
+ },
3098
+ "sourceMap": {
3099
+ "description": "Optional source map for the bundle. Up to 5 MiB UTF-8. Stored only on the runtime side (not in Primitive's database) and used to symbolicate stack traces in the function's logs.",
3100
+ "name": "sourceMap",
3101
+ "hasDynamicHelp": false,
3102
+ "multiple": false,
3103
+ "type": "option"
3104
+ }
3105
+ },
3106
+ "hasDynamicHelp": false,
3107
+ "hiddenAliases": [],
3108
+ "id": "functions:create-function",
3109
+ "pluginAlias": "@primitivedotdev/cli",
3110
+ "pluginName": "@primitivedotdev/cli",
3111
+ "pluginType": "core",
3112
+ "strict": true,
3113
+ "summary": "Deploy a function",
3114
+ "enableJsonFlag": false
3115
+ },
3116
+ "functions:create-function-secret": {
3117
+ "aliases": [],
3118
+ "args": {},
3119
+ "description": "Idempotent insert-or-update keyed on `(function_id, key)`.\nReturns 201 the first time the key is set, 200 on subsequent\nupdates. Values are encrypted at rest and only become visible\nto the running handler on the next deploy (`PUT /functions/{id}`\nwith the existing code is sufficient to refresh bindings).\n\nKeys must match `^[A-Z_][A-Z0-9_]*$` (uppercase letters,\ndigits, underscores; first character is a letter or\nunderscore). Values are at most 4096 UTF-8 bytes. System-\nmanaged keys are reserved and rejected.\n\n\nTip: prefer `primitive functions:set-secret --id <id> --key <KEY> --value <value> [--redeploy]` for secret writes that also push the binding live. This raw command exists for callers passing JSON.",
3120
+ "flags": {
3121
+ "api-key": {
3122
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3123
+ "env": "PRIMITIVE_API_KEY",
3124
+ "name": "api-key",
3125
+ "hasDynamicHelp": false,
3126
+ "multiple": false,
3127
+ "type": "option"
3128
+ },
3129
+ "api-base-url-1": {
3130
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3131
+ "env": "PRIMITIVE_API_BASE_URL_1",
3132
+ "hidden": true,
3133
+ "name": "api-base-url-1",
3134
+ "hasDynamicHelp": false,
3135
+ "multiple": false,
3136
+ "type": "option"
3137
+ },
3138
+ "api-base-url-2": {
3139
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3140
+ "env": "PRIMITIVE_API_BASE_URL_2",
3141
+ "hidden": true,
3142
+ "name": "api-base-url-2",
3143
+ "hasDynamicHelp": false,
3144
+ "multiple": false,
3145
+ "type": "option"
3146
+ },
3147
+ "time": {
3148
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3149
+ "name": "time",
3150
+ "allowNo": false,
3151
+ "type": "boolean"
3152
+ },
3153
+ "id": {
3154
+ "description": "Resource UUID",
3155
+ "name": "id",
3156
+ "required": true,
3157
+ "hasDynamicHelp": false,
3158
+ "multiple": false,
3159
+ "type": "option"
3160
+ },
3161
+ "raw-body": {
3162
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
3163
+ "name": "raw-body",
3164
+ "hasDynamicHelp": false,
3165
+ "multiple": false,
3166
+ "type": "option"
3167
+ },
3168
+ "body-file": {
3169
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
3170
+ "name": "body-file",
3171
+ "hasDynamicHelp": false,
3172
+ "multiple": false,
3173
+ "type": "option"
3174
+ },
3175
+ "key": {
3176
+ "description": "Uppercase letters, digits, and underscores. Must start with a letter or underscore. System-managed keys (e.g. PRIMITIVE_WEBHOOK_SECRET) are reserved.",
3177
+ "name": "key",
3178
+ "hasDynamicHelp": false,
3179
+ "multiple": false,
3180
+ "type": "option"
3181
+ },
3182
+ "value": {
3183
+ "description": "Secret value, up to 4096 UTF-8 bytes. Encrypted at rest. Never returned by any read endpoint.",
3184
+ "name": "value",
3185
+ "hasDynamicHelp": false,
3186
+ "multiple": false,
3187
+ "type": "option"
3188
+ }
3189
+ },
3190
+ "hasDynamicHelp": false,
3191
+ "hiddenAliases": [],
3192
+ "id": "functions:create-function-secret",
3193
+ "pluginAlias": "@primitivedotdev/cli",
3194
+ "pluginName": "@primitivedotdev/cli",
3195
+ "pluginType": "core",
3196
+ "strict": true,
3197
+ "summary": "Create or update a secret",
3198
+ "enableJsonFlag": false
3199
+ },
3200
+ "functions:delete-function": {
3201
+ "aliases": [],
3202
+ "args": {},
3203
+ "description": "Soft-deletes the function row, removes the script from the edge\nruntime, and deactivates the auto-wired webhook endpoint so no\nfurther inbound mail is delivered. Past deploy history,\ninvocations, and logs are retained.\n\nReturns 502 if the runtime delete fails partway; the function\nrow stays in place and the call is safe to retry until it\nsucceeds.\n",
3204
+ "flags": {
3205
+ "api-key": {
3206
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3207
+ "env": "PRIMITIVE_API_KEY",
3208
+ "name": "api-key",
3209
+ "hasDynamicHelp": false,
3210
+ "multiple": false,
3211
+ "type": "option"
3212
+ },
3213
+ "api-base-url-1": {
3214
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3215
+ "env": "PRIMITIVE_API_BASE_URL_1",
3216
+ "hidden": true,
3217
+ "name": "api-base-url-1",
3218
+ "hasDynamicHelp": false,
3219
+ "multiple": false,
3220
+ "type": "option"
3221
+ },
3222
+ "api-base-url-2": {
3223
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3224
+ "env": "PRIMITIVE_API_BASE_URL_2",
3225
+ "hidden": true,
3226
+ "name": "api-base-url-2",
3227
+ "hasDynamicHelp": false,
3228
+ "multiple": false,
3229
+ "type": "option"
3230
+ },
3231
+ "time": {
3232
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3233
+ "name": "time",
3234
+ "allowNo": false,
3235
+ "type": "boolean"
3236
+ },
3237
+ "id": {
3238
+ "description": "Resource UUID",
3239
+ "name": "id",
3240
+ "required": true,
3241
+ "hasDynamicHelp": false,
3242
+ "multiple": false,
3243
+ "type": "option"
3244
+ }
3245
+ },
3246
+ "hasDynamicHelp": false,
3247
+ "hiddenAliases": [],
3248
+ "id": "functions:delete-function",
3249
+ "pluginAlias": "@primitivedotdev/cli",
3250
+ "pluginName": "@primitivedotdev/cli",
3251
+ "pluginType": "core",
3252
+ "strict": true,
3253
+ "summary": "Delete a function",
3254
+ "enableJsonFlag": false
3255
+ },
3256
+ "functions:delete-function-secret": {
3257
+ "aliases": [],
3258
+ "args": {},
3259
+ "description": "Removes the secret. The binding stays live in the running\nhandler until the next deploy refreshes the binding set\n(`PUT /functions/{id}` with the existing code is sufficient).\nReturns 404 if the key did not exist. Managed system keys\ncannot be deleted.\n",
3260
+ "flags": {
3261
+ "api-key": {
3262
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3263
+ "env": "PRIMITIVE_API_KEY",
3264
+ "name": "api-key",
3265
+ "hasDynamicHelp": false,
3266
+ "multiple": false,
3267
+ "type": "option"
3268
+ },
3269
+ "api-base-url-1": {
3270
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3271
+ "env": "PRIMITIVE_API_BASE_URL_1",
3272
+ "hidden": true,
3273
+ "name": "api-base-url-1",
3274
+ "hasDynamicHelp": false,
3275
+ "multiple": false,
3276
+ "type": "option"
3277
+ },
3278
+ "api-base-url-2": {
3279
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3280
+ "env": "PRIMITIVE_API_BASE_URL_2",
3281
+ "hidden": true,
3282
+ "name": "api-base-url-2",
3283
+ "hasDynamicHelp": false,
3284
+ "multiple": false,
3285
+ "type": "option"
3286
+ },
3287
+ "time": {
3288
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3289
+ "name": "time",
3290
+ "allowNo": false,
3291
+ "type": "boolean"
3292
+ },
3293
+ "id": {
3294
+ "description": "Resource UUID",
3295
+ "name": "id",
3296
+ "required": true,
3297
+ "hasDynamicHelp": false,
3298
+ "multiple": false,
3299
+ "type": "option"
3300
+ },
3301
+ "key": {
3302
+ "description": "Secret key. Must match `^[A-Z_][A-Z0-9_]*$`.",
3303
+ "name": "key",
3304
+ "required": true,
3305
+ "hasDynamicHelp": false,
3306
+ "multiple": false,
3307
+ "type": "option"
3308
+ }
3309
+ },
3310
+ "hasDynamicHelp": false,
3311
+ "hiddenAliases": [],
3312
+ "id": "functions:delete-function-secret",
3313
+ "pluginAlias": "@primitivedotdev/cli",
3314
+ "pluginName": "@primitivedotdev/cli",
3315
+ "pluginType": "core",
3316
+ "strict": true,
3317
+ "summary": "Delete a secret",
3318
+ "enableJsonFlag": false
3319
+ },
3320
+ "functions:get-function": {
3321
+ "aliases": [],
3322
+ "args": {},
3323
+ "description": "Returns the full record for a function, including its current\nsource code and the deploy status / error from the most recent\ndeploy attempt.\n",
3324
+ "flags": {
3325
+ "api-key": {
3326
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3327
+ "env": "PRIMITIVE_API_KEY",
3328
+ "name": "api-key",
3329
+ "hasDynamicHelp": false,
3330
+ "multiple": false,
3331
+ "type": "option"
3332
+ },
3333
+ "api-base-url-1": {
3334
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3335
+ "env": "PRIMITIVE_API_BASE_URL_1",
3336
+ "hidden": true,
3337
+ "name": "api-base-url-1",
3338
+ "hasDynamicHelp": false,
3339
+ "multiple": false,
3340
+ "type": "option"
3341
+ },
3342
+ "api-base-url-2": {
3343
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3344
+ "env": "PRIMITIVE_API_BASE_URL_2",
3345
+ "hidden": true,
3346
+ "name": "api-base-url-2",
3347
+ "hasDynamicHelp": false,
3348
+ "multiple": false,
3349
+ "type": "option"
3350
+ },
3351
+ "time": {
3352
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3353
+ "name": "time",
3354
+ "allowNo": false,
3355
+ "type": "boolean"
3356
+ },
3357
+ "id": {
3358
+ "description": "Resource UUID",
3359
+ "name": "id",
3360
+ "required": true,
3361
+ "hasDynamicHelp": false,
3362
+ "multiple": false,
3363
+ "type": "option"
3364
+ }
3365
+ },
3366
+ "hasDynamicHelp": false,
3367
+ "hiddenAliases": [],
3368
+ "id": "functions:get-function",
3369
+ "pluginAlias": "@primitivedotdev/cli",
3370
+ "pluginName": "@primitivedotdev/cli",
3371
+ "pluginType": "core",
3372
+ "strict": true,
3373
+ "summary": "Get a function",
3374
+ "enableJsonFlag": false
3375
+ },
3376
+ "functions:list-function-secrets": {
3377
+ "aliases": [],
3378
+ "args": {},
3379
+ "description": "Returns metadata for every secret bound to the function, with\nmanaged entries (provisioned by Primitive) listed first and\nuser-set entries listed alphabetically after. **Values are\nnever returned.** Secret writes are write-only.\n\nManaged entries (e.g. `PRIMITIVE_WEBHOOK_SECRET`,\n`PRIMITIVE_API_KEY`) carry a `description` instead of\n`created_at` / `updated_at`. They cannot be created, updated,\nor deleted via this API.\n",
3380
+ "flags": {
3381
+ "api-key": {
3382
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3383
+ "env": "PRIMITIVE_API_KEY",
3384
+ "name": "api-key",
3385
+ "hasDynamicHelp": false,
3386
+ "multiple": false,
3387
+ "type": "option"
3388
+ },
3389
+ "api-base-url-1": {
3390
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3391
+ "env": "PRIMITIVE_API_BASE_URL_1",
3392
+ "hidden": true,
3393
+ "name": "api-base-url-1",
3394
+ "hasDynamicHelp": false,
3395
+ "multiple": false,
3396
+ "type": "option"
3397
+ },
3398
+ "api-base-url-2": {
3399
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3400
+ "env": "PRIMITIVE_API_BASE_URL_2",
3401
+ "hidden": true,
3402
+ "name": "api-base-url-2",
3403
+ "hasDynamicHelp": false,
3404
+ "multiple": false,
3405
+ "type": "option"
3406
+ },
3407
+ "time": {
3408
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3409
+ "name": "time",
3410
+ "allowNo": false,
3411
+ "type": "boolean"
3412
+ },
3413
+ "id": {
3414
+ "description": "Resource UUID",
3415
+ "name": "id",
3416
+ "required": true,
3417
+ "hasDynamicHelp": false,
3418
+ "multiple": false,
3419
+ "type": "option"
3420
+ }
3421
+ },
3422
+ "hasDynamicHelp": false,
3423
+ "hiddenAliases": [],
3424
+ "id": "functions:list-function-secrets",
3425
+ "pluginAlias": "@primitivedotdev/cli",
3426
+ "pluginName": "@primitivedotdev/cli",
3427
+ "pluginType": "core",
3428
+ "strict": true,
3429
+ "summary": "List a function's secrets",
3430
+ "enableJsonFlag": false
3431
+ },
3432
+ "functions:list-functions": {
3433
+ "aliases": [],
3434
+ "args": {},
3435
+ "description": "Returns every active (non-deleted) function in the org, newest\nfirst. Each entry carries the deploy status and the gateway URL\nthat the platform's webhook delivery loop posts to. To inspect\nthe source code or deploy errors, use `GET /functions/{id}`.\n",
3436
+ "flags": {
3437
+ "api-key": {
3438
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3439
+ "env": "PRIMITIVE_API_KEY",
3440
+ "name": "api-key",
3441
+ "hasDynamicHelp": false,
3442
+ "multiple": false,
3443
+ "type": "option"
3444
+ },
3445
+ "api-base-url-1": {
3446
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3447
+ "env": "PRIMITIVE_API_BASE_URL_1",
3448
+ "hidden": true,
3449
+ "name": "api-base-url-1",
3450
+ "hasDynamicHelp": false,
3451
+ "multiple": false,
3452
+ "type": "option"
3453
+ },
3454
+ "api-base-url-2": {
3455
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3456
+ "env": "PRIMITIVE_API_BASE_URL_2",
3457
+ "hidden": true,
3458
+ "name": "api-base-url-2",
3459
+ "hasDynamicHelp": false,
3460
+ "multiple": false,
3461
+ "type": "option"
3462
+ },
3463
+ "time": {
3464
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3465
+ "name": "time",
3466
+ "allowNo": false,
3467
+ "type": "boolean"
3468
+ }
3469
+ },
3470
+ "hasDynamicHelp": false,
3471
+ "hiddenAliases": [],
3472
+ "id": "functions:list-functions",
3473
+ "pluginAlias": "@primitivedotdev/cli",
3474
+ "pluginName": "@primitivedotdev/cli",
3475
+ "pluginType": "core",
3476
+ "strict": true,
3477
+ "summary": "List functions",
3478
+ "enableJsonFlag": false
3479
+ },
3480
+ "functions:set-function-secret": {
3481
+ "aliases": [],
3482
+ "args": {},
3483
+ "description": "Path-keyed companion to `POST /functions/{id}/secrets`.\nIdempotent: returns 201 the first time the key is set, 200 on\nsubsequent updates. Same validation rules and same write-only\nguarantees as the POST verb; the new value lands in the running\nhandler on the next deploy.\n\n\nTip: prefer `primitive functions:set-secret --id <id> --key <KEY> --value <value> [--redeploy]` for secret writes that also push the binding live. This raw command exists for callers passing JSON.",
3484
+ "flags": {
3485
+ "api-key": {
3486
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3487
+ "env": "PRIMITIVE_API_KEY",
3488
+ "name": "api-key",
3489
+ "hasDynamicHelp": false,
3490
+ "multiple": false,
3491
+ "type": "option"
3492
+ },
3493
+ "api-base-url-1": {
3494
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3495
+ "env": "PRIMITIVE_API_BASE_URL_1",
3496
+ "hidden": true,
3497
+ "name": "api-base-url-1",
3498
+ "hasDynamicHelp": false,
3499
+ "multiple": false,
3500
+ "type": "option"
3501
+ },
3502
+ "api-base-url-2": {
3503
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3504
+ "env": "PRIMITIVE_API_BASE_URL_2",
3505
+ "hidden": true,
3506
+ "name": "api-base-url-2",
3507
+ "hasDynamicHelp": false,
3508
+ "multiple": false,
3509
+ "type": "option"
3510
+ },
3511
+ "time": {
3512
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3513
+ "name": "time",
3514
+ "allowNo": false,
3515
+ "type": "boolean"
3516
+ },
3517
+ "id": {
3518
+ "description": "Resource UUID",
3519
+ "name": "id",
3520
+ "required": true,
3521
+ "hasDynamicHelp": false,
3522
+ "multiple": false,
3523
+ "type": "option"
3524
+ },
3525
+ "key": {
3526
+ "description": "Secret key. Must match `^[A-Z_][A-Z0-9_]*$`.",
3527
+ "name": "key",
3528
+ "required": true,
3529
+ "hasDynamicHelp": false,
3530
+ "multiple": false,
3531
+ "type": "option"
3532
+ },
3533
+ "raw-body": {
3534
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
3535
+ "name": "raw-body",
3536
+ "hasDynamicHelp": false,
3537
+ "multiple": false,
3538
+ "type": "option"
3539
+ },
3540
+ "body-file": {
3541
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
3542
+ "name": "body-file",
3543
+ "hasDynamicHelp": false,
3544
+ "multiple": false,
3545
+ "type": "option"
3546
+ },
3547
+ "value": {
3548
+ "description": "value",
3549
+ "name": "value",
3550
+ "hasDynamicHelp": false,
3551
+ "multiple": false,
3552
+ "type": "option"
3553
+ }
3554
+ },
3555
+ "hasDynamicHelp": false,
3556
+ "hiddenAliases": [],
3557
+ "id": "functions:set-function-secret",
3558
+ "pluginAlias": "@primitivedotdev/cli",
3559
+ "pluginName": "@primitivedotdev/cli",
3560
+ "pluginType": "core",
3561
+ "strict": true,
3562
+ "summary": "Set a secret by key",
3563
+ "enableJsonFlag": false
3564
+ },
3565
+ "functions:test-function": {
3566
+ "aliases": [],
3567
+ "args": {},
3568
+ "description": "Sends a real test email from a Primitive-controlled sender to a\nsynthetic local-part on one of the org's verified inbound\ndomains. The function fires through the normal MX delivery\npath, so reply / send-mail calls from inside the handler\nagainst the inbound's `email.id` work the same as in\nproduction. Returns immediately after the send is queued; the\ninvocation appears on the function's invocations list within a\nfew seconds.\n\nRequires that the function is currently `deployed`. Returns 422\nif the function is in `pending` or `failed` state, or if the\norg has no verified inbound domain to receive the test mail.\n",
3569
+ "flags": {
3570
+ "api-key": {
3571
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3572
+ "env": "PRIMITIVE_API_KEY",
3573
+ "name": "api-key",
3574
+ "hasDynamicHelp": false,
3575
+ "multiple": false,
3576
+ "type": "option"
3577
+ },
3578
+ "api-base-url-1": {
3579
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3580
+ "env": "PRIMITIVE_API_BASE_URL_1",
3581
+ "hidden": true,
3582
+ "name": "api-base-url-1",
3583
+ "hasDynamicHelp": false,
3584
+ "multiple": false,
3585
+ "type": "option"
3586
+ },
3587
+ "api-base-url-2": {
3588
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3589
+ "env": "PRIMITIVE_API_BASE_URL_2",
3590
+ "hidden": true,
3591
+ "name": "api-base-url-2",
3592
+ "hasDynamicHelp": false,
3593
+ "multiple": false,
3594
+ "type": "option"
3595
+ },
3596
+ "time": {
3597
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3598
+ "name": "time",
3599
+ "allowNo": false,
3600
+ "type": "boolean"
3601
+ },
3602
+ "id": {
3603
+ "description": "Resource UUID",
3604
+ "name": "id",
3605
+ "required": true,
3606
+ "hasDynamicHelp": false,
3607
+ "multiple": false,
3608
+ "type": "option"
3609
+ }
3610
+ },
3611
+ "hasDynamicHelp": false,
3612
+ "hiddenAliases": [],
3613
+ "id": "functions:test-function",
3614
+ "pluginAlias": "@primitivedotdev/cli",
3615
+ "pluginName": "@primitivedotdev/cli",
3616
+ "pluginType": "core",
3617
+ "strict": true,
3618
+ "summary": "Send a test invocation",
3619
+ "enableJsonFlag": false
3620
+ },
3621
+ "functions:update-function": {
3622
+ "aliases": [],
3623
+ "args": {},
3624
+ "description": "Replaces the function's source code with the body's `code` and\ntriggers a redeploy. Same size limits as `POST /functions`.\nUse this verb to push secret writes into the running handler:\npassing the same `code` re-runs the deploy and refreshes the\nbinding set with the latest values from the secrets table.\n\nOn a 502 deploy failure, the previously-deployed code stays\nlive; the runtime never serves a half-built bundle. The\n`deploy_error` field on the returned record carries the error\nthat came back from the runtime so you can surface it to users\nwithout polling.\n\n\nTip: prefer `primitive functions:redeploy --id <id> --file <bundle>` for file-input ergonomics. This raw command exists for callers passing JSON.",
3625
+ "flags": {
3626
+ "api-key": {
3627
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3628
+ "env": "PRIMITIVE_API_KEY",
3629
+ "name": "api-key",
3630
+ "hasDynamicHelp": false,
3631
+ "multiple": false,
3632
+ "type": "option"
3633
+ },
3634
+ "api-base-url-1": {
3635
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3636
+ "env": "PRIMITIVE_API_BASE_URL_1",
3637
+ "hidden": true,
3638
+ "name": "api-base-url-1",
3639
+ "hasDynamicHelp": false,
3640
+ "multiple": false,
3641
+ "type": "option"
3642
+ },
3643
+ "api-base-url-2": {
3644
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3645
+ "env": "PRIMITIVE_API_BASE_URL_2",
3646
+ "hidden": true,
3647
+ "name": "api-base-url-2",
3648
+ "hasDynamicHelp": false,
3649
+ "multiple": false,
3650
+ "type": "option"
3651
+ },
3652
+ "time": {
3653
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3654
+ "name": "time",
3655
+ "allowNo": false,
3656
+ "type": "boolean"
3657
+ },
3658
+ "id": {
3659
+ "description": "Resource UUID",
3660
+ "name": "id",
3661
+ "required": true,
3662
+ "hasDynamicHelp": false,
3663
+ "multiple": false,
3664
+ "type": "option"
3665
+ },
3666
+ "raw-body": {
3667
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
3668
+ "name": "raw-body",
3669
+ "hasDynamicHelp": false,
3670
+ "multiple": false,
3671
+ "type": "option"
3672
+ },
3673
+ "body-file": {
3674
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
3675
+ "name": "body-file",
3676
+ "hasDynamicHelp": false,
3677
+ "multiple": false,
3678
+ "type": "option"
3679
+ },
3680
+ "code": {
3681
+ "description": "New bundled handler. Same rules as CreateFunctionInput.code.",
3682
+ "name": "code",
3683
+ "hasDynamicHelp": false,
3684
+ "multiple": false,
3685
+ "type": "option"
3686
+ },
3687
+ "sourceMap": {
3688
+ "description": "sourceMap",
3689
+ "name": "sourceMap",
3690
+ "hasDynamicHelp": false,
3691
+ "multiple": false,
3692
+ "type": "option"
3693
+ }
3694
+ },
3695
+ "hasDynamicHelp": false,
3696
+ "hiddenAliases": [],
3697
+ "id": "functions:update-function",
3698
+ "pluginAlias": "@primitivedotdev/cli",
3699
+ "pluginName": "@primitivedotdev/cli",
3700
+ "pluginType": "core",
3701
+ "strict": true,
3702
+ "summary": "Update and redeploy a function",
3703
+ "enableJsonFlag": false
3704
+ },
3705
+ "sending:get-send-permissions": {
3706
+ "aliases": [],
3707
+ "args": {},
3708
+ "description": "Returns a flat list of rules describing every recipient the\ncaller may send to. Each rule has a `type`, a kind-specific\npayload, and a human-readable `description`. If any rule\nmatches the recipient, /send-mail will accept the send under\nthe recipient-scope check.\n\nThe endpoint is the answer to \"where can I send\" without\nexposing internal entitlement names. Agents that don't\nrecognize a `type` can still read the `description` prose\nand act on it.\n\nRule kinds, ordered broadest-first so an agent can stop\nscanning at the first match:\n\n 1. `any_recipient` (one entry, only when the org can send\n anywhere): every other rule below it is redundant.\n 2. `managed_zone` (always emitted, one per Primitive-managed\n zone): sends to any address at *.primitive.email or\n *.email.works always succeed; no entitlement required.\n 3. `your_domain` (one per active verified outbound domain\n owned by the org): sends to that domain are approved.\n 4. `address` (one per address that has authenticated\n inbound mail to the org, capped at `meta.address_cap`):\n sends to that exact address are approved.\n\nThe list is informational, not an authorization check.\n/send-mail remains the source of truth on whether an\nindividual send will succeed (it also enforces the\nfrom-address and the `send_mail` entitlement, which are\nnot recipient-scope concerns and are not represented here).\n",
3709
+ "flags": {
3710
+ "api-key": {
3711
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3712
+ "env": "PRIMITIVE_API_KEY",
3713
+ "name": "api-key",
3714
+ "hasDynamicHelp": false,
3715
+ "multiple": false,
3716
+ "type": "option"
3717
+ },
3718
+ "api-base-url-1": {
3719
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3720
+ "env": "PRIMITIVE_API_BASE_URL_1",
3721
+ "hidden": true,
3722
+ "name": "api-base-url-1",
3723
+ "hasDynamicHelp": false,
3724
+ "multiple": false,
3725
+ "type": "option"
3726
+ },
3727
+ "api-base-url-2": {
3728
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3729
+ "env": "PRIMITIVE_API_BASE_URL_2",
3730
+ "hidden": true,
3731
+ "name": "api-base-url-2",
3732
+ "hasDynamicHelp": false,
3733
+ "multiple": false,
3734
+ "type": "option"
3735
+ },
3736
+ "time": {
3737
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3738
+ "name": "time",
3739
+ "allowNo": false,
3740
+ "type": "boolean"
3741
+ }
3742
+ },
3743
+ "hasDynamicHelp": false,
3744
+ "hiddenAliases": [],
3745
+ "id": "sending:get-send-permissions",
3746
+ "pluginAlias": "@primitivedotdev/cli",
3747
+ "pluginName": "@primitivedotdev/cli",
3748
+ "pluginType": "core",
3749
+ "strict": true,
3750
+ "summary": "List send-permission rules",
3751
+ "enableJsonFlag": false
3752
+ },
3753
+ "sending:get-sent-email": {
3754
+ "aliases": [],
3755
+ "args": {},
3756
+ "description": "Returns the full sent-email record by id, including\n`body_text` and `body_html` (omitted from the listing\nendpoint to keep paginated responses small). Use this when\ndiagnosing a specific send, e.g. inspecting the receiver's\nSMTP response on a `bounced` row or pulling the gate\ndenial detail on a `gate_denied` row.\n",
3757
+ "flags": {
3758
+ "api-key": {
3759
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3760
+ "env": "PRIMITIVE_API_KEY",
3761
+ "name": "api-key",
3762
+ "hasDynamicHelp": false,
3763
+ "multiple": false,
3764
+ "type": "option"
3765
+ },
3766
+ "api-base-url-1": {
3767
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3768
+ "env": "PRIMITIVE_API_BASE_URL_1",
3769
+ "hidden": true,
3770
+ "name": "api-base-url-1",
3771
+ "hasDynamicHelp": false,
3772
+ "multiple": false,
3773
+ "type": "option"
3774
+ },
3775
+ "api-base-url-2": {
3776
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3777
+ "env": "PRIMITIVE_API_BASE_URL_2",
3778
+ "hidden": true,
3779
+ "name": "api-base-url-2",
3780
+ "hasDynamicHelp": false,
3781
+ "multiple": false,
3782
+ "type": "option"
3783
+ },
3784
+ "time": {
3785
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3786
+ "name": "time",
3787
+ "allowNo": false,
3788
+ "type": "boolean"
3789
+ },
3790
+ "id": {
3791
+ "description": "Resource UUID",
3792
+ "name": "id",
3793
+ "required": true,
3794
+ "hasDynamicHelp": false,
3795
+ "multiple": false,
3796
+ "type": "option"
3797
+ }
3798
+ },
3799
+ "hasDynamicHelp": false,
3800
+ "hiddenAliases": [],
3801
+ "id": "sending:get-sent-email",
3802
+ "pluginAlias": "@primitivedotdev/cli",
3803
+ "pluginName": "@primitivedotdev/cli",
3804
+ "pluginType": "core",
3805
+ "strict": true,
3806
+ "summary": "Get a sent email by id",
3807
+ "enableJsonFlag": false
3808
+ },
3809
+ "sending:list-sent-emails": {
3810
+ "aliases": [],
3811
+ "args": {},
3812
+ "description": "Returns a paginated list of OUTBOUND emails the caller's\norg has sent via /send-mail (and /emails/{id}/reply, which\nforwards through /send-mail). Includes every recorded\nattempt, including gate-denied attempts that the agent\nnever called and rows still in `queued` state.\n\nFor inbound mail received at your verified domains, see\n/emails. There is no unified send/receive history endpoint;\nthe two surfaces are intentionally separate because the\nunderlying tables, statuses, and lifecycle differ.\n\nEmail bodies (`body_text`, `body_html`) are NOT included on\nlist rows so a 50-row page can't balloon into a multi-MB\nresponse when sends are near the 5MB body cap. Use\n/sent-emails/{id} to fetch a single row with bodies, or\ncross-reference by `client_idempotency_key` if the caller\nalready has the body locally.\n",
3813
+ "flags": {
3814
+ "api-key": {
3815
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3816
+ "env": "PRIMITIVE_API_KEY",
3817
+ "name": "api-key",
3818
+ "hasDynamicHelp": false,
3819
+ "multiple": false,
3820
+ "type": "option"
3821
+ },
3822
+ "api-base-url-1": {
3823
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3824
+ "env": "PRIMITIVE_API_BASE_URL_1",
3825
+ "hidden": true,
3826
+ "name": "api-base-url-1",
3827
+ "hasDynamicHelp": false,
3828
+ "multiple": false,
3829
+ "type": "option"
3830
+ },
3831
+ "api-base-url-2": {
3832
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3833
+ "env": "PRIMITIVE_API_BASE_URL_2",
3834
+ "hidden": true,
3835
+ "name": "api-base-url-2",
3836
+ "hasDynamicHelp": false,
3837
+ "multiple": false,
3838
+ "type": "option"
3839
+ },
3840
+ "time": {
3841
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3842
+ "name": "time",
3843
+ "allowNo": false,
3844
+ "type": "boolean"
3845
+ },
3846
+ "cursor": {
3847
+ "description": "Pagination cursor from a previous response's `meta.cursor` field.\nFormat: `{ISO-datetime}|{id}`\n",
3848
+ "name": "cursor",
3849
+ "required": false,
3850
+ "hasDynamicHelp": false,
3851
+ "multiple": false,
3852
+ "type": "option"
3853
+ },
3854
+ "limit": {
3855
+ "description": "Number of results per page",
3856
+ "name": "limit",
3857
+ "required": false,
3858
+ "hasDynamicHelp": false,
3859
+ "multiple": false,
3860
+ "type": "option"
3861
+ },
3862
+ "status": {
3863
+ "description": "Filter to rows in this status. Useful for polling\nqueued rows that haven't transitioned, auditing\ngate-denied attempts, or listing only successful\ndeliveries.\n",
3864
+ "name": "status",
3865
+ "required": false,
3866
+ "hasDynamicHelp": false,
3867
+ "multiple": false,
3868
+ "type": "option"
3869
+ },
3870
+ "request-id": {
3871
+ "description": "Filter to the row matching a specific server-issued\n`request_id`. The /send-mail response surfaces\n`request_id` on every send; this lookup lets the\ncaller find the historical row for a given live call\nwithout remembering its `id`.\n",
3872
+ "name": "request-id",
3873
+ "required": false,
3874
+ "hasDynamicHelp": false,
3875
+ "multiple": false,
3876
+ "type": "option"
3877
+ },
3878
+ "idempotency-key": {
3879
+ "description": "Filter to rows with the given `client_idempotency_key`.\nMultiple rows can share a key (a retry that hit the\nidempotent-replay path returns the same row, but a\nretry with a DIFFERENT canonical payload under the\nsame key is rejected by /send-mail before the row is\nwritten, so duplicates are bounded).\n",
3880
+ "name": "idempotency-key",
3881
+ "required": false,
3882
+ "hasDynamicHelp": false,
3883
+ "multiple": false,
3884
+ "type": "option"
3885
+ },
3886
+ "date-from": {
3887
+ "description": "Inclusive lower bound on `created_at`.",
3888
+ "name": "date-from",
3889
+ "required": false,
3890
+ "hasDynamicHelp": false,
3891
+ "multiple": false,
3892
+ "type": "option"
3893
+ },
3894
+ "date-to": {
3895
+ "description": "Inclusive upper bound on `created_at`.",
3896
+ "name": "date-to",
3897
+ "required": false,
3898
+ "hasDynamicHelp": false,
3899
+ "multiple": false,
3900
+ "type": "option"
3901
+ }
3902
+ },
3903
+ "hasDynamicHelp": false,
3904
+ "hiddenAliases": [],
3905
+ "id": "sending:list-sent-emails",
3906
+ "pluginAlias": "@primitivedotdev/cli",
3907
+ "pluginName": "@primitivedotdev/cli",
3908
+ "pluginType": "core",
3909
+ "strict": true,
3910
+ "summary": "List outbound sent emails",
3911
+ "enableJsonFlag": false
3912
+ },
3913
+ "sending:reply-to-email": {
3914
+ "aliases": [],
3915
+ "args": {},
3916
+ "description": "Sends an outbound reply to the inbound email identified by `id`.\nThreading headers (`In-Reply-To`, `References`), recipient\nderivation (Reply-To, then From, then bare sender), and the\n`Re:` subject prefix are all derived server-side from the\nstored inbound row. The request body carries only the message\nbody and optional `wait` flag; passing any header or recipient\noverride is rejected by the schema (`additionalProperties:\nfalse`).\n\nForwards through the same gates as `/send-mail`: the response\nstatus, error envelope, and `idempotent_replay` flag mirror\nthe send-mail contract verbatim.\n",
3917
+ "flags": {
3918
+ "api-key": {
3919
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
3920
+ "env": "PRIMITIVE_API_KEY",
3921
+ "name": "api-key",
3922
+ "hasDynamicHelp": false,
3923
+ "multiple": false,
3924
+ "type": "option"
3925
+ },
3926
+ "api-base-url-1": {
3927
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
3928
+ "env": "PRIMITIVE_API_BASE_URL_1",
3929
+ "hidden": true,
3930
+ "name": "api-base-url-1",
3931
+ "hasDynamicHelp": false,
3932
+ "multiple": false,
3933
+ "type": "option"
3934
+ },
3935
+ "api-base-url-2": {
3936
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
3937
+ "env": "PRIMITIVE_API_BASE_URL_2",
3938
+ "hidden": true,
3939
+ "name": "api-base-url-2",
3940
+ "hasDynamicHelp": false,
3941
+ "multiple": false,
3942
+ "type": "option"
3943
+ },
3944
+ "time": {
3945
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
3946
+ "name": "time",
3947
+ "allowNo": false,
3948
+ "type": "boolean"
3949
+ },
3950
+ "id": {
3951
+ "description": "Resource UUID",
3952
+ "name": "id",
3953
+ "required": true,
3954
+ "hasDynamicHelp": false,
3955
+ "multiple": false,
3956
+ "type": "option"
3957
+ },
3958
+ "raw-body": {
3959
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
3960
+ "name": "raw-body",
3961
+ "hasDynamicHelp": false,
3962
+ "multiple": false,
3963
+ "type": "option"
3964
+ },
3965
+ "body-file": {
3966
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
3967
+ "name": "body-file",
3968
+ "hasDynamicHelp": false,
3969
+ "multiple": false,
3970
+ "type": "option"
3971
+ },
3972
+ "body-html": {
3973
+ "description": "HTML reply body. At least one of body_text or body_html is required.",
3974
+ "name": "body-html",
3975
+ "hasDynamicHelp": false,
3976
+ "multiple": false,
3977
+ "type": "option"
3978
+ },
3979
+ "body-text": {
3980
+ "description": "Plain-text reply body. At least one of body_text or body_html is required. The combined UTF-8 byte length of body_text and body_html must be at most 262144 bytes (same cap as send-mail).",
3981
+ "name": "body-text",
3982
+ "hasDynamicHelp": false,
3983
+ "multiple": false,
3984
+ "type": "option"
3985
+ },
3986
+ "from": {
3987
+ "description": "Optional override for the reply's From header. Defaults to the inbound's recipient. Use to add a display name (`\"Acme Support\" <agent@company.com>`) or to reply from a different verified outbound address (e.g. multi-team routing where support@ triages to billing@). The from-domain must be a verified outbound domain for your org, same as send-mail.",
3988
+ "name": "from",
3989
+ "hasDynamicHelp": false,
3990
+ "multiple": false,
3991
+ "type": "option"
3992
+ },
3993
+ "wait": {
3994
+ "description": "When true, wait for the first downstream SMTP delivery outcome before returning, mirroring the send-mail `wait` semantics.",
3995
+ "name": "wait",
3996
+ "allowNo": false,
3997
+ "type": "boolean"
3998
+ }
3999
+ },
4000
+ "hasDynamicHelp": false,
4001
+ "hiddenAliases": [],
4002
+ "id": "sending:reply-to-email",
4003
+ "pluginAlias": "@primitivedotdev/cli",
4004
+ "pluginName": "@primitivedotdev/cli",
4005
+ "pluginType": "core",
4006
+ "strict": true,
4007
+ "summary": "Reply to an inbound email",
4008
+ "enableJsonFlag": false
4009
+ },
4010
+ "sending:send-email": {
4011
+ "aliases": [],
4012
+ "args": {},
4013
+ "description": "Sends an outbound email through Primitive's outbound relay. By default\nthe request returns once the relay accepts the message for delivery.\nSet `wait: true` to wait for the first downstream SMTP delivery outcome.\n\n**Host routing.** /send-mail is served by the attachments-\nsupporting host (`https://api.primitive.dev/v1`) so the\nrequest body can carry inline attachments up to ~30 MiB raw.\nThe primary host (`https://www.primitive.dev/api/v1`) also\naccepts /send-mail for attachment-free sends; sends WITH\nattachments to the primary host return 413\n`attachments_unsupported_on_this_endpoint`. The typed SDKs\nroute /send-mail to the attachments host automatically.\n\n\nBody fields requiring --raw-body JSON (these are not exposed as flags):\n references array<string> Full ordered message-id chain for the thread.\n(* = required. Scalar body fields are exposed as individual --flag-name flags; see FLAGS above.)",
4014
+ "flags": {
4015
+ "api-key": {
4016
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
4017
+ "env": "PRIMITIVE_API_KEY",
4018
+ "name": "api-key",
4019
+ "hasDynamicHelp": false,
4020
+ "multiple": false,
4021
+ "type": "option"
4022
+ },
4023
+ "api-base-url-1": {
4024
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
4025
+ "env": "PRIMITIVE_API_BASE_URL_1",
4026
+ "hidden": true,
4027
+ "name": "api-base-url-1",
4028
+ "hasDynamicHelp": false,
4029
+ "multiple": false,
4030
+ "type": "option"
4031
+ },
4032
+ "api-base-url-2": {
4033
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
4034
+ "env": "PRIMITIVE_API_BASE_URL_2",
4035
+ "hidden": true,
4036
+ "name": "api-base-url-2",
4037
+ "hasDynamicHelp": false,
4038
+ "multiple": false,
4039
+ "type": "option"
4040
+ },
4041
+ "time": {
4042
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
4043
+ "name": "time",
4044
+ "allowNo": false,
4045
+ "type": "boolean"
4046
+ },
4047
+ "raw-body": {
4048
+ "description": "Full request body as raw JSON. Escape hatch for nested or complex fields (e.g. arrays); prefer per-field flags (e.g. --to, --from, --body-text) when available.",
4049
+ "name": "raw-body",
4050
+ "hasDynamicHelp": false,
4051
+ "multiple": false,
4052
+ "type": "option"
4053
+ },
4054
+ "body-file": {
4055
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
4056
+ "name": "body-file",
4057
+ "hasDynamicHelp": false,
4058
+ "multiple": false,
4059
+ "type": "option"
4060
+ },
4061
+ "from": {
4062
+ "description": "RFC 5322 From header. The sender domain must be a verified outbound domain for your organization.",
4063
+ "name": "from",
4064
+ "hasDynamicHelp": false,
4065
+ "multiple": false,
4066
+ "type": "option"
4067
+ },
4068
+ "subject": {
4069
+ "description": "Subject line for the outbound message",
4070
+ "name": "subject",
4071
+ "hasDynamicHelp": false,
4072
+ "multiple": false,
4073
+ "type": "option"
4074
+ },
4075
+ "to": {
4076
+ "description": "Recipient address. Recipient eligibility depends on your account's outbound entitlements.",
4077
+ "name": "to",
4078
+ "hasDynamicHelp": false,
4079
+ "multiple": false,
4080
+ "type": "option"
4081
+ },
4082
+ "body-html": {
4083
+ "description": "HTML message body. At least one of body_text or body_html is required. The combined UTF-8 byte length of body_text and body_html must be at most 262144 bytes.",
4084
+ "name": "body-html",
4085
+ "hasDynamicHelp": false,
4086
+ "multiple": false,
4087
+ "type": "option"
4088
+ },
4089
+ "body-text": {
4090
+ "description": "Plain-text message body. At least one of body_text or body_html is required. The combined UTF-8 byte length of body_text and body_html must be at most 262144 bytes.",
4091
+ "name": "body-text",
4092
+ "hasDynamicHelp": false,
4093
+ "multiple": false,
4094
+ "type": "option"
4095
+ },
4096
+ "in-reply-to": {
4097
+ "description": "Message-ID of the direct parent email when sending a threaded reply.",
4098
+ "name": "in-reply-to",
4099
+ "hasDynamicHelp": false,
4100
+ "multiple": false,
4101
+ "type": "option"
4102
+ },
4103
+ "wait": {
4104
+ "description": "When true, wait for the first downstream SMTP delivery outcome before returning.",
4105
+ "name": "wait",
4106
+ "allowNo": false,
4107
+ "type": "boolean"
4108
+ },
4109
+ "wait-timeout-ms": {
4110
+ "description": "Maximum time to wait for a delivery outcome when wait is true. Defaults to 30000.",
4111
+ "name": "wait-timeout-ms",
4112
+ "hasDynamicHelp": false,
4113
+ "multiple": false,
4114
+ "type": "option"
4115
+ }
4116
+ },
4117
+ "hasDynamicHelp": false,
4118
+ "hiddenAliases": [],
4119
+ "id": "sending:send-email",
4120
+ "pluginAlias": "@primitivedotdev/cli",
4121
+ "pluginName": "@primitivedotdev/cli",
4122
+ "pluginType": "core",
4123
+ "strict": true,
4124
+ "summary": "Send outbound email",
4125
+ "enableJsonFlag": false
4126
+ },
4127
+ "webhook-deliveries:list-deliveries": {
4128
+ "aliases": [],
4129
+ "args": {},
4130
+ "description": "Returns a paginated list of webhook delivery attempts. Each delivery\nincludes a nested `email` object with sender, recipient, and subject.\n",
4131
+ "flags": {
4132
+ "api-key": {
4133
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
4134
+ "env": "PRIMITIVE_API_KEY",
4135
+ "name": "api-key",
4136
+ "hasDynamicHelp": false,
4137
+ "multiple": false,
4138
+ "type": "option"
4139
+ },
4140
+ "api-base-url-1": {
4141
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
4142
+ "env": "PRIMITIVE_API_BASE_URL_1",
4143
+ "hidden": true,
4144
+ "name": "api-base-url-1",
4145
+ "hasDynamicHelp": false,
4146
+ "multiple": false,
4147
+ "type": "option"
4148
+ },
4149
+ "api-base-url-2": {
4150
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
4151
+ "env": "PRIMITIVE_API_BASE_URL_2",
4152
+ "hidden": true,
4153
+ "name": "api-base-url-2",
4154
+ "hasDynamicHelp": false,
4155
+ "multiple": false,
4156
+ "type": "option"
4157
+ },
4158
+ "time": {
4159
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
4160
+ "name": "time",
4161
+ "allowNo": false,
4162
+ "type": "boolean"
4163
+ },
4164
+ "cursor": {
4165
+ "description": "Pagination cursor from a previous response's `meta.cursor` field.\nFormat: `{ISO-datetime}|{id}`\n",
4166
+ "name": "cursor",
4167
+ "required": false,
4168
+ "hasDynamicHelp": false,
4169
+ "multiple": false,
4170
+ "type": "option"
4171
+ },
4172
+ "limit": {
4173
+ "description": "Number of results per page",
4174
+ "name": "limit",
4175
+ "required": false,
4176
+ "hasDynamicHelp": false,
4177
+ "multiple": false,
4178
+ "type": "option"
4179
+ },
4180
+ "email-id": {
4181
+ "description": "Filter by email ID",
4182
+ "name": "email-id",
4183
+ "required": false,
4184
+ "hasDynamicHelp": false,
4185
+ "multiple": false,
4186
+ "type": "option"
4187
+ },
4188
+ "status": {
4189
+ "description": "Filter by delivery status",
4190
+ "name": "status",
4191
+ "required": false,
4192
+ "hasDynamicHelp": false,
4193
+ "multiple": false,
4194
+ "options": [
4195
+ "pending",
4196
+ "delivered",
4197
+ "header_confirmed",
4198
+ "failed"
4199
+ ],
4200
+ "type": "option"
4201
+ },
4202
+ "date-from": {
4203
+ "description": "Filter deliveries created on or after this timestamp",
4204
+ "name": "date-from",
4205
+ "required": false,
4206
+ "hasDynamicHelp": false,
4207
+ "multiple": false,
4208
+ "type": "option"
4209
+ },
4210
+ "date-to": {
4211
+ "description": "Filter deliveries created on or before this timestamp",
4212
+ "name": "date-to",
4213
+ "required": false,
4214
+ "hasDynamicHelp": false,
4215
+ "multiple": false,
4216
+ "type": "option"
4217
+ }
4218
+ },
4219
+ "hasDynamicHelp": false,
4220
+ "hiddenAliases": [],
4221
+ "id": "webhook-deliveries:list-deliveries",
4222
+ "pluginAlias": "@primitivedotdev/cli",
4223
+ "pluginName": "@primitivedotdev/cli",
4224
+ "pluginType": "core",
4225
+ "strict": true,
4226
+ "summary": "List webhook deliveries",
4227
+ "enableJsonFlag": false
4228
+ },
4229
+ "webhook-deliveries:replay-delivery": {
4230
+ "aliases": [],
4231
+ "args": {},
4232
+ "description": "Re-sends the stored webhook payload from a previous delivery attempt.\nIf the original endpoint is still active, it is targeted. If the\noriginal endpoint was deleted, the oldest active endpoint is used.\nDeactivated endpoints cannot be replayed to. Rate limited per-org,\nsharing an org-wide budget with email replays.\n",
4233
+ "flags": {
4234
+ "api-key": {
4235
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
4236
+ "env": "PRIMITIVE_API_KEY",
4237
+ "name": "api-key",
4238
+ "hasDynamicHelp": false,
4239
+ "multiple": false,
4240
+ "type": "option"
4241
+ },
4242
+ "api-base-url-1": {
4243
+ "description": "Override the primary API base URL. Internal testing only; not documented to customers.",
4244
+ "env": "PRIMITIVE_API_BASE_URL_1",
4245
+ "hidden": true,
4246
+ "name": "api-base-url-1",
4247
+ "hasDynamicHelp": false,
4248
+ "multiple": false,
4249
+ "type": "option"
4250
+ },
4251
+ "api-base-url-2": {
4252
+ "description": "Override the attachments-supporting send host base URL. Internal testing only; not documented to customers.",
4253
+ "env": "PRIMITIVE_API_BASE_URL_2",
4254
+ "hidden": true,
4255
+ "name": "api-base-url-2",
4256
+ "hasDynamicHelp": false,
4257
+ "multiple": false,
4258
+ "type": "option"
4259
+ },
4260
+ "time": {
4261
+ "description": "Print the wall-clock duration of this command to stderr after it completes (e.g. `[time: 1.34s]`). Useful for measuring `--wait` send latency, comparing CLI overhead, or capturing timing in scripts.",
4262
+ "name": "time",
4263
+ "allowNo": false,
4264
+ "type": "boolean"
4265
+ },
4266
+ "id": {
4267
+ "description": "Delivery ID (numeric)",
4268
+ "name": "id",
4269
+ "required": true,
4270
+ "hasDynamicHelp": false,
4271
+ "multiple": false,
4272
+ "type": "option"
4273
+ }
4274
+ },
4275
+ "hasDynamicHelp": false,
4276
+ "hiddenAliases": [],
4277
+ "id": "webhook-deliveries:replay-delivery",
4278
+ "pluginAlias": "@primitivedotdev/cli",
4279
+ "pluginName": "@primitivedotdev/cli",
4280
+ "pluginType": "core",
4281
+ "strict": true,
4282
+ "summary": "Replay a webhook delivery",
4283
+ "enableJsonFlag": false
4284
+ }
4285
+ },
4286
+ "version": "0.24.0"
4287
+ }