@pyai/sdk 0.3.1 → 0.5.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,1085 @@
1
+ {
2
+ "schema_version": 1,
3
+ "name": "pyai",
4
+ "global_flags": {
5
+ "api-key": "string",
6
+ "base-url": "string",
7
+ "profile": "string",
8
+ "json": "boolean",
9
+ "timeout": "string",
10
+ "retries": "string",
11
+ "dry-run": "boolean",
12
+ "help": "boolean",
13
+ "version": "boolean"
14
+ },
15
+ "short_flags": {
16
+ "-h": "--help",
17
+ "-v": "--version",
18
+ "-o": "--out",
19
+ "-f": "--file",
20
+ "-t": "--text",
21
+ "-p": "--profile",
22
+ "-j": "--json"
23
+ },
24
+ "aliases": {
25
+ "login": "auth login",
26
+ "logout": "auth logout",
27
+ "whoami": "auth status",
28
+ "use": "profiles use",
29
+ "say": "speak",
30
+ "hear": "transcribe"
31
+ },
32
+ "commands": [
33
+ {
34
+ "command": "auth login",
35
+ "description": "Sign in through the browser, or save an explicitly supplied API key",
36
+ "flags": {
37
+ "web": "boolean",
38
+ "no-browser": "boolean",
39
+ "login-timeout": "string",
40
+ "key-stdin": "boolean"
41
+ },
42
+ "example": "pyai auth login --profile production"
43
+ },
44
+ {
45
+ "command": "auth sandbox",
46
+ "description": "Create a sandbox tenant and save its key in a profile"
47
+ },
48
+ {
49
+ "command": "auth status",
50
+ "description": "Inspect the active key with /v1/me"
51
+ },
52
+ {
53
+ "command": "auth logout",
54
+ "description": "Remove a saved local profile (does not revoke the key)"
55
+ },
56
+ {
57
+ "command": "profiles list",
58
+ "description": "List saved profiles without revealing keys"
59
+ },
60
+ {
61
+ "command": "profiles use",
62
+ "description": "Select the default profile",
63
+ "args": [
64
+ "name"
65
+ ]
66
+ },
67
+ {
68
+ "command": "models list",
69
+ "description": "List available models"
70
+ },
71
+ {
72
+ "command": "voices list",
73
+ "description": "List voices",
74
+ "flags": {
75
+ "gender": "string",
76
+ "region": "string",
77
+ "language": "string",
78
+ "tier": "string",
79
+ "q": "string",
80
+ "source": "string"
81
+ }
82
+ },
83
+ {
84
+ "command": "voices get",
85
+ "description": "Get one voice",
86
+ "args": [
87
+ "id"
88
+ ]
89
+ },
90
+ {
91
+ "command": "speak",
92
+ "description": "Synthesize text or stdin to an audio file",
93
+ "args": [
94
+ "text"
95
+ ],
96
+ "optionalArgs": true,
97
+ "flags": {
98
+ "text": "string",
99
+ "text-file": "string",
100
+ "voice": "string",
101
+ "model": "string",
102
+ "format": "string",
103
+ "sample-rate": "string",
104
+ "out": "string",
105
+ "force": "boolean"
106
+ },
107
+ "example": "pyai speak \"Hello from PyAI\" -o hello.wav"
108
+ },
109
+ {
110
+ "command": "transcribe",
111
+ "description": "Transcribe a local file, or submit an audio URL as a job",
112
+ "args": [
113
+ "input"
114
+ ],
115
+ "optionalArgs": true,
116
+ "flags": {
117
+ "file": "string",
118
+ "url": "string",
119
+ "filename": "string",
120
+ "language": "string",
121
+ "text-only": "boolean",
122
+ "diarize": "boolean",
123
+ "poll": "boolean",
124
+ "wait": "boolean",
125
+ "wait-timeout": "string",
126
+ "poll-interval": "string",
127
+ "idempotency-key": "string"
128
+ },
129
+ "example": "pyai transcribe call.wav --text-only"
130
+ },
131
+ {
132
+ "command": "dub",
133
+ "description": "Dub a file or URL: submit, wait, and save the audio",
134
+ "args": [
135
+ "input"
136
+ ],
137
+ "optionalArgs": true,
138
+ "flags": {
139
+ "file": "string",
140
+ "filename": "string",
141
+ "url": "string",
142
+ "from": "string",
143
+ "to": "string",
144
+ "out": "string",
145
+ "force": "boolean",
146
+ "wait-timeout": "string",
147
+ "poll-interval": "string",
148
+ "data": "string",
149
+ "idempotency-key": "string"
150
+ },
151
+ "example": "pyai dub original.wav --from en --to hi -o dubbed.wav"
152
+ },
153
+ {
154
+ "command": "clones create",
155
+ "description": "Clone a voice from a reference audio file",
156
+ "flags": {
157
+ "file": "string",
158
+ "filename": "string",
159
+ "name": "string"
160
+ }
161
+ },
162
+ {
163
+ "command": "dub create",
164
+ "description": "Submit a local file or URL for dubbing",
165
+ "flags": {
166
+ "file": "string",
167
+ "filename": "string",
168
+ "url": "string",
169
+ "language": "string",
170
+ "source-language": "string",
171
+ "data": "string",
172
+ "idempotency-key": "string"
173
+ }
174
+ },
175
+ {
176
+ "command": "request",
177
+ "description": "Call a relative API route with JSON, including future endpoints",
178
+ "args": [
179
+ "method",
180
+ "path"
181
+ ],
182
+ "flags": {
183
+ "data": "string",
184
+ "idempotency-key": "string",
185
+ "out": "string",
186
+ "force": "boolean",
187
+ "query": "repeat"
188
+ },
189
+ "example": "pyai request GET /v1/me --json"
190
+ },
191
+ {
192
+ "command": "schema",
193
+ "description": "Discover CLI commands offline, or retrieve live OpenAPI",
194
+ "args": [
195
+ "command"
196
+ ],
197
+ "optionalArgs": true,
198
+ "variadic": true,
199
+ "flags": {
200
+ "openapi": "boolean"
201
+ },
202
+ "example": "pyai schema agents create --json"
203
+ },
204
+ {
205
+ "command": "recipes",
206
+ "description": "Browse copyable workflows offline; never executes the examples",
207
+ "args": [
208
+ "name"
209
+ ],
210
+ "optionalArgs": true,
211
+ "example": "pyai recipes speak"
212
+ },
213
+ {
214
+ "command": "init",
215
+ "description": "Create a new project with API context and request examples offline",
216
+ "args": [
217
+ "directory"
218
+ ],
219
+ "flags": {
220
+ "template": "string"
221
+ },
222
+ "example": "pyai init voice-demo --template typescript"
223
+ },
224
+ {
225
+ "command": "smoke",
226
+ "description": "Check models, voices, and speech synthesis",
227
+ "flags": {
228
+ "tolerate-upstream": "boolean"
229
+ }
230
+ },
231
+ {
232
+ "command": "doctor",
233
+ "description": "Diagnose key, catalogs, and a Speak to Hear round-trip"
234
+ },
235
+ {
236
+ "command": "agents list",
237
+ "description": "List managed Agent profiles.",
238
+ "args": [],
239
+ "flags": {
240
+ "limit": "string",
241
+ "cursor": "string"
242
+ }
243
+ },
244
+ {
245
+ "command": "agents get",
246
+ "description": "Get an Agent profile.",
247
+ "args": [
248
+ "id"
249
+ ],
250
+ "flags": {}
251
+ },
252
+ {
253
+ "command": "agents create",
254
+ "description": "Create an Agent profile from JSON; name is required.",
255
+ "args": [],
256
+ "flags": {
257
+ "data": "string",
258
+ "idempotency-key": "string"
259
+ }
260
+ },
261
+ {
262
+ "command": "agents update",
263
+ "description": "Update present Agent fields; null clears a field.",
264
+ "args": [
265
+ "id"
266
+ ],
267
+ "flags": {
268
+ "data": "string",
269
+ "idempotency-key": "string"
270
+ }
271
+ },
272
+ {
273
+ "command": "agents delete",
274
+ "description": "Delete an Agent profile.",
275
+ "args": [
276
+ "id"
277
+ ],
278
+ "flags": {}
279
+ },
280
+ {
281
+ "command": "jobs list",
282
+ "description": "List transcription jobs with --limit and --cursor pagination.",
283
+ "args": [],
284
+ "flags": {
285
+ "limit": "string",
286
+ "cursor": "string"
287
+ }
288
+ },
289
+ {
290
+ "command": "jobs create",
291
+ "description": "Create a transcription job from JSON with audio_url.",
292
+ "args": [],
293
+ "flags": {
294
+ "data": "string",
295
+ "idempotency-key": "string"
296
+ }
297
+ },
298
+ {
299
+ "command": "jobs get",
300
+ "description": "Get transcription status and result.",
301
+ "args": [
302
+ "id"
303
+ ],
304
+ "flags": {}
305
+ },
306
+ {
307
+ "command": "jobs cancel",
308
+ "description": "Cancel a pending transcription job; completed results are retained.",
309
+ "args": [
310
+ "id"
311
+ ],
312
+ "flags": {}
313
+ },
314
+ {
315
+ "command": "jobs wait",
316
+ "description": "Wait for a transcription job to finish.",
317
+ "args": [
318
+ "id"
319
+ ],
320
+ "flags": {
321
+ "wait-timeout": "string",
322
+ "poll-interval": "string"
323
+ }
324
+ },
325
+ {
326
+ "command": "clones list",
327
+ "description": "List cloned voices belonging to the current organization.",
328
+ "args": [],
329
+ "flags": {
330
+ "limit": "string",
331
+ "cursor": "string"
332
+ }
333
+ },
334
+ {
335
+ "command": "clones delete",
336
+ "description": "Delete a cloned voice.",
337
+ "args": [
338
+ "id"
339
+ ],
340
+ "flags": {}
341
+ },
342
+ {
343
+ "command": "design create",
344
+ "description": "Generate voice candidates from a JSON prompt.",
345
+ "args": [],
346
+ "flags": {
347
+ "data": "string",
348
+ "idempotency-key": "string"
349
+ }
350
+ },
351
+ {
352
+ "command": "design get",
353
+ "description": "Get voice design status and candidate previews.",
354
+ "args": [
355
+ "id"
356
+ ],
357
+ "flags": {}
358
+ },
359
+ {
360
+ "command": "design wait",
361
+ "description": "Wait for voice design candidates.",
362
+ "args": [
363
+ "id"
364
+ ],
365
+ "flags": {
366
+ "wait-timeout": "string",
367
+ "poll-interval": "string"
368
+ }
369
+ },
370
+ {
371
+ "command": "design save",
372
+ "description": "Save a candidate using candidate_id and name.",
373
+ "args": [
374
+ "id"
375
+ ],
376
+ "flags": {
377
+ "data": "string",
378
+ "idempotency-key": "string"
379
+ }
380
+ },
381
+ {
382
+ "command": "cast capabilities",
383
+ "description": "Discover currently supported Cast voices and directions.",
384
+ "args": [],
385
+ "flags": {}
386
+ },
387
+ {
388
+ "command": "cast direct",
389
+ "description": "Assign emotion and intensity to script text.",
390
+ "args": [],
391
+ "flags": {
392
+ "data": "string",
393
+ "idempotency-key": "string"
394
+ }
395
+ },
396
+ {
397
+ "command": "cast speech",
398
+ "description": "Render one directed line to a WAV file.",
399
+ "args": [],
400
+ "flags": {
401
+ "data": "string",
402
+ "idempotency-key": "string",
403
+ "out": "string",
404
+ "force": "boolean"
405
+ }
406
+ },
407
+ {
408
+ "command": "cast render",
409
+ "description": "Create a render with voice and script or directed lines.",
410
+ "args": [],
411
+ "flags": {
412
+ "data": "string",
413
+ "idempotency-key": "string"
414
+ }
415
+ },
416
+ {
417
+ "command": "cast get",
418
+ "description": "Get Cast render status.",
419
+ "args": [
420
+ "id"
421
+ ],
422
+ "flags": {}
423
+ },
424
+ {
425
+ "command": "cast wait",
426
+ "description": "Wait for a Cast render to finish.",
427
+ "args": [
428
+ "id"
429
+ ],
430
+ "flags": {
431
+ "wait-timeout": "string",
432
+ "poll-interval": "string"
433
+ }
434
+ },
435
+ {
436
+ "command": "cast audio",
437
+ "description": "Download completed Cast audio to a WAV file.",
438
+ "args": [
439
+ "id"
440
+ ],
441
+ "flags": {
442
+ "out": "string",
443
+ "force": "boolean"
444
+ }
445
+ },
446
+ {
447
+ "command": "dub get",
448
+ "description": "Get Dub progress and output details.",
449
+ "args": [
450
+ "id"
451
+ ],
452
+ "flags": {}
453
+ },
454
+ {
455
+ "command": "dub wait",
456
+ "description": "Wait for a Dub job to finish.",
457
+ "args": [
458
+ "id"
459
+ ],
460
+ "flags": {
461
+ "wait-timeout": "string",
462
+ "poll-interval": "string"
463
+ }
464
+ },
465
+ {
466
+ "command": "dub audio",
467
+ "description": "Download completed dubbed audio.",
468
+ "args": [
469
+ "id"
470
+ ],
471
+ "flags": {
472
+ "out": "string",
473
+ "force": "boolean"
474
+ }
475
+ },
476
+ {
477
+ "command": "dub video",
478
+ "description": "Download a completed video-source job's dubbed video.",
479
+ "args": [
480
+ "id"
481
+ ],
482
+ "flags": {
483
+ "out": "string",
484
+ "force": "boolean"
485
+ }
486
+ },
487
+ {
488
+ "command": "recap list",
489
+ "description": "List calls with Recap summaries.",
490
+ "args": [],
491
+ "flags": {
492
+ "limit": "string",
493
+ "cursor": "string"
494
+ }
495
+ },
496
+ {
497
+ "command": "recap get",
498
+ "description": "Get a call's Recap summary.",
499
+ "args": [
500
+ "id"
501
+ ],
502
+ "flags": {}
503
+ },
504
+ {
505
+ "command": "recap config",
506
+ "description": "Read Recap configuration.",
507
+ "args": [],
508
+ "flags": {}
509
+ },
510
+ {
511
+ "command": "recap configure",
512
+ "description": "Update Recap configuration from JSON.",
513
+ "args": [],
514
+ "flags": {
515
+ "data": "string",
516
+ "idempotency-key": "string"
517
+ }
518
+ },
519
+ {
520
+ "command": "trace list",
521
+ "description": "List Trace interactions.",
522
+ "args": [],
523
+ "flags": {
524
+ "limit": "string",
525
+ "cursor": "string"
526
+ }
527
+ },
528
+ {
529
+ "command": "trace get",
530
+ "description": "Get a Trace interaction's findings and timeline.",
531
+ "args": [
532
+ "id"
533
+ ],
534
+ "flags": {}
535
+ },
536
+ {
537
+ "command": "trace config",
538
+ "description": "Read Trace configuration.",
539
+ "args": [],
540
+ "flags": {}
541
+ },
542
+ {
543
+ "command": "trace configure",
544
+ "description": "Update Trace configuration from JSON.",
545
+ "args": [],
546
+ "flags": {
547
+ "data": "string",
548
+ "idempotency-key": "string"
549
+ }
550
+ },
551
+ {
552
+ "command": "trace findings",
553
+ "description": "List Trace findings.",
554
+ "args": [],
555
+ "flags": {}
556
+ },
557
+ {
558
+ "command": "trace violations",
559
+ "description": "List Trace violations.",
560
+ "args": [],
561
+ "flags": {}
562
+ },
563
+ {
564
+ "command": "trace exposure",
565
+ "description": "Get aggregate Trace exposure.",
566
+ "args": [],
567
+ "flags": {}
568
+ },
569
+ {
570
+ "command": "tools list",
571
+ "description": "List hosted and registered tools.",
572
+ "args": [],
573
+ "flags": {
574
+ "limit": "string",
575
+ "cursor": "string"
576
+ }
577
+ },
578
+ {
579
+ "command": "tools get",
580
+ "description": "Get a tool definition.",
581
+ "args": [
582
+ "id"
583
+ ],
584
+ "flags": {}
585
+ },
586
+ {
587
+ "command": "tools create",
588
+ "description": "Register a tool from JSON.",
589
+ "args": [],
590
+ "flags": {
591
+ "data": "string",
592
+ "idempotency-key": "string"
593
+ }
594
+ },
595
+ {
596
+ "command": "tools update",
597
+ "description": "Update a registered tool.",
598
+ "args": [
599
+ "id"
600
+ ],
601
+ "flags": {
602
+ "data": "string",
603
+ "idempotency-key": "string"
604
+ }
605
+ },
606
+ {
607
+ "command": "tools delete",
608
+ "description": "Delete a registered tool.",
609
+ "args": [
610
+ "id"
611
+ ],
612
+ "flags": {}
613
+ },
614
+ {
615
+ "command": "vocabulary get",
616
+ "description": "Read organization Hear vocabulary and activation profiles.",
617
+ "args": [],
618
+ "flags": {}
619
+ },
620
+ {
621
+ "command": "vocabulary set",
622
+ "description": "Replace terms and enabled_for profiles from JSON.",
623
+ "args": [],
624
+ "flags": {
625
+ "data": "string",
626
+ "idempotency-key": "string"
627
+ }
628
+ },
629
+ {
630
+ "command": "amd calls",
631
+ "description": "List answering-machine detection decisions.",
632
+ "args": [],
633
+ "flags": {
634
+ "limit": "string",
635
+ "cursor": "string"
636
+ }
637
+ },
638
+ {
639
+ "command": "amd get",
640
+ "description": "Get one answering-machine detection decision.",
641
+ "args": [
642
+ "id"
643
+ ],
644
+ "flags": {}
645
+ },
646
+ {
647
+ "command": "amd config",
648
+ "description": "Read answering-machine detection configuration.",
649
+ "args": [],
650
+ "flags": {}
651
+ },
652
+ {
653
+ "command": "amd configure",
654
+ "description": "Configure AMD aggressiveness and webhook from JSON.",
655
+ "args": [],
656
+ "flags": {
657
+ "data": "string",
658
+ "idempotency-key": "string"
659
+ }
660
+ }
661
+ ],
662
+ "routes": [
663
+ {
664
+ "command": "agents list",
665
+ "method": "GET",
666
+ "path": "/v1/agents",
667
+ "description": "List managed Agent profiles."
668
+ },
669
+ {
670
+ "command": "agents get",
671
+ "method": "GET",
672
+ "path": "/v1/agents/{id}",
673
+ "id": true,
674
+ "description": "Get an Agent profile."
675
+ },
676
+ {
677
+ "command": "agents create",
678
+ "method": "POST",
679
+ "path": "/v1/agents",
680
+ "body": true,
681
+ "description": "Create an Agent profile from JSON; name is required."
682
+ },
683
+ {
684
+ "command": "agents update",
685
+ "method": "POST",
686
+ "path": "/v1/agents/{id}",
687
+ "id": true,
688
+ "body": true,
689
+ "description": "Update present Agent fields; null clears a field."
690
+ },
691
+ {
692
+ "command": "agents delete",
693
+ "method": "DELETE",
694
+ "path": "/v1/agents/{id}",
695
+ "id": true,
696
+ "description": "Delete an Agent profile."
697
+ },
698
+ {
699
+ "command": "jobs list",
700
+ "method": "GET",
701
+ "path": "/v1/transcription/jobs",
702
+ "description": "List transcription jobs with --limit and --cursor pagination."
703
+ },
704
+ {
705
+ "command": "jobs create",
706
+ "method": "POST",
707
+ "path": "/v1/transcription/jobs",
708
+ "body": true,
709
+ "description": "Create a transcription job from JSON with audio_url."
710
+ },
711
+ {
712
+ "command": "jobs get",
713
+ "method": "GET",
714
+ "path": "/v1/transcription/jobs/{id}",
715
+ "id": true,
716
+ "description": "Get transcription status and result."
717
+ },
718
+ {
719
+ "command": "jobs cancel",
720
+ "method": "DELETE",
721
+ "path": "/v1/transcription/jobs/{id}",
722
+ "id": true,
723
+ "description": "Cancel a pending transcription job; completed results are retained."
724
+ },
725
+ {
726
+ "command": "jobs wait",
727
+ "method": "GET",
728
+ "path": "/v1/transcription/jobs/{id}",
729
+ "id": true,
730
+ "wait": {
731
+ "success": [
732
+ "completed"
733
+ ],
734
+ "failure": [
735
+ "failed",
736
+ "cancelled"
737
+ ]
738
+ },
739
+ "description": "Wait for a transcription job to finish."
740
+ },
741
+ {
742
+ "command": "clones list",
743
+ "method": "GET",
744
+ "path": "/v1/voice/clones",
745
+ "description": "List cloned voices belonging to the current organization."
746
+ },
747
+ {
748
+ "command": "clones delete",
749
+ "method": "DELETE",
750
+ "path": "/v1/voice/clones/{id}",
751
+ "id": true,
752
+ "description": "Delete a cloned voice."
753
+ },
754
+ {
755
+ "command": "design create",
756
+ "method": "POST",
757
+ "path": "/v1/voice/design",
758
+ "body": true,
759
+ "description": "Generate voice candidates from a JSON prompt."
760
+ },
761
+ {
762
+ "command": "design get",
763
+ "method": "GET",
764
+ "path": "/v1/voice/design/{id}",
765
+ "id": true,
766
+ "description": "Get voice design status and candidate previews."
767
+ },
768
+ {
769
+ "command": "design wait",
770
+ "method": "GET",
771
+ "path": "/v1/voice/design/{id}",
772
+ "id": true,
773
+ "wait": {
774
+ "success": [
775
+ "completed"
776
+ ],
777
+ "failure": [
778
+ "failed"
779
+ ]
780
+ },
781
+ "description": "Wait for voice design candidates."
782
+ },
783
+ {
784
+ "command": "design save",
785
+ "method": "POST",
786
+ "path": "/v1/voice/design/{id}/save",
787
+ "id": true,
788
+ "body": true,
789
+ "description": "Save a candidate using candidate_id and name."
790
+ },
791
+ {
792
+ "command": "cast capabilities",
793
+ "method": "GET",
794
+ "path": "/v1/cast/capabilities",
795
+ "description": "Discover currently supported Cast voices and directions."
796
+ },
797
+ {
798
+ "command": "cast direct",
799
+ "method": "POST",
800
+ "path": "/v1/cast/direct",
801
+ "body": true,
802
+ "description": "Assign emotion and intensity to script text."
803
+ },
804
+ {
805
+ "command": "cast speech",
806
+ "method": "POST",
807
+ "path": "/v1/cast/speech",
808
+ "body": true,
809
+ "binary": true,
810
+ "description": "Render one directed line to a WAV file."
811
+ },
812
+ {
813
+ "command": "cast render",
814
+ "method": "POST",
815
+ "path": "/v1/cast/render_jobs",
816
+ "body": true,
817
+ "description": "Create a render with voice and script or directed lines."
818
+ },
819
+ {
820
+ "command": "cast get",
821
+ "method": "GET",
822
+ "path": "/v1/cast/render_jobs/{id}",
823
+ "id": true,
824
+ "description": "Get Cast render status."
825
+ },
826
+ {
827
+ "command": "cast wait",
828
+ "method": "GET",
829
+ "path": "/v1/cast/render_jobs/{id}",
830
+ "id": true,
831
+ "wait": {
832
+ "success": [
833
+ "done"
834
+ ],
835
+ "failure": [
836
+ "error"
837
+ ]
838
+ },
839
+ "description": "Wait for a Cast render to finish."
840
+ },
841
+ {
842
+ "command": "cast audio",
843
+ "method": "GET",
844
+ "path": "/v1/cast/render_jobs/{id}/audio",
845
+ "id": true,
846
+ "binary": true,
847
+ "description": "Download completed Cast audio to a WAV file."
848
+ },
849
+ {
850
+ "command": "dub get",
851
+ "method": "GET",
852
+ "path": "/v1/dub/jobs/{id}",
853
+ "id": true,
854
+ "description": "Get Dub progress and output details."
855
+ },
856
+ {
857
+ "command": "dub wait",
858
+ "method": "GET",
859
+ "path": "/v1/dub/jobs/{id}",
860
+ "id": true,
861
+ "wait": {
862
+ "success": [
863
+ "done"
864
+ ],
865
+ "failure": [
866
+ "error"
867
+ ]
868
+ },
869
+ "description": "Wait for a Dub job to finish."
870
+ },
871
+ {
872
+ "command": "dub audio",
873
+ "method": "GET",
874
+ "path": "/v1/dub/jobs/{id}/audio",
875
+ "id": true,
876
+ "binary": true,
877
+ "description": "Download completed dubbed audio."
878
+ },
879
+ {
880
+ "command": "dub video",
881
+ "method": "GET",
882
+ "path": "/v1/dub/jobs/{id}/video",
883
+ "id": true,
884
+ "binary": true,
885
+ "description": "Download a completed video-source job's dubbed video."
886
+ },
887
+ {
888
+ "command": "recap list",
889
+ "method": "GET",
890
+ "path": "/v1/recap/calls",
891
+ "description": "List calls with Recap summaries."
892
+ },
893
+ {
894
+ "command": "recap get",
895
+ "method": "GET",
896
+ "path": "/v1/recap/calls/{id}",
897
+ "id": true,
898
+ "description": "Get a call's Recap summary."
899
+ },
900
+ {
901
+ "command": "recap config",
902
+ "method": "GET",
903
+ "path": "/v1/recap/config",
904
+ "description": "Read Recap configuration."
905
+ },
906
+ {
907
+ "command": "recap configure",
908
+ "method": "PUT",
909
+ "path": "/v1/recap/config",
910
+ "body": true,
911
+ "description": "Update Recap configuration from JSON."
912
+ },
913
+ {
914
+ "command": "trace list",
915
+ "method": "GET",
916
+ "path": "/v1/trace/interactions",
917
+ "description": "List Trace interactions."
918
+ },
919
+ {
920
+ "command": "trace get",
921
+ "method": "GET",
922
+ "path": "/v1/trace/interactions/{id}",
923
+ "id": true,
924
+ "description": "Get a Trace interaction's findings and timeline."
925
+ },
926
+ {
927
+ "command": "trace config",
928
+ "method": "GET",
929
+ "path": "/v1/trace/config",
930
+ "description": "Read Trace configuration."
931
+ },
932
+ {
933
+ "command": "trace configure",
934
+ "method": "PUT",
935
+ "path": "/v1/trace/config",
936
+ "body": true,
937
+ "description": "Update Trace configuration from JSON."
938
+ },
939
+ {
940
+ "command": "trace findings",
941
+ "method": "GET",
942
+ "path": "/v1/trace/findings",
943
+ "description": "List Trace findings."
944
+ },
945
+ {
946
+ "command": "trace violations",
947
+ "method": "GET",
948
+ "path": "/v1/trace/violations",
949
+ "description": "List Trace violations."
950
+ },
951
+ {
952
+ "command": "trace exposure",
953
+ "method": "GET",
954
+ "path": "/v1/trace/exposure",
955
+ "description": "Get aggregate Trace exposure."
956
+ },
957
+ {
958
+ "command": "tools list",
959
+ "method": "GET",
960
+ "path": "/v1/tools",
961
+ "description": "List hosted and registered tools."
962
+ },
963
+ {
964
+ "command": "tools get",
965
+ "method": "GET",
966
+ "path": "/v1/tools/{id}",
967
+ "id": true,
968
+ "description": "Get a tool definition."
969
+ },
970
+ {
971
+ "command": "tools create",
972
+ "method": "POST",
973
+ "path": "/v1/tools",
974
+ "body": true,
975
+ "description": "Register a tool from JSON."
976
+ },
977
+ {
978
+ "command": "tools update",
979
+ "method": "POST",
980
+ "path": "/v1/tools/{id}",
981
+ "id": true,
982
+ "body": true,
983
+ "description": "Update a registered tool."
984
+ },
985
+ {
986
+ "command": "tools delete",
987
+ "method": "DELETE",
988
+ "path": "/v1/tools/{id}",
989
+ "id": true,
990
+ "description": "Delete a registered tool."
991
+ },
992
+ {
993
+ "command": "vocabulary get",
994
+ "method": "GET",
995
+ "path": "/v1/hear/vocabulary",
996
+ "description": "Read organization Hear vocabulary and activation profiles."
997
+ },
998
+ {
999
+ "command": "vocabulary set",
1000
+ "method": "PUT",
1001
+ "path": "/v1/hear/vocabulary",
1002
+ "body": true,
1003
+ "description": "Replace terms and enabled_for profiles from JSON."
1004
+ },
1005
+ {
1006
+ "command": "amd calls",
1007
+ "method": "GET",
1008
+ "path": "/v1/amd/calls",
1009
+ "description": "List answering-machine detection decisions."
1010
+ },
1011
+ {
1012
+ "command": "amd get",
1013
+ "method": "GET",
1014
+ "path": "/v1/amd/calls/{id}",
1015
+ "id": true,
1016
+ "description": "Get one answering-machine detection decision."
1017
+ },
1018
+ {
1019
+ "command": "amd config",
1020
+ "method": "GET",
1021
+ "path": "/v1/amd/config",
1022
+ "description": "Read answering-machine detection configuration."
1023
+ },
1024
+ {
1025
+ "command": "amd configure",
1026
+ "method": "POST",
1027
+ "path": "/v1/amd/config",
1028
+ "body": true,
1029
+ "description": "Configure AMD aggressiveness and webhook from JSON."
1030
+ }
1031
+ ],
1032
+ "templates": [
1033
+ {
1034
+ "id": "agent",
1035
+ "description": "API context and JSON requests for coding agents",
1036
+ "files": [
1037
+ "README.md",
1038
+ "PYAI.md",
1039
+ "speech.json",
1040
+ "job.json",
1041
+ "agent.json",
1042
+ ".env.example",
1043
+ ".gitignore"
1044
+ ]
1045
+ },
1046
+ {
1047
+ "id": "typescript",
1048
+ "description": "Runnable Node.js Speak and Hear examples using @pyai/sdk",
1049
+ "files": [
1050
+ "README.md",
1051
+ "PYAI.md",
1052
+ "main.ts",
1053
+ "package.json",
1054
+ ".env.example",
1055
+ ".gitignore"
1056
+ ]
1057
+ },
1058
+ {
1059
+ "id": "python",
1060
+ "description": "Runnable Python Speak and Hear examples using pyai-sdk",
1061
+ "files": [
1062
+ "README.md",
1063
+ "PYAI.md",
1064
+ "main.py",
1065
+ ".env.example",
1066
+ ".gitignore"
1067
+ ]
1068
+ }
1069
+ ],
1070
+ "output": {
1071
+ "success": "JSON result on stdout with --json; no progress mixed in",
1072
+ "error": "JSON error on stderr with --json",
1073
+ "authorization": "Browser login emits public authorization events as NDJSON on stderr while waiting",
1074
+ "binary": "--out - streams bytes; cannot combine with --json",
1075
+ "text": "transcribe --text-only prints transcript text; cannot combine with --json"
1076
+ },
1077
+ "exit_codes": {
1078
+ "0": "success",
1079
+ "1": "API or job failure",
1080
+ "2": "arguments or local configuration",
1081
+ "3": "authentication or permission",
1082
+ "4": "network or timeout",
1083
+ "130": "interrupted"
1084
+ }
1085
+ }