@primitivedotdev/sdk 0.17.0 → 0.19.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.
@@ -80,7 +80,7 @@
80
80
  ],
81
81
  "flags": {
82
82
  "api-key": {
83
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
83
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
84
84
  "env": "PRIMITIVE_API_KEY",
85
85
  "name": "api-key",
86
86
  "hasDynamicHelp": false,
@@ -150,6 +150,12 @@
150
150
  "hasDynamicHelp": false,
151
151
  "multiple": false,
152
152
  "type": "option"
153
+ },
154
+ "time": {
155
+ "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.",
156
+ "name": "time",
157
+ "allowNo": false,
158
+ "type": "boolean"
153
159
  }
154
160
  },
155
161
  "hasDynamicHelp": false,
@@ -162,6 +168,82 @@
162
168
  "summary": "Send an email (simplified, agent-friendly)",
163
169
  "enableJsonFlag": false
164
170
  },
171
+ "login": {
172
+ "aliases": [],
173
+ "args": {},
174
+ "description": "Log in by opening Primitive in your browser and saving an org-scoped CLI API key locally.",
175
+ "examples": [
176
+ "<%= config.bin %> login",
177
+ "<%= config.bin %> login --device-name work-laptop",
178
+ "<%= config.bin %> login --force"
179
+ ],
180
+ "flags": {
181
+ "base-url": {
182
+ "description": "API base URL (defaults to PRIMITIVE_API_URL or production)",
183
+ "env": "PRIMITIVE_API_URL",
184
+ "name": "base-url",
185
+ "hasDynamicHelp": false,
186
+ "multiple": false,
187
+ "type": "option"
188
+ },
189
+ "device-name": {
190
+ "description": "Device name shown in the browser approval screen",
191
+ "name": "device-name",
192
+ "hasDynamicHelp": false,
193
+ "multiple": false,
194
+ "type": "option"
195
+ },
196
+ "no-browser": {
197
+ "description": "Do not attempt to open the browser automatically",
198
+ "name": "no-browser",
199
+ "allowNo": false,
200
+ "type": "boolean"
201
+ },
202
+ "force": {
203
+ "char": "f",
204
+ "description": "Replace saved credentials without first verifying the existing login",
205
+ "name": "force",
206
+ "allowNo": false,
207
+ "type": "boolean"
208
+ }
209
+ },
210
+ "hasDynamicHelp": false,
211
+ "hiddenAliases": [],
212
+ "id": "login",
213
+ "pluginAlias": "@primitivedotdev/sdk",
214
+ "pluginName": "@primitivedotdev/sdk",
215
+ "pluginType": "core",
216
+ "strict": true,
217
+ "summary": "Log in with browser approval",
218
+ "enableJsonFlag": false
219
+ },
220
+ "logout": {
221
+ "aliases": [],
222
+ "args": {},
223
+ "description": "Log out by revoking the saved Primitive CLI API key and deleting local credentials.",
224
+ "examples": [
225
+ "<%= config.bin %> logout"
226
+ ],
227
+ "flags": {
228
+ "base-url": {
229
+ "description": "Override the API base URL used for key revocation",
230
+ "env": "PRIMITIVE_API_URL",
231
+ "name": "base-url",
232
+ "hasDynamicHelp": false,
233
+ "multiple": false,
234
+ "type": "option"
235
+ }
236
+ },
237
+ "hasDynamicHelp": false,
238
+ "hiddenAliases": [],
239
+ "id": "logout",
240
+ "pluginAlias": "@primitivedotdev/sdk",
241
+ "pluginName": "@primitivedotdev/sdk",
242
+ "pluginType": "core",
243
+ "strict": true,
244
+ "summary": "Log out and revoke the saved CLI key",
245
+ "enableJsonFlag": false
246
+ },
165
247
  "whoami": {
166
248
  "aliases": [],
167
249
  "args": {},
@@ -172,7 +254,7 @@
172
254
  ],
173
255
  "flags": {
174
256
  "api-key": {
175
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
257
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
176
258
  "env": "PRIMITIVE_API_KEY",
177
259
  "name": "api-key",
178
260
  "hasDynamicHelp": false,
@@ -186,6 +268,12 @@
186
268
  "hasDynamicHelp": false,
187
269
  "multiple": false,
188
270
  "type": "option"
271
+ },
272
+ "time": {
273
+ "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.",
274
+ "name": "time",
275
+ "allowNo": false,
276
+ "type": "boolean"
189
277
  }
190
278
  },
191
279
  "hasDynamicHelp": false,
@@ -210,7 +298,7 @@
210
298
  ],
