Skip to content

Profiles

A Profile is a named, reusable bundle of video settings. Instead of repeating the same choices on every upload — encoding tier, watermark, caption languages, visibility, allowed domains, player — you save them once as a Profile and attach it where you need it.

Profiles are sparse: a Profile carries only the settings it has an opinion on. Every setting a video needs is resolved through three layers, most specific first:

  1. The video's own value — anything you set directly on the video always wins.
  2. The video's Profile — the Profile attached at upload or later (optional).
  3. The project's default Profile — every project has one; it is the last word.

A setting nobody carries falls back to the built-in default (private, full encoding tier, originals kept, no restrictions).

Fixed at encoding vs. live

Some settings are consumed while your video is being encoded and are stamped onto it: the encoding tier, watermark, audio normalization, caption languages and the AI flags. Editing a Profile never re-encodes anything — stamped settings only affect videos created after the edit.

Allowed domains, the player and keep-originals are live: they re-resolve on every request, so editing a Profile applies immediately to every video resolving through it. Flip a Profile's player and every attached embed uses it on the next load.

public and folder_id are creation defaults: the Profile decides a new video's visibility and where it is filed, once, at upload. After that both are ordinary video attributes you change on the video itself — editing the Profile never changes existing videos. To flip many at once, use Make public / Make private in the bulk bar.

Settings a Profile can carry

Key Kind Notes
encoding_tier stamped full or baseline
watermark_id stamped burned in during encoding
normalize_audio stamped loudness normalization
auto_tt stamped caption languages; [] means "caption nothing"
auto_chapters stamped chapters generate right after auto-captions complete at ingest
auto_shots stamped shot detection runs when the encode is ready
public creation default stamped at upload; floor: private
allowed_domains live comma-separated registered domains; "" = unrestricted
player_id live the player used by embeds
keep_originals live applies as each video's encode finishes; already-stored originals are never deleted by a profile edit
folder_id creation default where new videos are filed

The default Profile

Every project has a Profile named Default that is created with the project — the project settings page edits it. It cannot be deleted, and it is where project-wide defaults live: what used to be "project settings" for encoding tier, caption languages, allowed domains, keep-originals and the default player is simply the default Profile now.

Using Profiles

Create and manage Profiles under Settings → Profiles in the dashboard, or via the API:

curl -u :$API_KEY https://api.heapstream.com/api/v1/project/$PROJECT_ID/profile \
  -H 'Content-Type: application/json' \
  -d '{"title": "Marketing site",
       "player_id": "1234567890",
       "settings": {"public": true, "allowed_domains": "example.com", "auto_tt": ["en"]}}'

Attach one at upload (metadata.profile_id), on fetch, or to an existing video (profile_id on video edit — attaching later applies the live settings immediately, but never re-encodes). Detach with profile_id: 0. To attach a profile to many videos at once — a whole folder, say — select them in the gallery and use Set profile in the bulk bar.

Editing is sparse, key by key:

# set a key, clear another (null = back to "no opinion"), leave the rest untouched
curl -u :$API_KEY -X PUT https://api.heapstream.com/api/v1/project/$PROJECT_ID/profile/$PROFILE_ID \
  -H 'Content-Type: application/json' \
  -d '{"settings": {"public": false, "normalize_audio": null}}'

The same tri-state applies to a video's own dynamic settings: setting keep_originals, allowed_domains or player_id on a video shadows its Profiles for that key; setting it to null clears the video's value so the Profile answers again. public is different — it was stamped at upload and edits simply flip the video itself (null is rejected).

A Profile that videos still use, or that is a project default, cannot be deleted — the API answers 412 with the attached-video count, so a delete can never silently change what a video resolves to.

Limits

Up to 100 Profiles per project; titles are unique within a project (up to 100 characters).