Databases (Serverless) — API Reference
Package: dodil.vbase.v1 · Service: VBaseService
This is the generally available VBase surface. A serverless database is a Milvus database allocated for your organization on shared, managed infrastructure — you get a connection endpoint and a db_name, and you do everything else with the Milvus SDK. You never manage Milvus pods, users, or RBAC; VBase owns all of that.
gRPC reaches every method at dodil.vbase.v1.VBaseService/<Method>; the HTTP gateway mirrors each one. Authenticate with Authorization: Bearer <IAM token> (Auth and Access).
| RPC | HTTP |
|---|---|
AllocateDatabase | POST /v1/vbase/databases |
GetService | GET /v1/vbase/{service_id} |
GetServiceAccess | GET /v1/vbase/{service_id}/access |
ListServices | GET /v1/vbase/list/{organization_id} |
DeleteDatabase | DELETE /v1/vbase/databases |
HealthCheck | GET /v1/vbase/healthz |
The allocate → poll → connect flow
AllocateDatabase is asynchronous. It returns immediately with a service whose service_status is CREATING. The database is not connectable until it reaches RUNNING. The flow is:
AllocateDatabase→ returns aservice_idand statusCREATING.- Poll
GetServicewith thatservice_iduntilservice_statusisRUNNING(or surfaces an error state). GetServiceAccess→ returns theendpoint,port, anddb_name.- Point the Milvus SDK at
endpoint:portwith thatdb_nameand your bearer token, then create collections, build indexes, and search.
AllocateDatabase ──▶ CREATING ──(poll GetService)──▶ RUNNING ──▶ GetServiceAccess ──▶ endpoint + port + db_name ──▶ Milvus SDKservice_status is a ServiceStatus enum. The states you will see for a serverless database:
| Status | Meaning |
|---|---|
CREATING | Allocation in progress. Not yet connectable. |
RUNNING | Ready. Use GetServiceAccess and connect. |
DELETING / DELETED | Teardown in progress / complete. |
ERROR | Allocation failed. |
AllocateDatabase
Allocates a new serverless database for your organization. Returns immediately — see the flow above. Requires the AllocateServerlessDatabase scope.
Request
HTTP
curl -sS -X POST "https://api.dev.dodil.io/v1/vbase/databases" \
-H "Authorization: Bearer $DODIL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "acme-corp",
"name": "product-search"
}'Response
HTTP
{
"database": {
"serviceId": "svc-7f3a9c2e",
"serviceName": "product-search",
"serviceType": "DATABASE",
"serviceStatus": "CREATING",
"createAt": "2026-05-29T10:00:00Z",
"organizationId": "acme-corp"
},
"response": { "success": true }
}Capture database.serviceId — you need it for every subsequent call.
GetService
Returns the current ServiceInfo, including service_status. Poll this after AllocateDatabase until the status is RUNNING. Requires the GetVBaseService scope.
Request
HTTP
curl -sS "https://api.dev.dodil.io/v1/vbase/svc-7f3a9c2e" \
-H "Authorization: Bearer $DODIL_TOKEN"Response
HTTP
{
"service": {
"serviceId": "svc-7f3a9c2e",
"serviceName": "product-search",
"serviceType": "DATABASE",
"serviceStatus": "RUNNING",
"createAt": "2026-05-29T10:00:00Z",
"organizationId": "acme-corp"
},
"response": { "success": true }
}A simple poll loop:
until [ "$(curl -sS "https://api.dev.dodil.io/v1/vbase/$SVC" \
-H "Authorization: Bearer $DODIL_TOKEN" | jq -r .service.serviceStatus)" = "RUNNING" ]; do
sleep 3
doneGetServiceAccess
Returns the connection details for a RUNNING database. This is what you hand to the Milvus SDK. Requires the GetVBaseServiceAccess scope.
Request
HTTP
curl -sS "https://api.dev.dodil.io/v1/vbase/svc-7f3a9c2e/access" \
-H "Authorization: Bearer $DODIL_TOKEN"Response
HTTP
{
"access": [
{
"serviceId": "svc-7f3a9c2e",
"endpoint": "product-search.vbase.dev.dodil.io",
"port": 443,
"dbName": "db_7f3a9c2e"
}
],
"response": { "success": true }
}The three fields you need:
| Field | Use with the Milvus SDK |
|---|---|
endpoint | The host. Combine with port as the connection URI. |
port | The port — typically 443 (TLS). |
db_name | The Milvus database name to select on connect. |
Next: Connect with the Milvus SDK using these values plus your bearer token, then create a collection and search.
ListServices
Lists the databases (and any dedicated clusters) in an organization. Supports status filtering and pagination. Requires the ListVBaseService scope.
Request
HTTP
curl -sS "https://api.dev.dodil.io/v1/vbase/list/acme-corp" \
-H "Authorization: Bearer $DODIL_TOKEN"Response
HTTP
{
"services": [
{
"serviceId": "svc-7f3a9c2e",
"serviceName": "product-search",
"serviceType": "DATABASE",
"serviceStatus": "RUNNING",
"createAt": "2026-05-29T10:00:00Z",
"organizationId": "acme-corp"
}
],
"totalCount": 1,
"response": { "success": true }
}DeleteDatabase
Deletes a serverless database. Identified by database_id (the service_id from allocation). Requires the DeleteServerlessDatabase scope.
Request
HTTP
curl -sS -X DELETE "https://api.dev.dodil.io/v1/vbase/databases" \
-H "Authorization: Bearer $DODIL_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "databaseId": "svc-7f3a9c2e" }'Response
common.MsgResp { success, message?, code? } — success: true on a queued deletion. The service moves through DELETING to DELETED.
HealthCheck
Liveness probe for the VBase control plane. No authentication context is required for the health path. To check the health of an allocated database instead, use the Milvus SDK against its endpoint (or dodil vbase status — see the CLI Guide).
Request
HTTP
curl -sS "https://api.dev.dodil.io/v1/vbase/healthz"Response
{ "status": "ok", "service": "vbase", "timestamp": "1748512800" }See also
- Connecting with the Milvus SDK — the next step after
GetServiceAccess. - Recipes — end-to-end collection + search examples.
- RunCommand (Advanced) — fallback bridge for Milvus operations.
- CLI Guide → Databases —
dodil vbase db create/list/use/drop.