Skip to content

This page describes the main entities in Shuffll and how they relate to each other. Understanding this model will help you navigate the API correctly — knowing which ID to use where, and how resources are scoped.


Entity overview

1 or more

has embedded

has embedded

contains

contains

contains

blueprint for

Organization

Workspace

Branding\n(embedded)

Template

Asset

Project


Organization

An Organization is the top-level container in Shuffll. It groups one or more workspaces under a single account and holds a shared branding configuration.

  • Retrieve your organizations and their workspace IDs with GET /auth/organization/list.
  • You need an organizationId to manage workspaces and their branding.

Workspace

A Workspace is the primary working environment. All content — projects, templates, and assets — lives inside a workspace, not directly on the organization. Each workspace also carries its own branding, which takes precedence over the organization's branding when videos are generated.

  • List workspaces via GET /auth/organization/{organizationId}.
  • Use GET /auth/workspace/{workspaceId}/projects to list a workspace's projects.
  • Workspace branding is managed via GET / PUT /auth/branding/entity?workspaceId=....

Template

A Template is a reusable video blueprint. It defines the scene structure, visual design, typography, media source pipeline, and default AI settings. Templates are workspace-scoped.

When you create a project from a template, the template configures the project's structure at creation time. It is not stored as a persistent link on the project afterward — the template is consumed once and the project stands on its own.

  • Browse templates with GET /auth/templates or GET /auth/organization/{organizationId}/workspace/{workspaceId}/templates.
  • Inspect a template's scene structure with GET /auth/templates/{templateId} before using it.

Asset

An Asset is a media file uploaded to a workspace — image, video, audio, or PDF. Assets are workspace-scoped and can be referenced directly in project creation requests via their uploadPath CDN URL.

  • Upload assets with POST /auth/workspace/{workspaceId}/assets.
  • The uploadPath returned on each asset is the URL to use in customTemplate.scenes[].videosToAdd[].url.

Project

A Project is a single video production. It is created inside a workspace, goes through an AI generation phase, automatic enhancement (post-production), and finally export. A project is the central unit of work in the Shuffll API.

  • Create a project with POST /auth/project/create.
  • Track status with GET /auth/project/{projectId}/create/status.
  • See Workflow Overview for the full lifecycle.

Branding

Branding is not a standalone entity — it is an embedded configuration inside both Organization and Workspace. It stores logo URLs, colour palette, company metadata, pronunciations, and the about text used in AI script generation.

Workspace branding takes precedence over organization branding when videos are generated. Manage branding with GET / PUT /auth/branding/entity.


Inside a Project

A project is composed of several parts that together define the complete video production:

Project

Creative\n(AI-generated script\nand storyline)

Scenes

Per-scene content\n(dynamic values, videos,\nsubtitles, static text)

AI Voice settings\n(provider, voice ID,\ntone instructions)

AI Avatar settings\n(avatar ID)

Font settings

Branding snapshot\n(applied at generation time)

Status\nSTRUCTURE → GENERATING_IMAGES → DONE

Export jobs\n(render results + output URLs)

API config\n(webhook URL, additionalParams)

ComponentDescription
CreativeThe AI-generated script and narrative structure — the content backbone of the video
ScenesOrdered list of scenes. Each scene has its own dynamic content, media, subtitle settings, and optional static text
AI Voice settingsWhich AI voice to use, the provider (OpenAI or ElevenLabs), and any tone/style instructions
AI Avatar settingsWhich AI avatar presenter to use, if any
Font settingsTypography applied across all scenes
Branding snapshotA copy of the workspace branding captured at creation time
StatusThe current stage: STRUCTUREGENERATING_IMAGESDONE (then enhancement begins)
Export jobsThe list of export runs and their output URLs (uploadPath MP4, dashPath DASH manifest)
API configThe webhook URL and any additionalParams to echo back in the webhook payload

Inside a Template

A template defines the blueprint used to initialise a project's structure. Its settings are applied (and in some cases overridable) at project creation time:

Template

Scene blueprints\n(structure and scene types)

Design reference\n(visual style, colours,\nanimations)

Flexibility\nrigid / minor / flexible

Font settings\n+ toUseTemplateFont flag

Video source pipeline\n(fallback order for scene media)

Image source pipeline\n(fallback order for scene images)

Default voice settings

AI description\n(system prompt injected\ninto script generation)

ComponentDescriptionOverridable at creation
Scene blueprintsDefines the number, type, and order of scenesPartially — flexibilityOverride controls how strictly they are followed
Design referencePoints to the visual design that drives colours, animations, and layoutNo
FlexibilityDefault AI adherence level for this templateYes — customTemplate.flexibilityOverride
Font settingsTypography for all scenesYes — customTemplate.fontsSettings or toUseTemplateFont
Video source pipelineDefault fallback order for scene video mediaYes — customTemplate.videoSourcesByOrder
Image source pipelineDefault fallback order for scene image slotsYes — customTemplate.imageSourcesByOrder
Default voice settingsVoice used if none is specified in the project requestYes — aiVoiceSettings at the project level
AI descriptionSystem prompt injected into script generationYes — customTemplate.description or toUseTemplateDescription

See Using Templates for a full guide on all overridable options.