API Conventions
Use this page as the baseline for all Ignite API calls.
Transport and Endpoints
Ignite has a dual surface: every service is reachable over gRPC and over HTTP/pbjson (JSON transcoding via google.api.http).
There are two HTTP path families:
/v1/ignite/...β Compute, Build, and Secret services./v1/...(OpenAI/Cohere-style) β the Model service (/v1/chat/completions,/v1/embeddings,/v1/models, β¦).
All services share the flat package dodil.ignite.v1.
The HTTP API is the simplest way in β plain JSON over HTTPS, nothing to install β and itβs the default tab in these docs. Every method is also available over gRPC (see Using gRPC).
Two endpoint families:
| Surface | Staging | Production |
|---|---|---|
HTTP (api) | https://api.dev.dodil.io | https://api.dodil.io |
gRPC (rpc) | rpc.dev.dodil.io:443 | rpc.dodil.io:443 |
Examples in these docs use staging. Export your token once and they work:
export DODIL_TOKEN="<your-token>" # bearer token for every authenticated callAuth
Send one header on authenticated requests:
Authorization: Bearer <token>
Your organization context is encoded in the bearer tokenβs claims β you donβt send an org id yourself. The gateway derives it and injects x-organization-name for downstream services.
Get a token with dodil login (interactive), or programmatically β apps and agents use the OAuth client-credentials flow. See Get an Access TokenΒ .
A few RPCs are public and need no auth: ListPublicCatalog, GetPublicCatalogDetail, HealthCheck, and the Model catalog reads (ListModels, GetModel).
Using gRPC
Every method is also reachable over gRPC as dodil.ignite.v1.<Service>/<Method> (e.g. dodil.ignite.v1.ComputeService/ListApps). Install grpcurl (brew install grpcurl) and set the endpoint once:
export IGNITE_GRPC="rpc.dev.dodil.io:443" # staging; production: rpc.dodil.io:443grpcurl discovers the schema via server reflection β no .proto file needed:
grpcurl -H "Authorization: Bearer $DODIL_TOKEN" $IGNITE_GRPC listIf your endpoint doesnβt expose reflection, point grpcurl at the proto instead β grpcurl -proto ignite_compute.proto -H "Authorization: Bearer $DODIL_TOKEN" $IGNITE_GRPC ....
Field-name casing. gRPC request bodies use the proto field names β snake_case like organization_name, exactly as the .proto blocks in these docs show (grpcurl also accepts camelCase). Responses render in camelCase β thatβs grpcurlβs default JSON output. The HTTP surface is camelCase both ways. So within a gRPC example: the request matches the proto block (snake_case), the response is camelCase.
pbjson Wire Notes
When using the HTTP/JSON surface:
- Field names are camelCase.
int64values are encoded as JSON strings.- Enums are wire-name strings (e.g.
"VERSION_STATUS_ACTIVE"). - In ModelService, OpenAI-polymorphic fields (where a value may be a string, object, or array) are carried as
google.protobuf.Value, so the JSON shape matches the OpenAI/Cohere request exactly.
Streaming
Several RPCs stream:
- Server-streaming (works over both gRPC and HTTP):
Invoke,WatchExecution,StreamAppLogs,StreamAppEvents,StreamCompileLogs,StreamChatCompletion,StreamRerank,StreamInfer,StreamBuildLogs. - Client-streaming, gRPC only:
UploadBuildContext(Build). The HTTP gateway cannot transcode client-streaming RPCs, so it is unavailable over HTTP.
See also
- Overview Β· Compute Β· Models Β· Builds Β· Secrets
- CLI Basics
- Auth and Access Β· Feature Status