Apps
An App represents an isolated project or environment within an Organization. Each app has its own API keys, origins, presets, and jobs, making it easy to separate production from staging, or to run multiple independent products under a single billing entity.
Overview
Apps provide resource isolation within an organization. A typical setup might look like:
Acme Corporation (org)
├── Production (app) — live API keys, production origins
├── Staging (app) — test API keys, staging origins
└── Analytics (app) — separate project with its own configCreating an App
curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Create
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: org_a1b2c3d4e5"
-H "Content-Type: application/json"
-d '{
"org_id": "org_a1b2c3d4e5",
"name": "Production",
"description": "Live video transcoding for our streaming platform"
}'{
"app": {
"id": "app_k1l2m3n4o5",
"org_id": "org_a1b2c3d4e5",
"name": "Production",
"description": "Live video transcoding for our streaming platform",
"status": "active",
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z"
}
}App names must be unique within an organization (case-insensitive) and are limited to 60 characters.
App Status
| Status | Description | Behavior |
|---|---|---|
active | Normal operation | Full access to all resources |
archived | Soft-deleted | No new resources can be created; existing jobs continue to completion |
Archive an app when you no longer need it. Existing jobs will finish processing, but no new jobs, API keys, or origins can be created.
curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Archive
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: org_a1b2c3d4e5"
-H "Content-Type: application/json"
-d '{ "id": "app_k1l2m3n4o5" }'Webhook Configuration
Each app can have a webhook endpoint configured to receive real-time notifications about job events. Webhooks are configured at the app level and apply to all jobs within that app.
curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Create
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: org_a1b2c3d4e5"
-H "Content-Type: application/json"
-d '{
"org_id": "org_a1b2c3d4e5",
"name": "Production",
"webhook": {
"url": "https://api.yourapp.com/webhooks/transcodely",
"generate_secret": true,
"events": ["job.completed", "job.failed", "job.progress"]
}
}'When generate_secret is true, the response includes a one-time webhook secret for signature verification:
{
"app": {
"id": "app_k1l2m3n4o5",
"webhook": {
"url": "https://api.yourapp.com/webhooks/transcodely",
"has_secret": true,
"secret_hint": "...f4g5",
"events": ["job.completed", "job.failed", "job.progress"]
}
},
"webhook_secret": "whsec_a1b2c3d4e5f6g7h8i9j0..."
}Store the webhook_secret securely. It is only returned once at creation (or when regenerated).
Supported Webhook Events
| Event | Description |
|---|---|
job.completed | All outputs finished successfully |
job.failed | Job failed with an error |
job.canceled | Job was canceled by the user |
job.progress | Job progress updated (batched) |
output.completed | A single output finished |
output.failed | A single output failed |
If no events are specified, the default is ["job.completed", "job.failed"].
Updating Webhook Configuration
You can update the webhook URL, regenerate the secret, or change the event subscriptions:
curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Update
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: org_a1b2c3d4e5"
-H "Content-Type: application/json"
-d '{
"id": "app_k1l2m3n4o5",
"webhook": {
"url": "https://api.yourapp.com/v2/webhooks",
"regenerate_secret": true,
"events": ["job.completed", "job.failed"]
}
}'To disable webhooks, set the URL to an empty string.
Listing Apps
curl -X POST https://api.transcodely.com/transcodely.v1.AppService/List
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: org_a1b2c3d4e5"
-H "Content-Type: application/json"
-d '{
"org_id": "org_a1b2c3d4e5",
"pagination": { "limit": 20 },
"include_archived": false
}'