211
299
  "flags": {
212
300
  "api-key": {
213
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
301
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
214
302
  "env": "PRIMITIVE_API_KEY",
215
303
  "name": "api-key",
216
304
  "hasDynamicHelp": false,
@@ -238,6 +326,12 @@
238
326
  "name": "json",
239
327
  "allowNo": false,
240
328
  "type": "boolean"
329
+ },
330
+ "time": {
331
+ "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.",
332
+ "name": "time",
333
+ "allowNo": false,
334
+ "type": "boolean"
241
335
  }
242
336
  },
243
337
  "hasDynamicHelp": false,
@@ -256,7 +350,7 @@
256
350
  "description": "GET /account",
257
351
  "flags": {
258
352
  "api-key": {
259
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
353
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
260
354
  "env": "PRIMITIVE_API_KEY",
261
355
  "name": "api-key",
262
356
  "hasDynamicHelp": false,
@@ -270,6 +364,12 @@
270
364
  "hasDynamicHelp": false,
271
365
  "multiple": false,
272
366
  "type": "option"
367
+ },
368
+ "time": {
369
+ "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.",
370
+ "name": "time",
371
+ "allowNo": false,
372
+ "type": "boolean"
273
373
  }
274
374
  },
275
375
  "hasDynamicHelp": false,
@@ -288,7 +388,7 @@
288
388
  "description": "GET /account/storage",
289
389
  "flags": {
290
390
  "api-key": {
291
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
391
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
292
392
  "env": "PRIMITIVE_API_KEY",
293
393
  "name": "api-key",
294
394
  "hasDynamicHelp": false,
@@ -302,6 +402,12 @@
302
402
  "hasDynamicHelp": false,
303
403
  "multiple": false,
304
404
  "type": "option"
405
+ },
406
+ "time": {
407
+ "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.",
408
+ "name": "time",
409
+ "allowNo": false,
410
+ "type": "boolean"
305
411
  }
306
412
  },
307
413
  "hasDynamicHelp": false,
@@ -320,7 +426,7 @@
320
426
  "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",
321
427
  "flags": {
322
428
  "api-key": {
323
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
429
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
324
430
  "env": "PRIMITIVE_API_KEY",
325
431
  "name": "api-key",
326
432
  "hasDynamicHelp": false,
@@ -334,6 +440,12 @@
334
440
  "hasDynamicHelp": false,
335
441
  "multiple": false,
336
442
  "type": "option"
443
+ },
444
+ "time": {
445
+ "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.",
446
+ "name": "time",
447
+ "allowNo": false,
448
+ "type": "boolean"
337
449
  }
338
450
  },
339
451
  "hasDynamicHelp": false,
@@ -352,7 +464,7 @@
352
464
  "description": "Generates a new webhook signing secret, replacing the current one.\nRate limited to once per 60 minutes.\n",
353
465
  "flags": {
354
466
  "api-key": {
355
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
467
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
356
468
  "env": "PRIMITIVE_API_KEY",
357
469
  "name": "api-key",
358
470
  "hasDynamicHelp": false,
@@ -366,6 +478,12 @@
366
478
  "hasDynamicHelp": false,
367
479
  "multiple": false,
368
480
  "type": "option"
481
+ },
482
+ "time": {
483
+ "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.",
484
+ "name": "time",
485
+ "allowNo": false,
486
+ "type": "boolean"
369
487
  }
370
488
  },
371
489
  "hasDynamicHelp": false,
@@ -384,7 +502,7 @@
384
502
  "description": "PATCH /account",
