@apteva/integrations 0.3.14 → 0.3.15

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.
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "slug": "heygen",
3
3
  "name": "HeyGen",
4
- "description": "MCP server for HeyGen AI video generation - avatars, videos, templates",
4
+ "description": "MCP server for HeyGen AI video generation - avatars, videos, templates, streaming interactive avatars, video translation, talking photos, personalized video, and webhooks",
5
5
  "logo": "https://www.google.com/s2/favicons?domain=heygen.com&sz=128",
6
6
  "categories": [
7
7
  "ai",
8
8
  "video",
9
9
  "avatars",
10
- "generation"
10
+ "generation",
11
+ "streaming",
12
+ "translation"
11
13
  ],
12
- "base_url": "https://api.heygen.com/v2",
14
+ "base_url": "https://api.heygen.com",
13
15
  "auth": {
14
16
  "types": [
15
17
  "api_key"
@@ -27,46 +29,248 @@
27
29
  },
28
30
  "tools": [
29
31
  {
30
- "name": "create_video",
31
- "description": "Create an AI video",
32
+ "name": "list_avatars",
33
+ "description": "List all available avatars (v2) including public and custom avatars with details like avatar_id, name, gender, and preview URLs",
34
+ "method": "GET",
35
+ "path": "/v2/avatars",
36
+ "input_schema": {
37
+ "type": "object",
38
+ "properties": {}
39
+ }
40
+ },
41
+ {
42
+ "name": "get_avatar_details",
43
+ "description": "Get detailed information about a specific avatar by its ID including supported poses, expressions, and capabilities",
44
+ "method": "GET",
45
+ "path": "/v2/avatar/{avatar_id}/details",
46
+ "input_schema": {
47
+ "type": "object",
48
+ "properties": {
49
+ "avatar_id": {
50
+ "type": "string",
51
+ "description": "The avatar ID to get details for"
52
+ }
53
+ },
54
+ "required": [
55
+ "avatar_id"
56
+ ]
57
+ }
58
+ },
59
+ {
60
+ "name": "list_voices",
61
+ "description": "List all available AI voices (v2) with details like voice_id, language, gender, name, and preview URL",
62
+ "method": "GET",
63
+ "path": "/v2/voices",
64
+ "input_schema": {
65
+ "type": "object",
66
+ "properties": {}
67
+ }
68
+ },
69
+ {
70
+ "name": "generate_voice_preview",
71
+ "description": "Generate a short audio preview with a specified voice and text to hear how it sounds before creating a video",
32
72
  "method": "POST",
33
- "path": "/create-video",
73
+ "path": "/v2/voices/{voice_id}/preview",
74
+ "input_schema": {
75
+ "type": "object",
76
+ "properties": {
77
+ "voice_id": {
78
+ "type": "string",
79
+ "description": "The voice ID to preview"
80
+ },
81
+ "text": {
82
+ "type": "string",
83
+ "description": "Text to generate audio preview for"
84
+ }
85
+ },
86
+ "required": [
87
+ "voice_id",
88
+ "text"
89
+ ]
90
+ }
91
+ },
92
+ {
93
+ "name": "generate_video",
94
+ "description": "Generate an AI avatar video using the Studio backend. Supports avatars, voices, dynamic backgrounds, and multiple scenes. Returns a video_id to poll for status.",
95
+ "method": "POST",
96
+ "path": "/v2/video/generate",
97
+ "input_schema": {
98
+ "type": "object",
99
+ "properties": {
100
+ "video_inputs": {
101
+ "type": "array",
102
+ "description": "Array of scene inputs, each with character (avatar + voice), voice (script), and optional background",
103
+ "items": {
104
+ "type": "object"
105
+ }
106
+ },
107
+ "dimension": {
108
+ "type": "object",
109
+ "description": "Video dimensions, e.g. {\"width\": 1920, \"height\": 1080}"
110
+ },
111
+ "test": {
112
+ "type": "boolean",
113
+ "description": "Set true to generate a free test video (watermarked)"
114
+ },
115
+ "caption": {
116
+ "type": "boolean",
117
+ "description": "Enable auto-captions"
118
+ },
119
+ "title": {
120
+ "type": "string",
121
+ "description": "Video title"
122
+ },
123
+ "callback_id": {
124
+ "type": "string",
125
+ "description": "Custom callback ID for webhook notifications"
126
+ }
127
+ },
128
+ "required": [
129
+ "video_inputs"
130
+ ]
131
+ }
132
+ },
133
+ {
134
+ "name": "create_avatar_iv_video",
135
+ "description": "Generate an Avatar IV video from a photo with advanced AI-powered motion and expressions. Uses next-gen photorealistic avatar technology.",
136
+ "method": "POST",
137
+ "path": "/v2/video/av4/generate",
34
138
  "input_schema": {
35
139
  "type": "object",
36
140
  "properties": {
37
141
  "avatar_id": {
38
- "type": "string"
142
+ "type": "string",
143
+ "description": "Avatar IV avatar ID"
39
144
  },
40
- "voice_id": {
41
- "type": "string"
145
+ "voice": {
146
+ "type": "object",
147
+ "description": "Voice configuration with voice_id and input_text or input_audio"
42
148
  },
43
- "script": {
44
- "type": "string"
149
+ "dimension": {
150
+ "type": "object",
151
+ "description": "Video dimensions"
45
152
  },
46
- "background": {
47
- "type": "object"
153
+ "test": {
154
+ "type": "boolean",
155
+ "description": "Generate test video (watermarked)"
48
156
  }
49
157
  },
50
158
  "required": [
51
159
  "avatar_id",
52
- "voice_id",
53
- "script"
160
+ "voice"
161
+ ]
162
+ }
163
+ },
164
+ {
165
+ "name": "get_video_status",
166
+ "description": "Check the status of a video generation job. Returns status (processing, completed, failed), video_url when done, and duration.",
167
+ "method": "GET",
168
+ "path": "/v1/video_status.get",
169
+ "input_schema": {
170
+ "type": "object",
171
+ "properties": {
172
+ "video_id": {
173
+ "type": "string",
174
+ "description": "The video ID to check status for"
175
+ }
176
+ },
177
+ "required": [
178
+ "video_id"
179
+ ]
180
+ }
181
+ },
182
+ {
183
+ "name": "list_videos",
184
+ "description": "List all generated videos with their status, URLs, and metadata",
185
+ "method": "GET",
186
+ "path": "/v1/video.list",
187
+ "input_schema": {
188
+ "type": "object",
189
+ "properties": {
190
+ "limit": {
191
+ "type": "integer",
192
+ "description": "Number of videos to return (max 100)"
193
+ }
194
+ }
195
+ }
196
+ },
197
+ {
198
+ "name": "delete_video",
199
+ "description": "Delete a generated video by its ID",
200
+ "method": "DELETE",
201
+ "path": "/v1/video.delete",
202
+ "input_schema": {
203
+ "type": "object",
204
+ "properties": {
205
+ "video_id": {
206
+ "type": "string",
207
+ "description": "The video ID to delete"
208
+ }
209
+ },
210
+ "required": [
211
+ "video_id"
212
+ ]
213
+ }
214
+ },
215
+ {
216
+ "name": "list_templates",
217
+ "description": "List all available video templates with their variable definitions for dynamic content",
218
+ "method": "GET",
219
+ "path": "/v2/templates",
220
+ "input_schema": {
221
+ "type": "object",
222
+ "properties": {}
223
+ }
224
+ },
225
+ {
226
+ "name": "get_template",
227
+ "description": "Get a specific template by ID with all its variable definitions that can be dynamically populated during video generation",
228
+ "method": "GET",
229
+ "path": "/v2/template/{template_id}",
230
+ "input_schema": {
231
+ "type": "object",
232
+ "properties": {
233
+ "template_id": {
234
+ "type": "string",
235
+ "description": "The template ID"
236
+ }
237
+ },
238
+ "required": [
239
+ "template_id"
54
240
  ]
55
241
  }
56
242
  },
57
243
  {
58
- "name": "create_from_template",
59
- "description": "Create video from template",
244
+ "name": "generate_from_template",
245
+ "description": "Generate a video from a template with dynamic variable substitution. Provide template variables to customize the video content.",
60
246
  "method": "POST",
61
- "path": "/create-from-template",
247
+ "path": "/v2/template/{template_id}/generate",
62
248
  "input_schema": {
63
249
  "type": "object",
64
250
  "properties": {
65
251
  "template_id": {
66
- "type": "string"
252
+ "type": "string",
253
+ "description": "The template ID to generate from"
254
+ },
255
+ "title": {
256
+ "type": "string",
257
+ "description": "Video title"
67
258
  },
68
259
  "variables": {
69
- "type": "object"
260
+ "type": "object",
261
+ "description": "Template variables to substitute (keys are variable names from the template)"
262
+ },
263
+ "test": {
264
+ "type": "boolean",
265
+ "description": "Generate test video (watermarked)"
266
+ },
267
+ "caption": {
268
+ "type": "boolean",
269
+ "description": "Enable captions"
270
+ },
271
+ "callback_id": {
272
+ "type": "string",
273
+ "description": "Custom callback ID for webhook"
70
274
  }
71
275
  },
72
276
  "required": [
@@ -75,110 +279,729 @@
75
279
  }
76
280
  },
77
281
  {
78
- "name": "get_video",
79
- "description": "Get video details",
282
+ "name": "translate_video",
283
+ "description": "Translate a video into 175+ languages with natural-sounding voice and accurate lip-sync. Returns a video_translate_id to poll for status.",
284
+ "method": "POST",
285
+ "path": "/v2/video_translate",
286
+ "input_schema": {
287
+ "type": "object",
288
+ "properties": {
289
+ "video_url": {
290
+ "type": "string",
291
+ "description": "URL of the source video to translate"
292
+ },
293
+ "output_language": {
294
+ "type": "string",
295
+ "description": "Target language code (e.g., 'es', 'fr', 'de', 'ja', 'zh')"
296
+ },
297
+ "title": {
298
+ "type": "string",
299
+ "description": "Title for the translated video"
300
+ },
301
+ "mode": {
302
+ "type": "string",
303
+ "description": "Translation quality mode: 'fast' or 'quality'",
304
+ "default": "fast"
305
+ },
306
+ "callback_id": {
307
+ "type": "string",
308
+ "description": "Custom callback ID for webhook"
309
+ }
310
+ },
311
+ "required": [
312
+ "video_url",
313
+ "output_language"
314
+ ]
315
+ }
316
+ },
317
+ {
318
+ "name": "get_translation_status",
319
+ "description": "Check the status of a video translation job",
80
320
  "method": "GET",
81
- "path": "/get-video",
321
+ "path": "/v2/video_translate/{video_translate_id}",
82
322
  "input_schema": {
83
323
  "type": "object",
84
324
  "properties": {
85
- "video_id": {
86
- "type": "string"
325
+ "video_translate_id": {
326
+ "type": "string",
327
+ "description": "The translation job ID"
87
328
  }
88
329
  },
89
330
  "required": [
90
- "video_id"
331
+ "video_translate_id"
91
332
  ]
92
333
  }
93
334
  },
94
335
  {
95
- "name": "get_video_status",
96
- "description": "Get video generation status",
336
+ "name": "list_target_languages",
337
+ "description": "Get list of all supported target languages for video translation",
97
338
  "method": "GET",
98
- "path": "/get-video-status",
339
+ "path": "/v2/video_translate/target_languages",
340
+ "input_schema": {
341
+ "type": "object",
342
+ "properties": {}
343
+ }
344
+ },
345
+ {
346
+ "name": "streaming_new",
347
+ "description": "Create a new interactive avatar streaming session. Returns session_id and ICE server configuration for WebRTC.",
348
+ "method": "POST",
349
+ "path": "/v1/streaming.new",
99
350
  "input_schema": {
100
351
  "type": "object",
101
352
  "properties": {
102
- "video_id": {
103
- "type": "string"
353
+ "avatar_id": {
354
+ "type": "string",
355
+ "description": "Streaming avatar ID"
356
+ },
357
+ "voice": {
358
+ "type": "object",
359
+ "description": "Voice config: {\"voice_id\": \"...\", \"rate\": 1.0}"
360
+ },
361
+ "quality": {
362
+ "type": "string",
363
+ "description": "Video quality: 'low', 'medium', 'high'",
364
+ "default": "medium"
365
+ },
366
+ "version": {
367
+ "type": "string",
368
+ "description": "API version: 'v1' or 'v2'",
369
+ "default": "v2"
370
+ },
371
+ "knowledge_base_id": {
372
+ "type": "string",
373
+ "description": "Optional knowledge base ID for Q&A capabilities"
104
374
  }
105
375
  },
106
376
  "required": [
107
- "video_id"
377
+ "avatar_id"
108
378
  ]
109
379
  }
110
380
  },
111
381
  {
112
- "name": "list_avatars",
113
- "description": "List available avatars",
382
+ "name": "streaming_start",
383
+ "description": "Start an interactive avatar streaming session with WebRTC SDP exchange",
384
+ "method": "POST",
385
+ "path": "/v1/streaming.start",
386
+ "input_schema": {
387
+ "type": "object",
388
+ "properties": {
389
+ "session_id": {
390
+ "type": "string",
391
+ "description": "Session ID from streaming.new"
392
+ },
393
+ "sdp": {
394
+ "type": "object",
395
+ "description": "WebRTC SDP offer"
396
+ }
397
+ },
398
+ "required": [
399
+ "session_id",
400
+ "sdp"
401
+ ]
402
+ }
403
+ },
404
+ {
405
+ "name": "streaming_ice",
406
+ "description": "Send a WebRTC ICE candidate to the streaming session",
407
+ "method": "POST",
408
+ "path": "/v1/streaming.ice",
409
+ "input_schema": {
410
+ "type": "object",
411
+ "properties": {
412
+ "session_id": {
413
+ "type": "string",
414
+ "description": "Session ID"
415
+ },
416
+ "candidate": {
417
+ "type": "object",
418
+ "description": "ICE candidate object"
419
+ }
420
+ },
421
+ "required": [
422
+ "session_id",
423
+ "candidate"
424
+ ]
425
+ }
426
+ },
427
+ {
428
+ "name": "streaming_task",
429
+ "description": "Send text to an interactive avatar, prompting it to speak. Can also send task_type 'repeat' to repeat or 'talk' (default).",
430
+ "method": "POST",
431
+ "path": "/v1/streaming.task",
432
+ "input_schema": {
433
+ "type": "object",
434
+ "properties": {
435
+ "session_id": {
436
+ "type": "string",
437
+ "description": "Session ID"
438
+ },
439
+ "text": {
440
+ "type": "string",
441
+ "description": "Text for the avatar to speak"
442
+ },
443
+ "task_type": {
444
+ "type": "string",
445
+ "description": "Task type: 'talk' or 'repeat'",
446
+ "default": "talk"
447
+ },
448
+ "task_mode": {
449
+ "type": "string",
450
+ "description": "Task mode: 'async' or 'sync'",
451
+ "default": "async"
452
+ }
453
+ },
454
+ "required": [
455
+ "session_id",
456
+ "text"
457
+ ]
458
+ }
459
+ },
460
+ {
461
+ "name": "streaming_interrupt",
462
+ "description": "Interrupt the avatar while it is speaking in a streaming session",
463
+ "method": "POST",
464
+ "path": "/v1/streaming.interrupt",
465
+ "input_schema": {
466
+ "type": "object",
467
+ "properties": {
468
+ "session_id": {
469
+ "type": "string",
470
+ "description": "Session ID"
471
+ }
472
+ },
473
+ "required": [
474
+ "session_id"
475
+ ]
476
+ }
477
+ },
478
+ {
479
+ "name": "streaming_stop",
480
+ "description": "Stop and close an interactive avatar streaming session",
481
+ "method": "POST",
482
+ "path": "/v1/streaming.stop",
483
+ "input_schema": {
484
+ "type": "object",
485
+ "properties": {
486
+ "session_id": {
487
+ "type": "string",
488
+ "description": "Session ID"
489
+ }
490
+ },
491
+ "required": [
492
+ "session_id"
493
+ ]
494
+ }
495
+ },
496
+ {
497
+ "name": "streaming_list_sessions",
498
+ "description": "List all streaming session history with pagination, optional date range and status filtering",
114
499
  "method": "GET",
115
- "path": "/list-avatars",
500
+ "path": "/v2/streaming.list",
501
+ "input_schema": {
502
+ "type": "object",
503
+ "properties": {
504
+ "limit": {
505
+ "type": "integer",
506
+ "description": "Number of sessions to return"
507
+ },
508
+ "offset": {
509
+ "type": "integer",
510
+ "description": "Pagination offset"
511
+ }
512
+ }
513
+ }
514
+ },
515
+ {
516
+ "name": "streaming_create_token",
517
+ "description": "Create a temporary access token for client-side streaming SDK integration",
518
+ "method": "POST",
519
+ "path": "/v1/streaming.create_token",
116
520
  "input_schema": {
117
521
  "type": "object",
118
522
  "properties": {}
119
523
  }
120
524
  },
121
525
  {
122
- "name": "list_voices",
123
- "description": "List available voices",
526
+ "name": "list_streaming_avatars",
527
+ "description": "List all public and custom avatars available for interactive streaming sessions",
124
528
  "method": "GET",
125
- "path": "/list-voices",
529
+ "path": "/v1/streaming/avatar.list",
126
530
  "input_schema": {
127
531
  "type": "object",
128
532
  "properties": {}
129
533
  }
130
534
  },
131
535
  {
132
- "name": "list_templates",
133
- "description": "List video templates",
536
+ "name": "list_talking_photos",
537
+ "description": "List all talking photos that can be animated with voice to create short videos",
134
538
  "method": "GET",
135
- "path": "/list-templates",
539
+ "path": "/v1/talking_photo.list",
136
540
  "input_schema": {
137
541
  "type": "object",
138
542
  "properties": {}
139
543
  }
140
544
  },
141
545
  {
142
- "name": "create_custom_avatar",
143
- "description": "Create a custom avatar",
546
+ "name": "upload_talking_photo",
547
+ "description": "Upload a new talking photo that can be animated with voice",
144
548
  "method": "POST",
145
- "path": "/create-custom-avatar",
549
+ "path": "/v1/talking_photo",
146
550
  "input_schema": {
147
551
  "type": "object",
148
552
  "properties": {
149
- "name": {
150
- "type": "string"
151
- },
152
553
  "image_url": {
153
- "type": "string"
554
+ "type": "string",
555
+ "description": "URL of the photo to upload"
154
556
  }
155
557
  },
156
558
  "required": [
157
- "name",
158
559
  "image_url"
159
560
  ]
160
561
  }
161
562
  },
162
563
  {
163
- "name": "clone_voice",
164
- "description": "Clone a voice from audio",
564
+ "name": "delete_talking_photo",
565
+ "description": "Delete a talking photo by its ID",
566
+ "method": "DELETE",
567
+ "path": "/v2/talking_photo/{talking_photo_id}",
568
+ "input_schema": {
569
+ "type": "object",
570
+ "properties": {
571
+ "talking_photo_id": {
572
+ "type": "string",
573
+ "description": "The talking photo ID to delete"
574
+ }
575
+ },
576
+ "required": [
577
+ "talking_photo_id"
578
+ ]
579
+ }
580
+ },
581
+ {
582
+ "name": "upload_asset",
583
+ "description": "Upload an asset (image, audio, video) to use in video generation",
584
+ "method": "POST",
585
+ "path": "/v1/asset",
586
+ "input_schema": {
587
+ "type": "object",
588
+ "properties": {
589
+ "url": {
590
+ "type": "string",
591
+ "description": "URL of the asset to upload"
592
+ },
593
+ "type": {
594
+ "type": "string",
595
+ "description": "Asset type: 'image', 'audio', 'video'"
596
+ }
597
+ },
598
+ "required": [
599
+ "url",
600
+ "type"
601
+ ]
602
+ }
603
+ },
604
+ {
605
+ "name": "get_remaining_quota",
606
+ "description": "Get your account's remaining API quota/credits",
165
607
  "method": "GET",
166
- "path": "/clone-voice",
608
+ "path": "/v2/user/remaining_quota",
609
+ "input_schema": {
610
+ "type": "object",
611
+ "properties": {}
612
+ }
613
+ },
614
+ {
615
+ "name": "add_webhook",
616
+ "description": "Register a webhook endpoint to receive real-time event notifications (video.completed, video.failed, etc.)",
617
+ "method": "POST",
618
+ "path": "/v1/webhook/endpoint.add",
619
+ "input_schema": {
620
+ "type": "object",
621
+ "properties": {
622
+ "url": {
623
+ "type": "string",
624
+ "description": "Webhook endpoint URL"
625
+ },
626
+ "events": {
627
+ "type": "array",
628
+ "description": "Event types to subscribe to, e.g. ['avatar_video.success', 'avatar_video.fail']",
629
+ "items": {
630
+ "type": "string"
631
+ }
632
+ }
633
+ },
634
+ "required": [
635
+ "url",
636
+ "events"
637
+ ]
638
+ }
639
+ },
640
+ {
641
+ "name": "list_webhook_endpoints",
642
+ "description": "List all registered webhook endpoints",
643
+ "method": "GET",
644
+ "path": "/v1/webhook/endpoint.list",
645
+ "input_schema": {
646
+ "type": "object",
647
+ "properties": {}
648
+ }
649
+ },
650
+ {
651
+ "name": "delete_webhook",
652
+ "description": "Delete a registered webhook endpoint",
653
+ "method": "DELETE",
654
+ "path": "/v1/webhook/endpoint.delete",
655
+ "input_schema": {
656
+ "type": "object",
657
+ "properties": {
658
+ "endpoint_id": {
659
+ "type": "string",
660
+ "description": "The webhook endpoint ID to delete"
661
+ }
662
+ },
663
+ "required": [
664
+ "endpoint_id"
665
+ ]
666
+ }
667
+ },
668
+ {
669
+ "name": "video_agent_generate",
670
+ "description": "One-shot video generation from a natural language prompt. The Video Agent automatically selects the best avatar, voice, background, and script to produce a complete video. No need to specify individual parameters.",
671
+ "method": "POST",
672
+ "path": "/v1/video_agent/generate",
673
+ "input_schema": {
674
+ "type": "object",
675
+ "properties": {
676
+ "prompt": {
677
+ "type": "string",
678
+ "description": "Natural language description of the video you want to create, e.g. 'Create a 30-second product demo for a fitness app'"
679
+ },
680
+ "model": {
681
+ "type": "string",
682
+ "description": "Model to use for generation"
683
+ },
684
+ "avatar_id": {
685
+ "type": "string",
686
+ "description": "Optional: specify an avatar ID instead of letting the agent choose"
687
+ },
688
+ "voice_id": {
689
+ "type": "string",
690
+ "description": "Optional: specify a voice ID instead of letting the agent choose"
691
+ },
692
+ "test": {
693
+ "type": "boolean",
694
+ "description": "Generate a free test video (watermarked)"
695
+ },
696
+ "callback_id": {
697
+ "type": "string",
698
+ "description": "Custom callback ID for webhook notifications"
699
+ }
700
+ },
701
+ "required": [
702
+ "prompt"
703
+ ]
704
+ }
705
+ },
706
+ {
707
+ "name": "create_webm_video",
708
+ "description": "Generate a WebM format avatar video with transparent background support. Ideal for overlays and web embedding.",
709
+ "method": "POST",
710
+ "path": "/v1/video.webm",
711
+ "input_schema": {
712
+ "type": "object",
713
+ "properties": {
714
+ "avatar_pose_id": {
715
+ "type": "string",
716
+ "description": "ID of the avatar's pose (from List All Avatars)"
717
+ },
718
+ "avatar_style": {
719
+ "type": "string",
720
+ "description": "Visual style: 'normal' or 'closeUp'",
721
+ "default": "normal"
722
+ },
723
+ "input_text": {
724
+ "type": "string",
725
+ "description": "Text for the avatar to speak (provide this OR input_audio)"
726
+ },
727
+ "voice_id": {
728
+ "type": "string",
729
+ "description": "Voice ID (required with input_text)"
730
+ },
731
+ "input_audio": {
732
+ "type": "string",
733
+ "description": "URL/ID of uploaded audio (alternative to input_text+voice_id)"
734
+ },
735
+ "dimension": {
736
+ "type": "object",
737
+ "description": "Custom output dimensions: {\"width\": 512, \"height\": 512}"
738
+ }
739
+ },
740
+ "required": [
741
+ "avatar_pose_id"
742
+ ]
743
+ }
744
+ },
745
+ {
746
+ "name": "get_sharable_url",
747
+ "description": "Get a shareable URL for a completed video that doesn't expire",
748
+ "method": "POST",
749
+ "path": "/v1/video/sharable-url",
750
+ "input_schema": {
751
+ "type": "object",
752
+ "properties": {
753
+ "video_id": {
754
+ "type": "string",
755
+ "description": "The video ID to get a sharable URL for"
756
+ }
757
+ },
758
+ "required": [
759
+ "video_id"
760
+ ]
761
+ }
762
+ },
763
+ {
764
+ "name": "list_avatar_groups",
765
+ "description": "List all avatar groups (collections of related avatars)",
766
+ "method": "GET",
767
+ "path": "/v2/avatar-groups",
768
+ "input_schema": {
769
+ "type": "object",
770
+ "properties": {}
771
+ }
772
+ },
773
+ {
774
+ "name": "list_avatars_in_group",
775
+ "description": "List all avatars belonging to a specific avatar group",
776
+ "method": "GET",
777
+ "path": "/v2/avatar-groups/{group_id}/avatars",
778
+ "input_schema": {
779
+ "type": "object",
780
+ "properties": {
781
+ "group_id": {
782
+ "type": "string",
783
+ "description": "The avatar group ID"
784
+ }
785
+ },
786
+ "required": [
787
+ "group_id"
788
+ ]
789
+ }
790
+ },
791
+ {
792
+ "name": "create_photo_avatar",
793
+ "description": "Create a new photo avatar from an uploaded image for live-looking video generation",
794
+ "method": "POST",
795
+ "path": "/v1/photo_avatar/photo/generate",
167
796
  "input_schema": {
168
797
  "type": "object",
169
798
  "properties": {
799
+ "image_url": {
800
+ "type": "string",
801
+ "description": "URL of the photo to use for avatar creation"
802
+ },
170
803
  "name": {
171
- "type": "string"
804
+ "type": "string",
805
+ "description": "Name for the photo avatar"
806
+ }
807
+ },
808
+ "required": [
809
+ "image_url"
810
+ ]
811
+ }
812
+ },
813
+ {
814
+ "name": "train_photo_avatar",
815
+ "description": "Train a photo avatar group to improve quality and consistency across looks",
816
+ "method": "POST",
817
+ "path": "/v1/photo_avatar/train",
818
+ "input_schema": {
819
+ "type": "object",
820
+ "properties": {
821
+ "group_id": {
822
+ "type": "string",
823
+ "description": "Photo avatar group ID to train"
824
+ }
825
+ },
826
+ "required": [
827
+ "group_id"
828
+ ]
829
+ }
830
+ },
831
+ {
832
+ "name": "generate_photo_avatar_look",
833
+ "description": "Generate new looks/styles for an existing photo avatar",
834
+ "method": "POST",
835
+ "path": "/v1/photo_avatar/look/generate",
836
+ "input_schema": {
837
+ "type": "object",
838
+ "properties": {
839
+ "avatar_id": {
840
+ "type": "string",
841
+ "description": "Photo avatar ID"
842
+ },
843
+ "look_config": {
844
+ "type": "object",
845
+ "description": "Look configuration options"
846
+ }
847
+ },
848
+ "required": [
849
+ "avatar_id"
850
+ ]
851
+ }
852
+ },
853
+ {
854
+ "name": "add_photo_avatar_motion",
855
+ "description": "Add motion/animation to a photo avatar for more natural video output",
856
+ "method": "POST",
857
+ "path": "/v1/photo_avatar/add_motion",
858
+ "input_schema": {
859
+ "type": "object",
860
+ "properties": {
861
+ "avatar_id": {
862
+ "type": "string",
863
+ "description": "Photo avatar ID"
172
864
  },
173
- "audio_url": {
174
- "type": "string"
865
+ "motion_config": {
866
+ "type": "object",
867
+ "description": "Motion configuration"
175
868
  }
176
869
  },
177
870
  "required": [
178
- "name",
179
- "audio_url"
871
+ "avatar_id"
180
872
  ]
181
873
  }
874
+ },
875
+ {
876
+ "name": "create_digital_twin",
877
+ "description": "Create a digital twin avatar from training footage video. Submit training footage and consent video to start the avatar creation process.",
878
+ "method": "POST",
879
+ "path": "/v1/digital-twin/create",
880
+ "input_schema": {
881
+ "type": "object",
882
+ "properties": {
883
+ "training_footage_url": {
884
+ "type": "string",
885
+ "description": "URL of the training footage video"
886
+ },
887
+ "video_consent_url": {
888
+ "type": "string",
889
+ "description": "URL of the consent video"
890
+ },
891
+ "avatar_name": {
892
+ "type": "string",
893
+ "description": "Name for the digital twin avatar"
894
+ }
895
+ },
896
+ "required": [
897
+ "training_footage_url",
898
+ "video_consent_url",
899
+ "avatar_name"
900
+ ]
901
+ }
902
+ },
903
+ {
904
+ "name": "get_digital_twin_status",
905
+ "description": "Check the training/generation status of a digital twin avatar",
906
+ "method": "GET",
907
+ "path": "/v1/digital-twin/{digital_twin_id}/status",
908
+ "input_schema": {
909
+ "type": "object",
910
+ "properties": {
911
+ "digital_twin_id": {
912
+ "type": "string",
913
+ "description": "The digital twin ID"
914
+ }
915
+ },
916
+ "required": [
917
+ "digital_twin_id"
918
+ ]
919
+ }
920
+ },
921
+ {
922
+ "name": "delete_digital_twin",
923
+ "description": "Delete a digital twin avatar",
924
+ "method": "DELETE",
925
+ "path": "/v1/digital-twin/{digital_twin_id}",
926
+ "input_schema": {
927
+ "type": "object",
928
+ "properties": {
929
+ "digital_twin_id": {
930
+ "type": "string",
931
+ "description": "The digital twin ID to delete"
932
+ }
933
+ },
934
+ "required": [
935
+ "digital_twin_id"
936
+ ]
937
+ }
938
+ },
939
+ {
940
+ "name": "text_to_speech",
941
+ "description": "Generate audio from text using HeyGen's AI voices (Starfish TTS engine)",
942
+ "method": "POST",
943
+ "path": "/v1/tts",
944
+ "input_schema": {
945
+ "type": "object",
946
+ "properties": {
947
+ "text": {
948
+ "type": "string",
949
+ "description": "Text to convert to speech"
950
+ },
951
+ "voice_id": {
952
+ "type": "string",
953
+ "description": "Voice ID to use"
954
+ },
955
+ "speed": {
956
+ "type": "number",
957
+ "description": "Speech speed multiplier (0.5-2.0)",
958
+ "default": 1
959
+ }
960
+ },
961
+ "required": [
962
+ "text",
963
+ "voice_id"
964
+ ]
965
+ }
966
+ },
967
+ {
968
+ "name": "list_tts_voices",
969
+ "description": "List voices compatible with the Starfish text-to-speech engine",
970
+ "method": "GET",
971
+ "path": "/v1/tts/voices",
972
+ "input_schema": {
973
+ "type": "object",
974
+ "properties": {}
975
+ }
182
976
  }
183
- ]
977
+ ],
978
+ "webhooks": {
979
+ "signature_header": "x-webhook-signature",
980
+ "events": [
981
+ {
982
+ "name": "avatar_video.success",
983
+ "description": "Video generation completed successfully"
984
+ },
985
+ {
986
+ "name": "avatar_video.fail",
987
+ "description": "Video generation failed"
988
+ },
989
+ {
990
+ "name": "video_translate.success",
991
+ "description": "Video translation completed"
992
+ },
993
+ {
994
+ "name": "video_translate.fail",
995
+ "description": "Video translation failed"
996
+ },
997
+ {
998
+ "name": "streaming.session_started",
999
+ "description": "Streaming session started"
1000
+ },
1001
+ {
1002
+ "name": "streaming.session_ended",
1003
+ "description": "Streaming session ended"
1004
+ }
1005
+ ]
1006
+ }
184
1007
  }