Search Documentation
Search across all documentation pages
Apps

The App object

Apps are projects within an organization. Each app has its own API keys, jobs, origins, presets, and webhook endpoints. Use apps to separate environments (production, staging) or different products.

Base path: transcodely.v1.AppService Requires: X-Organization-ID header on all endpoints.


Attributes

AttributeTypeDescription
idstringUnique identifier. Prefixed with app_.
org_idstringParent organization ID.
namestringDisplay name.
descriptionstringDescription. Omitted if not set.
statusenumOne of: active, archived.
created_atstringISO 8601 timestamp.
updated_atstringISO 8601 timestamp.
archived_atstringISO 8601 timestamp. Omitted if not archived.
hosting_enabledbooleanWhether managed video hosting is enabled for this app. Omitted if not set.
hosting_statusstringHosting readiness. One of: active, provisioning, not_configured.
cdn_hostnamestringCDN hostname for delivered videos (e.g., transcodely-app-xxx.b-cdn.net). Only set when hosting is active.
hosting_configobjectHosting configuration. Only set when hosting is enabled. See Update hosting configuration.
objectstringResource type. Always "app".
{
  "id": "app_k1l2m3n4o5",
  "object": "app",
  "org_id": "org_f6g7h8i9j0",
  "name": "Production",
  "description": "Production video processing",
  "status": "active",
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-01-15T10:30:00Z"
}

App-level webhooks have been removed. The legacy per-app webhook config — along with the generate_secret / regenerate_secret flags that used to appear on Create and Update — no longer exists on the wire. Register signed endpoints with the WebhookService instead, which supports multiple endpoints per app, HMAC-SHA-256 signing with rotation, per-event subscriptions, delivery history, and health metrics. See the Webhook Integration guide.


Create an app

Create a new app within an organization.

POST /transcodely.v1.AppService/Create

Parameters

ParameterTypeRequiredDescription
org_idstringYesParent organization ID (e.g., "org_f6g7h8i9j0").
namestringYesDisplay name (1-60 chars). Must be unique within the organization (case-insensitive).
descriptionstringNoOptional description (max 500 chars).
enable_hostingbooleanNoProvision managed video hosting (CDN) infrastructure for the app on creation. Defaults to false. Cannot be disabled once enabled.

Returns

Returns an App object.

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Create 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -H "Content-Type: application/json" 
  -d '{
    "org_id": "org_f6g7h8i9j0",
    "name": "Production",
    "description": "Production video processing"
  }'
const app = await client.apps.create({
  orgId: "org_f6g7h8i9j0",
  name: "Production",
  description: "Production video processing",
});
app = client.apps.create(
    org_id="org_f6g7h8i9j0",
    name="Production",
    description="Production video processing",
)
app, err := client.Apps.Create(ctx, &transcodely.AppCreateParams{
	OrgId:       "org_f6g7h8i9j0",
	Name:        "Production",
	Description: proto.String("Production video processing"),
})
{
  "app": {
    "id": "app_k1l2m3n4o5",
    "object": "app",
    "org_id": "org_f6g7h8i9j0",
    "name": "Production",
    "description": "Production video processing",
    "status": "active",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z"
  }
}

Retrieve an app

Retrieve an app by its ID.

POST /transcodely.v1.AppService/Get

Parameters

ParameterTypeRequiredDescription
idstringYesApp ID (e.g., "app_k1l2m3n4o5").

Returns

Returns an App object.

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Get 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -H "Content-Type: application/json" 
  -d '{"id": "app_k1l2m3n4o5"}'
const app = await client.apps.get("app_k1l2m3n4o5");
app = client.apps.get("app_k1l2m3n4o5")
app, err := client.Apps.Get(ctx, "app_k1l2m3n4o5")
{
  "app": {
    "id": "app_k1l2m3n4o5",
    "object": "app",
    "org_id": "org_f6g7h8i9j0",
    "name": "Production",
    "description": "Production video processing",
    "status": "active",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z"
  }
}

