Skip to Content
We are live but in Staging 🎉

Apps — API Reference

Package: dodil.ignite.v1 · Service: ComputeService

An app is the unit of compute — a named, org-scoped definition. These RPCs cover the app’s metadata and config; code is attached separately through the draft workflow (or inline on CreateApp via the code field). The app type is AppMeta.

gRPC reaches every method at dodil.ignite.v1.ComputeService/<Method> on $IGNITE_GRPC; the HTTP gateway mirrors each one. See Conventions → Using gRPC for grpcurl setup. gRPC requests use the proto field names (snake_case); HTTP uses pbjson (camelCase). Responses render camelCase.

RPCHTTP
CreateAppPOST /v1/ignite/app/{organization_name}
GetAppGET /v1/ignite/app/{organization_name}/{app_name}
ListAppsGET /v1/ignite/app/{organization_name}
UpdateAppConfigPATCH /v1/ignite/app/{organization_name}/{app_name}/config
DeleteAppDELETE /v1/ignite/app/{organization_name}/{app_name}
GetAppStateGET /v1/ignite/app/{organization_name}/{app_name}/state

CreateApp

Creates the app definition. Metadata only by default — pass code (a CodeSource) to combine CreateApp + SaveDraft in one call.

Request

curl -sS -X POST "https://api.dev.dodil.io/v1/ignite/app/acme-corp" \ -H "Authorization: Bearer $DODIL_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "my-data-processor", "resourceTier": "RESOURCE_TIER_MEDIUM", "description": "Parses a PDF and extracts structured text", "env": { "LOG_LEVEL": "info" } }'

Response

{ "appId": "acme-corp/my-data-processor", "deploymentState": "DEPLOYMENT_STATE_CREATED", "appliedTier": "RESOURCE_TIER_MEDIUM", "appliedLimits": { "memoryMb": 512, "cpuMillicores": 500 } }

Next: attach code with SaveDraft, then PublishDraft.

GetApp

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

GetAppResponse { AppMeta app = 1; } — the full AppMeta.

ListApps

Lightweight, cursor-paginated list for an org.

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp?limit=50" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "apps": [ { "id": "acme-corp/my-data-processor", "name": "my-data-processor", "activeVersion": 3, "deploymentState": "DEPLOYMENT_STATE_DEPLOYED" } ], "nextCursor": "", "totalCount": "1" }

UpdateAppConfig

Patch-style — only set fields are applied, no new version created. Repeated fields (tags, labels, ports) need an explicit clear_* sentinel to reset, since an empty list is ambiguous.

Request

curl -sS -X PATCH "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/config" \ -H "Authorization: Bearer $DODIL_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "resourceTier": "RESOURCE_TIER_LARGE", "scaling": { "maxReplicas": 20, "scaleMetric": "SCALE_METRIC_CONCURRENCY", "scaleThreshold": 4 } }'

Response

UpdateAppConfigResponse { AppMeta app = 1; } — the updated AppMeta.

DeleteApp

Request

curl -sS -X DELETE "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

Empty (DeleteAppResponse {}).

GetAppState

Deployment/lifecycle snapshot — useful before invoking (cold apps need activation).

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/state" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "appId": "acme-corp/my-data-processor", "deploymentState": "DEPLOYMENT_STATE_DEPLOYED", "lastInvokedAtMs": "1748390400000" }

See also