Projects
A Project is the primary organizational unit in the Backoffice. It represents a personalized video campaign (e.g. "Credit Card Pre-Approval Q2 2026"). Each project contains templates, distribution channels, and optionally public landing pages.
Fields
| Field | Type | Notes |
|---|---|---|
id | UUID | Immutable |
organizationId | UUID | Owning organization |
name | string | Required |
slug | string | URL-safe, unique within the organization |
description | string | Optional |
status | enum | Draft, Active, Archived |
createdAt | ISO 8601 | UTC |
createdBy | UUID | User who created the project |
archivedAt | ISO 8601 | Set when status moves to Archived |
Status lifecycle
Draft ──► Active
│ │
└────────►└──► Archived
- Draft — newly created project. Templates can be uploaded and tested.
- Active — project is live. Templates can be published to PROD.
- Archived — project is closed. All distribution channels are unpublished automatically. A project cannot be deleted if it has templates in
Productionstatus.
API endpoints
| Method | Path | Role required | Description |
|---|---|---|---|
GET | /api/Projects?organizationId={id} | Viewer+ | List projects (paginated) |
GET | /api/Projects/{id} | Viewer+ | Get project with templates and channels |
POST | /api/Projects | OrgAdmin / Owner | Create project |
PUT | /api/Projects/{id} | OrgAdmin / Owner | Update name or description |
POST | /api/Projects/{id}/archive | OrgAdmin / Owner | Archive project |
Creating a project
POST /api/Projects
Authorization: Bearer {token}
X-Percus-Forwarded-Active-Org: {orgId}
X-Percus-Forwarded-Org-Role: OrganizationAdmin
{
"name": "Credit Card Pre-Approval Q2",
"description": "Campaign for pre-approved credit card offers"
}
The slug is derived automatically from the name and is unique within the organization.
Project detail response
A GET /api/Projects/{id} response includes:
{
"id": "uuid",
"name": "Credit Card Pre-Approval Q2",
"slug": "credit-card-pre-approval-q2",
"description": "...",
"status": "Draft",
"createdAt": "2026-01-15T10:00:00Z",
"templates": [ ... ],
"distributionChannels": [
{ "channel": "DEV", "activeTemplateId": null, "publishedAt": null },
{ "channel": "STAGING", "activeTemplateId": null, "publishedAt": null },
{ "channel": "PROD", "activeTemplateId": null, "publishedAt": null }
],
"publicVideoShares": [ ... ]
}
Related
- Templates — upload and version templates within a project
- Distribution Channels — publish templates to DEV / STAGING / PROD
- Public Video Shares — create public landing pages for a channel