Update an app

Update an app’s name and description.

POST /transcodely.v1.AppService/Update

Parameters

ParameterTypeRequiredDescription
idstringYesApp ID.
namestringNoNew display name (1-60 chars).
descriptionstringNoNew description (max 500 chars).

Returns

Returns the updated App object.

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Update 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -H "Content-Type: application/json" 
  -d '{
    "id": "app_k1l2m3n4o5",
    "name": "Production (v2)"
  }'
const app = await client.apps.update({
  id: "app_k1l2m3n4o5",
  name: "Production (v2)",
});
app = client.apps.update(
    id="app_k1l2m3n4o5",
    name="Production (v2)",
)
app, err := client.Apps.Update(ctx, &transcodely.AppUpdateParams{
	Id:   "app_k1l2m3n4o5",
	Name: proto.String("Production (v2)"),
})
{
  "app": {
    "id": "app_k1l2m3n4o5",
    "object": "app",
    "org_id": "org_f6g7h8i9j0",
    "name": "Production (v2)",
    "description": "Production video processing",
    "status": "active",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-02-28T15:00:00Z"
  }
}

List apps

List apps within an organization.

POST /transcodely.v1.AppService/List

Parameters

ParameterTypeRequiredDescription
org_idstringYesOrganization ID.
paginationobjectNoPagination parameters. See API Reference overview.
include_archivedbooleanNoIf true, include archived apps. Default: false.

Returns

Returns a list of App objects and pagination metadata.

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/List 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -H "Content-Type: application/json" 
  -d '{
    "org_id": "org_f6g7h8i9j0",
    "pagination": {"limit": 20}
  }'
for await (const app of client.apps.list({
  orgId: "org_f6g7h8i9j0",
  pagination: { limit: 20 },
}).autoPage()) {
  console.log(app.id, app.name);
}
for app in client.apps.list(org_id="org_f6g7h8i9j0", limit=20).auto_paging_iter():
    print(app.id, app.name)
iter := client.Apps.List(ctx, &transcodely.AppListParams{
	OrgId:      "org_f6g7h8i9j0",
	Pagination: &transcodely.PaginationRequest{Limit: 20},
})
for iter.Next() {
	app := iter.Current()
	fmt.Println(app.GetId(), app.GetName())
}
if err := iter.Err(); err != nil {
	log.Fatal(err)
}
{
  "apps": [
    {
      "id": "app_k1l2m3n4o5",
      "object": "app",
      "org_id": "org_f6g7h8i9j0",
      "name": "Production",
      "description": "Production video processing",
      "status": "active",
      "created_at": "2025-01-15T10:30:00Z",
      "updated_at": "2025-01-15T10:30:00Z"
    }
  ],
  "pagination": {
    "next_cursor": "",
    "total_count": 1
  }
}

Archive an app

Soft-delete an app. Archived apps cannot create new resources, but existing jobs continue processing.

POST /transcodely.v1.AppService/Archive

Parameters

ParameterTypeRequiredDescription
idstringYesApp ID.

Returns

Returns the App object with status: "archived".

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/Archive 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -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")
{
  "app": {
    "id": "app_k1l2m3n4o5",
    "object": "app",
    "org_id": "org_f6g7h8i9j0",
    "name": "Production",
    "status": "archived",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-02-28T15:00:00Z",
    "archived_at": "2025-02-28T15:00:00Z"
  }
}

Enable hosting

Turn on managed video hosting for an app. This provisions a managed storage bucket and prepares CDN infrastructure for delivering transcoded output.

This is a one-way operation — once hosting is enabled it cannot be disabled.

POST /transcodely.v1.AppService/EnableHosting

Parameters

ParameterTypeRequiredDescription
idstringYesApp ID (e.g., "app_k1l2m3n4o5").

Returns

