Skip to main content
POST /v3/avatars/looks dresses an avatar you already own in curated looks. Give it one existing look as the identity reference and a curated template_id, and the new looks join that look’s character. Where prompting gives you one look at a time in your own words, a pack gives you a whole coordinated set in one call.
1

Pick a method

2

Pick a template id

Eight packs from the gallery. Style packs, the first four, keep the setting neutral and move the wardrobe and palette. Role packs, the last four, put your avatar into a job with the wardrobe and setting that go with it.
modern-corporate

Modern Corporate

stylish-business-casual

Stylish Business-Casual

scandinavian-minimal

Scandinavian Minimal

cool-tech-slate

Cool Tech / Slate

healthcare

Healthcare

keynote-power-presenter

Keynote Power Presenter

fitness

Fitness

automotive-dealership

Automotive Dealership

Template ids are 32-character hex strings, and every pack ships as a female and a male variant, so pick the one matching your avatar.The full gallery is browsable in the HeyGen app, covering real estate, legal, teaching, construction and more. Enterprise workspaces can have custom packs built and assigned to them, which then work here exactly like the rest. To have one assigned, contact sales.
3

Send the request

Packs generate at 16:9. Pass aspect_ratio: "9:16" and the delivered frames are center-cropped to portrait as the final step, which is worth knowing when you plan the framing of the reference look.
reference_look_id is any look you own, from a digital twin, a photo, or a prompt. Its character is where the results land, so there is no group field to set.
4

Poll the new looks

The response names the character the looks joined and gives one id per look being generated:
Each id starts at processing. Poll GET /v3/avatars/looks/{look_id} until it reports completed, at which point the preview is available and the id is usable as avatar_id for POST /v3/videos, or failed, where error.message gives the reason.To see every look on the character at once, including the originals, call GET /v3/avatars/looks?group_id=group_xyz789.
Send an Idempotency-Key header so a retry after a network timeout cannot start a second generation. The examples preserve their keys when rerun in the same shell; in an application, persist the key with the request so a restart can retry with the same key and body. Use a new key for each different request. While the original request is still in flight, a retry returns 409 with error.code of request_in_progress: wait, then retry. Once the original finishes, a retry within 24 hours replays its response.

Template access

A template id your workspace has access to resolves normally. One that belongs to another workspace returns 403, and an id that matches no template returns 400. Sending a pack id with type: "template", or a single template id with type: "look_pack", returns a 400 naming the method that would have taken it.