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"
}'const app = await client.apps.create({
orgId: "org_a1b2c3d4e5",
name: "Production",
description: "Live video transcoding for our streaming platform",
});app = client.apps.create(
org_id="org_a1b2c3d4e5",
name="Production",
description="Live video transcoding for our streaming platform",
)app, err := client.Apps.Create(ctx, &transcodely.AppCreateParams{
OrgId: "org_a1b2c3d4e5",
Name: "Production",
Description: proto.String("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" }'const app = await client.apps.archive("app_k1l2m3n4o5");app = client.apps.archive("app_k1l2m3n4o5")err := client.Apps.Archive(ctx, "app_k1l2m3n4o5")Webhooks
Deprecated: The app-level
webhookfield is deprecated. Use the WebhookService instead — it supports multiple signed endpoints per app, HMAC-SHA-256 signing with secret rotation, per-event-type subscriptions, delivery history, and health metrics. The legacy field is retained only for backwards compatibility.
Manage webhook endpoints for an app in the Webhooks dashboard, via the WebhookService API, or with the official SDKs (e.g. client.webhookEndpoints.create({ appId, url, enabledEvents })). For an end-to-end walkthrough — creating an endpoint, verifying signatures, and handling events — see the Webhook Integration guide.
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
}'for await (const app of client.apps.list({
orgId: "org_a1b2c3d4e5",
pagination: { limit: 20 },
includeArchived: false,
}).autoPage()) {
console.log(app.id, app.name);
}for app in client.apps.list(limit=20).auto_paging_iter():
print(app.id, app.name)iter := client.Apps.List(ctx, &transcodely.AppListParams{
OrgId: "org_a1b2c3d4e5",
Pagination: &transcodely.PaginationRequest{Limit: 20},
IncludeArchived: false,
})
for iter.Next() {
app := iter.Current()
fmt.Println(app.GetId(), app.GetName())
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}