Returns the App object with hosting_enabled: true. Immediately after enabling, hosting_status is provisioning; it becomes active once the CDN is ready and cdn_hostname is assigned.

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/EnableHosting 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -H "Content-Type: application/json" 
  -d '{"id": "app_k1l2m3n4o5"}'
const { app } = await client.apps.enableHosting({ id: "app_k1l2m3n4o5" });
app = client.apps.enable_hosting(id="app_k1l2m3n4o5").app
app, err := client.Apps.EnableHosting(ctx, "app_k1l2m3n4o5")
{
  "app": {
    "id": "app_k1l2m3n4o5",
    "object": "app",
    "org_id": "org_f6g7h8i9j0",
    "name": "Production",
    "status": "active",
    "hosting_enabled": true,
    "hosting_status": "provisioning",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-02-28T15:00:00Z"
  }
}

Update hosting configuration

Update an app’s hosting configuration. Only the fields you provide are merged into the existing config; omitted fields are left unchanged. Hosting must already be enabled — this returns failed_precondition if it is not.

POST /transcodely.v1.AppService/UpdateHostingConfig

Parameters

ParameterTypeRequiredDescription
idstringYesApp ID.
hosting_configobjectYesHosting configuration to merge. See fields below.

The hosting_config object:

FieldTypeDescription
default_visibilitystringDefault visibility for new uploads. One of: public, unlisted, private.
max_upload_size_bytesintegerMaximum upload file size in bytes (0 = no limit).
cors_allowed_originsstring[]Domains allowed to embed or fetch videos from the CDN. System defaults (the player base URL) are always included.
auto_profile_defaultsobjectAuto-transcoding defaults applied when an upload does not name a preset. See fields below.

The auto_profile_defaults object:

FieldTypeDescription
formatstringOutput format. One of: hls, dash, mp4.
codecstringVideo codec. One of: h264, h265, vp9, av1.
max_resolutionstringMaximum output resolution. One of: 480p, 720p, 1080p, 1440p, 2160p.
quality_tierstringQuality tier. One of: economy, standard, premium.
encoding_modestringEncoding mode. One of: fixed (static CRF) or auto (input-aware constrained CRF).

Returns

Returns the updated App object with the merged hosting_config.

curl -X POST https://api.transcodely.com/transcodely.v1.AppService/UpdateHostingConfig 
  -H "Authorization: Bearer {{API_KEY}}" 
  -H "X-Organization-ID: {{ORG_ID}}" 
  -H "Content-Type: application/json" 
  -d '{
    "id": "app_k1l2m3n4o5",
    "hosting_config": {
      "default_visibility": "unlisted",
      "cors_allowed_origins": ["https://example.com"]
    }
  }'
const { app } = await client.apps.updateHostingConfig({
  id: "app_k1l2m3n4o5",
  hostingConfig: {
    defaultVisibility: "unlisted",
    corsAllowedOrigins: ["https://example.com"],
  },
});
app = client.apps.update_hosting_config(
    id="app_k1l2m3n4o5",
    hosting_config={
        "default_visibility": "unlisted",
        "cors_allowed_origins": ["https://example.com"],
    },
).app
app, err := client.Apps.UpdateHostingConfig(ctx, &transcodely.AppUpdateHostingConfigParams{
	Id: "app_k1l2m3n4o5",
	HostingConfig: &transcodely.HostingConfig{
		DefaultVisibility:  proto.String("unlisted"),
		CorsAllowedOrigins: []string{"https://example.com"},
	},
})
{
  "app": {
    "id": "app_k1l2m3n4o5",
    "object": "app",
    "org_id": "org_f6g7h8i9j0",
    "name": "Production",
    "status": "active",
    "hosting_enabled": true,
    "hosting_status": "active",
    "cdn_hostname": "transcodely-app-k1l2m3n4o5.b-cdn.net",
    "hosting_config": {
      "default_visibility": "unlisted",
      "cors_allowed_origins": ["https://example.com"]
    },
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-02-28T15:00:00Z"
  }
}