Search Documentation
Search across all documentation pages
Apps

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 config

Creating 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

StatusDescriptionBehavior
activeNormal operationFull access to all resources
archivedSoft-deletedNo 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 webhook field 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)
}