385
503
  "flags": {
386
504
  "api-key": {
387
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
505
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
388
506
  "env": "PRIMITIVE_API_KEY",
389
507
  "name": "api-key",
390
508
  "hasDynamicHelp": false,
@@ -399,6 +517,12 @@
399
517
  "multiple": false,
400
518
  "type": "option"
401
519
  },
520
+ "time": {
521
+ "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.",
522
+ "name": "time",
523
+ "allowNo": false,
524
+ "type": "boolean"
525
+ },
402
526
  "raw-body": {
403
527
  "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.",
404
528
  "name": "raw-body",
@@ -437,13 +561,190 @@
437
561
  "summary": "Update account settings",
438
562
  "enableJsonFlag": false
439
563
  },
564
+ "cli:cli-logout": {
565
+ "aliases": [],
566
+ "args": {},
567
+ "description": "Revokes the API key used to authenticate the request. CLI clients use\nthis endpoint during `primitive logout` before removing local credentials.\n",
568
+ "flags": {
569
+ "api-key": {
570
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
571
+ "env": "PRIMITIVE_API_KEY",
572
+ "name": "api-key",
573
+ "hasDynamicHelp": false,
574
+ "multiple": false,
575
+ "type": "option"
576
+ },
577
+ "base-url": {
578
+ "description": "API base URL (defaults to PRIMITIVE_API_URL or production)",
579
+ "env": "PRIMITIVE_API_URL",
580
+ "name": "base-url",
581
+ "hasDynamicHelp": false,
582
+ "multiple": false,
583
+ "type": "option"
584
+ },
585
+ "time": {
586
+ "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.",
587
+ "name": "time",
588
+ "allowNo": false,
589
+ "type": "boolean"
590
+ },
591
+ "raw-body": {
592
+ "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.",
593
+ "name": "raw-body",
594
+ "hasDynamicHelp": false,
595
+ "multiple": false,
596
+ "type": "option"
597
+ },
598
+ "body-file": {
599
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
600
+ "name": "body-file",
601
+ "hasDynamicHelp": false,
602
+ "multiple": false,
603
+ "type": "option"
604
+ },
605
+ "key-id": {
606
+ "description": "Optional key id guard; when provided it must match the authenticated API key",
607
+ "name": "key-id",
608
+ "hasDynamicHelp": false,
609
+ "multiple": false,
610
+ "type": "option"
611
+ }
612
+ },
613
+ "hasDynamicHelp": false,
614
+ "hiddenAliases": [],
615
+ "id": "cli:cli-logout",
616
+ "pluginAlias": "@primitivedotdev/sdk",
617
+ "pluginName": "@primitivedotdev/sdk",
618
+ "pluginType": "core",
619
+ "strict": true,
620
+ "summary": "Revoke the current CLI API key",
621
+ "enableJsonFlag": false
622
+ },
623
+ "cli:poll-cli-login": {
624
+ "aliases": [],
625
+ "args": {},
626
+ "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",
627
+ "flags": {
628
+ "api-key": {
629
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
630
+ "env": "PRIMITIVE_API_KEY",
631
+ "name": "api-key",
632
+ "hasDynamicHelp": false,
633
+ "multiple": false,
634
+ "type": "option"
635
+ },
636
+ "base-url": {
637
+ "description": "API base URL (defaults to PRIMITIVE_API_URL or production)",
638
+ "env": "PRIMITIVE_API_URL",
639
+ "name": "base-url",
640
+ "hasDynamicHelp": false,
641
+ "multiple": false,
642
+ "type": "option"
643
+ },
644
+ "time": {
645
+ "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.",
646
+ "name": "time",
647
+ "allowNo": false,
648
+ "type": "boolean"
649
+ },
650
+ "raw-body": {
651
+ "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.",
652
+ "name": "raw-body",
653
+ "hasDynamicHelp": false,
654
+ "multiple": false,
655
+ "type": "option"
656
+ },
657
+ "body-file": {
658
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
659
+ "name": "body-file",
660
+ "hasDynamicHelp": false,
661
+ "multiple": false,
662
+ "type": "option"
663
+ },
664
+ "device-code": {
665
+ "description": "device_code",
666
+ "name": "device-code",
667
+ "hasDynamicHelp": false,
668
+ "multiple": false,
669
+ "type": "option"
670
+ }
671
+ },
672
+ "hasDynamicHelp": false,
673
+ "hiddenAliases": [],
674
+ "id": "cli:poll-cli-login",
675
+ "pluginAlias": "@primitivedotdev/sdk",
676
+ "pluginName": "@primitivedotdev/sdk",
677
+ "pluginType": "core",
678
+ "strict": true,
679
+ "summary": "Poll CLI browser login",
680
+ "enableJsonFlag": false
681
+ },
682
+ "cli:start-cli-login": {
683
+ "aliases": [],
684
+ "args": {},
685
+ "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.)",
686
+ "flags": {
687
+ "api-key": {
688
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
689
+ "env": "PRIMITIVE_API_KEY",
690
+ "name": "api-key",
691
+ "hasDynamicHelp": false,
692
+ "multiple": false,
693
+ "type": "option"
694
+ },
695
+ "base-url": {
696
+ "description": "API base URL (defaults to PRIMITIVE_API_URL or production)",
697
+ "env": "PRIMITIVE_API_URL",
698
+ "name": "base-url",
699
+ "hasDynamicHelp": false,
700
+ "multiple": false,
701
+ "type": "option"
702
+ },
703
+ "time": {
704
+ "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.",
705
+ "name": "time",
706
+ "allowNo": false,
707
+ "type": "boolean"
708
+ },
709
+ "raw-body": {
710
+ "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.",
711
+ "name": "raw-body",
712
+ "hasDynamicHelp": false,
713
+ "multiple": false,
714
+ "type": "option"
715
+ },
716
+ "body-file": {
717
+ "description": "Path to a JSON file used as the request body. Same role as --raw-body for callers passing a saved payload.",
718
+ "name": "body-file",
719
+ "hasDynamicHelp": false,
720
+ "multiple": false,
721
+ "type": "option"
722
+ },
723
+ "device-name": {
724
+ "description": "Human-readable device name shown during browser approval",
725
+ "name": "device-name",
726
+ "hasDynamicHelp": false,
727
+ "multiple": false,
728
+ "type": "option"
729
+ }
730
+ },
731
+ "hasDynamicHelp": false,
732
+ "hiddenAliases": [],
733
+ "id": "cli:start-cli-login",
734
+ "pluginAlias": "@primitivedotdev/sdk",
735
+ "pluginName": "@primitivedotdev/sdk",
736
+ "pluginType": "core",
737
+ "strict": true,
738
+ "summary": "Start CLI browser login",
739
+ "enableJsonFlag": false
740
+ },
440
741
  "domains:add-domain": {
441
742
  "aliases": [],
442
743
  "args": {},
443
744
  "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",
444
745
  "flags": {
445
746
  "api-key": {
446
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
747
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
447
748
  "env": "PRIMITIVE_API_KEY",
448
749
  "name": "api-key",
449
750
  "hasDynamicHelp": false,
@@ -458,6 +759,12 @@
458
759
  "multiple": false,
459
760
  "type": "option"
460
761
  },
762
+ "time": {
763
+ "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.",
764
+ "name": "time",
765
+ "allowNo": false,
766
+ "type": "boolean"
767
+ },
461
768
  "raw-body": {
462
769
  "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.",
463
770
  "name": "raw-body",
@@ -496,7 +803,7 @@
496
803
  "description": "Deletes a verified or unverified domain claim.",
497
804
  "flags": {
498
805
  "api-key": {
499
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
806
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
500
807
  "env": "PRIMITIVE_API_KEY",
501
808
  "name": "api-key",
502
809
  "hasDynamicHelp": false,
@@ -511,6 +818,12 @@
511
818
  "multiple": false,
512
819
  "type": "option"
513
820
  },
821
+ "time": {
822
+ "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.",
823
+ "name": "time",
824
+ "allowNo": false,
825
+ "type": "boolean"
826
+ },
514
827
  "id": {
515
828
  "description": "Resource UUID",
516
829
  "name": "id",
@@ -536,7 +849,7 @@
536
849
  "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",
537
850
  "flags": {
538
851
  "api-key": {
539
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
852
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
540
853
  "env": "PRIMITIVE_API_KEY",
541
854
  "name": "api-key",
542
855
  "hasDynamicHelp": false,
@@ -550,6 +863,12 @@
550
863
  "hasDynamicHelp": false,
551
864
  "multiple": false,
552
865
  "type": "option"
866
+ },
867
+ "time": {
868
+ "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.",
869
+ "name": "time",
870
+ "allowNo": false,
871
+ "type": "boolean"
553
872
  }
554
873
  },
555
874
  "hasDynamicHelp": false,
@@ -568,7 +887,7 @@
568
887
  "description": "Update a verified domain's settings. Only verified domains can be\nupdated. Per-domain spam thresholds require a Pro plan.\n",
569
888
  "flags": {
570
889
  "api-key": {
571
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
890
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
572
891
  "env": "PRIMITIVE_API_KEY",
573
892
  "name": "api-key",
574
893
  "hasDynamicHelp": false,
@@ -583,6 +902,12 @@
583
902
  "multiple": false,
584
903
  "type": "option"
585
904
  },
905
+ "time": {
906
+ "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.",
907
+ "name": "time",
908
+ "allowNo": false,
909
+ "type": "boolean"
910
+ },
586
911
  "id": {
587
912
  "description": "Resource UUID",
588
913
  "name": "id",
@@ -635,7 +960,7 @@
635
960
  "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",
636
961
  "flags": {
637
962
  "api-key": {
638
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
963
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
639
964
  "env": "PRIMITIVE_API_KEY",
640
965
  "name": "api-key",
641
966
  "hasDynamicHelp": false,
@@ -650,6 +975,12 @@
650
975
  "multiple": false,
651
976
  "type": "option"
652
977
  },
978
+ "time": {
979
+ "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.",
980
+ "name": "time",
981
+ "allowNo": false,
982
+ "type": "boolean"
983
+ },
653
984
  "id": {
654
985
  "description": "Resource UUID",
655
986
  "name": "id",
@@ -675,7 +1006,7 @@
675
1006
  "description": "DELETE /emails/{id}",
676
1007
  "flags": {
677
1008
  "api-key": {
678
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1009
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
679
1010
  "env": "PRIMITIVE_API_KEY",
680
1011
  "name": "api-key",
681
1012
  "hasDynamicHelp": false,
@@ -690,6 +1021,12 @@
690
1021
  "multiple": false,
691
1022
  "type": "option"
692
1023
  },
1024
+ "time": {
1025
+ "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.",
1026
+ "name": "time",
1027
+ "allowNo": false,
1028
+ "type": "boolean"
1029
+ },
693
1030
  "id": {
694
1031
  "description": "Resource UUID",
695
1032
  "name": "id",
@@ -712,10 +1049,10 @@
712
1049
  "emails:discard-email-content": {
713
1050
  "aliases": [],
714
1051
  "args": {},
715
- "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",
1052
+ "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",
716
1053
  "flags": {
717
1054
  "api-key": {
718
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1055
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
719
1056
  "env": "PRIMITIVE_API_KEY",
720
1057
  "name": "api-key",
721
1058
  "hasDynamicHelp": false,
@@ -730,6 +1067,12 @@
730
1067
  "multiple": false,
731
1068
  "type": "option"
732
1069
  },
1070
+ "time": {
1071
+ "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.",
1072
+ "name": "time",
1073
+ "allowNo": false,
1074
+ "type": "boolean"
1075
+ },
733
1076
  "id": {
734
1077
  "description": "Resource UUID",
735
1078
  "name": "id",
@@ -755,7 +1098,7 @@
755
1098
  "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",
756
1099
  "flags": {
757
1100
  "api-key": {
758
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1101
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
759
1102
  "env": "PRIMITIVE_API_KEY",
760
1103
  "name": "api-key",
761
1104
  "hasDynamicHelp": false,
@@ -770,6 +1113,12 @@
770
1113
  "multiple": false,
771
1114
  "type": "option"
772
1115
  },
1116
+ "time": {
1117
+ "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.",
1118
+ "name": "time",
1119
+ "allowNo": false,
1120
+ "type": "boolean"
1121
+ },
773
1122
  "id": {
774
1123
  "description": "Resource UUID",
775
1124
  "name": "id",
@@ -810,7 +1159,7 @@
810
1159
  "description": "Downloads the raw RFC 822 email file (.eml). Authenticates via\na signed download token (provided in webhook payloads) or a\nvalid session.\n",
811
1160
  "flags": {
812
1161
  "api-key": {
813
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1162
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
814
1163
  "env": "PRIMITIVE_API_KEY",
815
1164
  "name": "api-key",
816
1165
  "hasDynamicHelp": false,
@@ -825,6 +1174,12 @@
825
1174
  "multiple": false,
826
1175
  "type": "option"
827
1176
  },
1177
+ "time": {
1178
+ "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.",
1179
+ "name": "time",
1180
+ "allowNo": false,
1181
+ "type": "boolean"
1182
+ },
828
1183
  "id": {
829
1184
  "description": "Resource UUID",
830
1185
  "name": "id",
@@ -865,7 +1220,7 @@
865
1220
  "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",
866
1221
  "flags": {
867
1222
  "api-key": {
868
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1223
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
869
1224
  "env": "PRIMITIVE_API_KEY",
870
1225
  "name": "api-key",
871
1226
  "hasDynamicHelp": false,
@@ -880,6 +1235,12 @@
880
1235
  "multiple": false,
881
1236
  "type": "option"
882
1237
  },
1238
+ "time": {
1239
+ "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.",
1240
+ "name": "time",
1241
+ "allowNo": false,
1242
+ "type": "boolean"
1243
+ },
883
1244
  "id": {
884
1245
  "description": "Resource UUID",
885
1246
  "name": "id",
@@ -905,7 +1266,7 @@
905
1266
  "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",
906
1267
  "flags": {
907
1268
  "api-key": {
908
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1269
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
909
1270
  "env": "PRIMITIVE_API_KEY",
910
1271
  "name": "api-key",
911
1272
  "hasDynamicHelp": false,
@@ -920,6 +1281,12 @@
920
1281
  "multiple": false,
921
1282
  "type": "option"
922
1283
  },
1284
+ "time": {
1285
+ "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.",
1286
+ "name": "time",
1287
+ "allowNo": false,
1288
+ "type": "boolean"
1289
+ },
923
1290
  "cursor": {
924
1291
  "description": "Pagination cursor from a previous response's `meta.cursor` field.\nFormat: `{ISO-datetime}|{id}`\n",
925
1292
  "name": "cursor",
@@ -993,7 +1360,7 @@
993
1360
  "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",
994
1361
  "flags": {
995
1362
  "api-key": {
996
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1363
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
997
1364
  "env": "PRIMITIVE_API_KEY",
998
1365
  "name": "api-key",
999
1366
  "hasDynamicHelp": false,
@@ -1008,6 +1375,12 @@
1008
1375
  "multiple": false,
1009
1376
  "type": "option"
1010
1377
  },
1378
+ "time": {
1379
+ "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.",
1380
+ "name": "time",
1381
+ "allowNo": false,
1382
+ "type": "boolean"
1383
+ },
1011
1384
  "id": {
1012
1385
  "description": "Resource UUID",
1013
1386
  "name": "id",
@@ -1033,7 +1406,7 @@
1033
1406
  "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.)",
1034
1407
  "flags": {
1035
1408
  "api-key": {
1036
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1409
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1037
1410
  "env": "PRIMITIVE_API_KEY",
1038
1411
  "name": "api-key",
1039
1412
  "hasDynamicHelp": false,
@@ -1048,6 +1421,12 @@
1048
1421
  "multiple": false,
1049
1422
  "type": "option"
1050
1423
  },
1424
+ "time": {
1425
+ "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.",
1426
+ "name": "time",
1427
+ "allowNo": false,
1428
+ "type": "boolean"
1429
+ },
1051
1430
  "raw-body": {
1052
1431
  "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.",
1053
1432
  "name": "raw-body",
@@ -1099,7 +1478,7 @@
1099
1478
  "description": "Soft-deletes a webhook endpoint. The endpoint will no longer\nreceive webhook deliveries.\n",
1100
1479
  "flags": {
1101
1480
  "api-key": {
1102
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1481
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1103
1482
  "env": "PRIMITIVE_API_KEY",
1104
1483
  "name": "api-key",
1105
1484
  "hasDynamicHelp": false,
@@ -1114,6 +1493,12 @@
1114
1493
  "multiple": false,
1115
1494
  "type": "option"
1116
1495
  },
1496
+ "time": {
1497
+ "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.",
1498
+ "name": "time",
1499
+ "allowNo": false,
1500
+ "type": "boolean"
1501
+ },
1117
1502
  "id": {
1118
1503
  "description": "Resource UUID",
1119
1504
  "name": "id",
@@ -1139,7 +1524,7 @@
1139
1524
  "description": "Returns all active (non-deleted) webhook endpoints.",
1140
1525
  "flags": {
1141
1526
  "api-key": {
1142
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1527
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1143
1528
  "env": "PRIMITIVE_API_KEY",
1144
1529
  "name": "api-key",
1145
1530
  "hasDynamicHelp": false,
@@ -1153,6 +1538,12 @@
1153
1538
  "hasDynamicHelp": false,
1154
1539
  "multiple": false,
1155
1540
  "type": "option"
1541
+ },
1542
+ "time": {
1543
+ "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.",
1544
+ "name": "time",
1545
+ "allowNo": false,
1546
+ "type": "boolean"
1156
1547
  }
1157
1548
  },
1158
1549
  "hasDynamicHelp": false,
@@ -1171,7 +1562,7 @@
1171
1562
  "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",
1172
1563
  "flags": {
1173
1564
  "api-key": {
1174
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1565
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1175
1566
  "env": "PRIMITIVE_API_KEY",
1176
1567
  "name": "api-key",
1177
1568
  "hasDynamicHelp": false,
@@ -1186,6 +1577,12 @@
1186
1577
  "multiple": false,
1187
1578
  "type": "option"
1188
1579
  },
1580
+ "time": {
1581
+ "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.",
1582
+ "name": "time",
1583
+ "allowNo": false,
1584
+ "type": "boolean"
1585
+ },
1189
1586
  "id": {
1190
1587
  "description": "Resource UUID",
1191
1588
  "name": "id",
@@ -1211,7 +1608,7 @@
1211
1608
  "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.)",
1212
1609
  "flags": {
1213
1610
  "api-key": {
1214
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1611
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1215
1612
  "env": "PRIMITIVE_API_KEY",
1216
1613
  "name": "api-key",
1217
1614
  "hasDynamicHelp": false,
@@ -1226,6 +1623,12 @@
1226
1623
  "multiple": false,
1227
1624
  "type": "option"
1228
1625
  },
1626
+ "time": {
1627
+ "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.",
1628
+ "name": "time",
1629
+ "allowNo": false,
1630
+ "type": "boolean"
1631
+ },
1229
1632
  "id": {
1230
1633
  "description": "Resource UUID",
1231
1634
  "name": "id",
@@ -1285,7 +1688,7 @@
1285
1688
  "description": "Creates a new whitelist or blocklist filter. Per-domain filters\nrequire a Pro plan. Patterns are stored as lowercase.\n",
1286
1689
  "flags": {
1287
1690
  "api-key": {
1288
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1691
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1289
1692
  "env": "PRIMITIVE_API_KEY",
1290
1693
  "name": "api-key",
1291
1694
  "hasDynamicHelp": false,
@@ -1300,6 +1703,12 @@
1300
1703
  "multiple": false,
1301
1704
  "type": "option"
1302
1705
  },
1706
+ "time": {
1707
+ "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.",
1708
+ "name": "time",
1709
+ "allowNo": false,
1710
+ "type": "boolean"
1711
+ },
1303
1712
  "raw-body": {
1304
1713
  "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.",
1305
1714
  "name": "raw-body",
@@ -1356,7 +1765,7 @@
1356
1765
  "description": "DELETE /filters/{id}",
1357
1766
  "flags": {
1358
1767
  "api-key": {
1359
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1768
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1360
1769
  "env": "PRIMITIVE_API_KEY",
1361
1770
  "name": "api-key",
1362
1771
  "hasDynamicHelp": false,
@@ -1371,6 +1780,12 @@
1371
1780
  "multiple": false,
1372
1781
  "type": "option"
1373
1782
  },
1783
+ "time": {
1784
+ "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.",
1785
+ "name": "time",
1786
+ "allowNo": false,
1787
+ "type": "boolean"
1788
+ },
1374
1789
  "id": {
1375
1790
  "description": "Resource UUID",
1376
1791
  "name": "id",
@@ -1396,7 +1811,7 @@
1396
1811
  "description": "Returns all whitelist and blocklist filter rules.",
1397
1812
  "flags": {
1398
1813
  "api-key": {
1399
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1814
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1400
1815
  "env": "PRIMITIVE_API_KEY",
1401
1816
  "name": "api-key",
1402
1817
  "hasDynamicHelp": false,
@@ -1410,6 +1825,12 @@
1410
1825
  "hasDynamicHelp": false,
1411
1826
  "multiple": false,
1412
1827
  "type": "option"
1828
+ },
1829
+ "time": {
1830
+ "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.",
1831
+ "name": "time",
1832
+ "allowNo": false,
1833
+ "type": "boolean"
1413
1834
  }
1414
1835
  },
1415
1836
  "hasDynamicHelp": false,
@@ -1428,7 +1849,7 @@
1428
1849
  "description": "Toggle a filter's enabled state.",
1429
1850
  "flags": {
1430
1851
  "api-key": {
1431
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1852
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1432
1853
  "env": "PRIMITIVE_API_KEY",
1433
1854
  "name": "api-key",
1434
1855
  "hasDynamicHelp": false,
@@ -1443,6 +1864,12 @@
1443
1864
  "multiple": false,
1444
1865
  "type": "option"
1445
1866
  },
1867
+ "time": {
1868
+ "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.",
1869
+ "name": "time",
1870
+ "allowNo": false,
1871
+ "type": "boolean"
1872
+ },
1446
1873
  "id": {
1447
1874
  "description": "Resource UUID",
1448
1875
  "name": "id",
@@ -1488,7 +1915,7 @@
1488
1915
  "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",
1489
1916
  "flags": {
1490
1917
  "api-key": {
1491
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1918
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1492
1919
  "env": "PRIMITIVE_API_KEY",
1493
1920
  "name": "api-key",
1494
1921
  "hasDynamicHelp": false,
@@ -1502,6 +1929,12 @@
1502
1929
  "hasDynamicHelp": false,
1503
1930
  "multiple": false,
1504
1931
  "type": "option"
1932
+ },
1933
+ "time": {
1934
+ "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.",
1935
+ "name": "time",
1936
+ "allowNo": false,
1937
+ "type": "boolean"
1505
1938
  }
1506
1939
  },
1507
1940
  "hasDynamicHelp": false,
@@ -1520,7 +1953,7 @@
1520
1953
  "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",
1521
1954
  "flags": {
1522
1955
  "api-key": {
1523
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
1956
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1524
1957
  "env": "PRIMITIVE_API_KEY",
1525
1958
  "name": "api-key",
1526
1959
  "hasDynamicHelp": false,
@@ -1535,6 +1968,12 @@
1535
1968
  "multiple": false,
1536
1969
  "type": "option"
1537
1970
  },
1971
+ "time": {
1972
+ "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.",
1973
+ "name": "time",
1974
+ "allowNo": false,
1975
+ "type": "boolean"
1976
+ },
1538
1977
  "id": {
1539
1978
  "description": "Resource UUID",
1540
1979
  "name": "id",
@@ -1560,7 +1999,7 @@
1560
1999
  "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",
1561
2000
  "flags": {
1562
2001
  "api-key": {
1563
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
2002
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1564
2003
  "env": "PRIMITIVE_API_KEY",
1565
2004
  "name": "api-key",
1566
2005
  "hasDynamicHelp": false,
@@ -1575,6 +2014,12 @@
1575
2014
  "multiple": false,
1576
2015
  "type": "option"
1577
2016
  },
2017
+ "time": {
2018
+ "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.",
2019
+ "name": "time",
2020
+ "allowNo": false,
2021
+ "type": "boolean"
2022
+ },
1578
2023
  "cursor": {
1579
2024
  "description": "Pagination cursor from a previous response's `meta.cursor` field.\nFormat: `{ISO-datetime}|{id}`\n",
1580
2025
  "name": "cursor",
@@ -1648,7 +2093,7 @@
1648
2093
  "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",
1649
2094
  "flags": {
1650
2095
  "api-key": {
1651
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
2096
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1652
2097
  "env": "PRIMITIVE_API_KEY",
1653
2098
  "name": "api-key",
1654
2099
  "hasDynamicHelp": false,
@@ -1663,6 +2108,12 @@
1663
2108
  "multiple": false,
1664
2109
  "type": "option"
1665
2110
  },
2111
+ "time": {
2112
+ "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.",
2113
+ "name": "time",
2114
+ "allowNo": false,
2115
+ "type": "boolean"
2116
+ },
1666
2117
  "id": {
1667
2118
  "description": "Resource UUID",
1668
2119
  "name": "id",
@@ -1729,7 +2180,7 @@
1729
2180
  "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\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.)",
1730
2181
  "flags": {
1731
2182
  "api-key": {
1732
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
2183
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1733
2184
  "env": "PRIMITIVE_API_KEY",
1734
2185
  "name": "api-key",
1735
2186
  "hasDynamicHelp": false,
@@ -1744,6 +2195,12 @@
1744
2195
  "multiple": false,
1745
2196
  "type": "option"
1746
2197
  },
2198
+ "time": {
2199
+ "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.",
2200
+ "name": "time",
2201
+ "allowNo": false,
2202
+ "type": "boolean"
2203
+ },
1747
2204
  "raw-body": {
1748
2205
  "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.",
1749
2206
  "name": "raw-body",
@@ -1830,7 +2287,7 @@
1830
2287
  "description": "Returns a paginated list of webhook delivery attempts. Each delivery\nincludes a nested `email` object with sender, recipient, and subject.\n",
1831
2288
  "flags": {
1832
2289
  "api-key": {
1833
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
2290
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1834
2291
  "env": "PRIMITIVE_API_KEY",
1835
2292
  "name": "api-key",
1836
2293
  "hasDynamicHelp": false,
@@ -1845,6 +2302,12 @@
1845
2302
  "multiple": false,
1846
2303
  "type": "option"
1847
2304
  },
2305
+ "time": {
2306
+ "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.",
2307
+ "name": "time",
2308
+ "allowNo": false,
2309
+ "type": "boolean"
2310
+ },
1848
2311
  "cursor": {
1849
2312
  "description": "Pagination cursor from a previous response's `meta.cursor` field.\nFormat: `{ISO-datetime}|{id}`\n",
1850
2313
  "name": "cursor",
@@ -1916,7 +2379,7 @@
1916
2379
  "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",
1917
2380
  "flags": {
1918
2381
  "api-key": {
1919
- "description": "Primitive API key (defaults to PRIMITIVE_API_KEY)",
2382
+ "description": "Primitive API key (defaults to PRIMITIVE_API_KEY or saved `primitive login` credentials)",
1920
2383
  "env": "PRIMITIVE_API_KEY",
1921
2384
  "name": "api-key",
1922
2385
  "hasDynamicHelp": false,
@@ -1931,6 +2394,12 @@
1931
2394
  "multiple": false,
1932
2395
  "type": "option"
1933
2396
  },
2397
+ "time": {
2398
+ "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.",
2399
+ "name": "time",
2400
+ "allowNo": false,
2401
+ "type": "boolean"
2402
+ },
1934
2403
  "id": {
1935
2404
  "description": "Delivery ID (numeric)",
1936
2405
  "name": "id",
@@ -1951,5 +2420,5 @@
1951
2420
  "enableJsonFlag": false
1952
2421
  }
1953
2422
  },
1954
- "version": "0.17.0"
2423
+ "version": "0.19.0"
1955
2424
  }