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.
| RPC | HTTP |
|---|---|
CreateApp | POST /v1/ignite/app/{organization_name} |
GetApp | GET /v1/ignite/app/{organization_name}/{app_name} |
ListApps | GET /v1/ignite/app/{organization_name} |
UpdateAppConfig | PATCH /v1/ignite/app/{organization_name}/{app_name}/config |
DeleteApp | DELETE /v1/ignite/app/{organization_name}/{app_name} |
GetAppState | GET /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
HTTP
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
HTTP
{
"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
HTTP
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
HTTP
curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp?limit=50" \
-H "Authorization: Bearer $DODIL_TOKEN"Response
HTTP
{
"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
HTTP
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
HTTP
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
HTTP
curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/state" \
-H "Authorization: Bearer $DODIL_TOKEN"Response
HTTP
{
"appId": "acme-corp/my-data-processor",
"deploymentState": "DEPLOYMENT_STATE_DEPLOYED",
"lastInvokedAtMs": "1748390400000"
}See also
- Drafts — attach code, compile, publish
- Versions — list, rollback, inspect versions
- Invocation — invoke an app, track executions
- Core Concepts → App — the full
AppMetatype grpcurlreference — flags + reflection fallbacks