Skip to Content
We are live but in Staging 🎉
WorkflowsWorkflow: Backup, Restore, and Policy (gRPC and HTTP)

Workflow: Backup, Restore, and Policy (gRPC and HTTP)

Last validated: 2026-05-11

Use this workflow for operational data protection because current CLI does not expose first-class backup commands.

Step 1: Trigger backup

gRPC:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{ "service_id":"<service_id>", "organization_id":"'"$ORG_ID"'", "db_name":"<db_name>", "collection_names":["docs"], "backup_name":"docs-backup-001" }' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/CreateBackup

HTTP:

curl -sS -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://api.dev.dodil.io:443/v1/vbase/<service_id>/backup" \ -d '{ "service_id":"<service_id>", "organization_id":"'"$ORG_ID"'", "db_name":"<db_name>", "collection_names":["docs"], "backup_name":"docs-backup-001" }'

Step 2: Monitor backup jobs

gRPC:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{"service_id":"<service_id>"}' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/ListBackups

HTTP:

curl -sS \ -H "Authorization: Bearer $TOKEN" \ "https://api.dev.dodil.io:443/v1/vbase/<service_id>/backup"

Optional org-wide list:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{"organization_id":"'"$ORG_ID"'"}' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/ListBackupByOrg

Step 3: Restore backup

gRPC:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{ "service_id":"<service_id>", "organization_id":"'"$ORG_ID"'", "backup_name":"docs-backup-001", "db_name":"<db_name>", "collection_names":["docs"] }' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/RestoreBackup

HTTP:

curl -sS -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://api.dev.dodil.io:443/v1/vbase/<service_id>/backup/restore" \ -d '{ "service_id":"<service_id>", "organization_id":"'"$ORG_ID"'", "backup_name":"docs-backup-001", "db_name":"<db_name>", "collection_names":["docs"] }'

Step 4: Create and maintain backup policy

Create policy (daily, retain 7):

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{ "service_id":"<service_id>", "organization_id":"'"$ORG_ID"'", "schedule_cron":"0 0 * * *", "retention_count":7 }' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/CreateBackupPolicy

Update policy:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{ "service_id":"<service_id>", "policy_id":"<policy_id>", "schedule_cron":"0 3 * * *", "retention_count":14, "is_active":true }' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/UpdateBackupPolicy

Delete policy:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{"service_id":"<service_id>","policy_id":"<policy_id>"}' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/DeleteBackupPolicy

Step 5: Delete backup artifact by backup name

gRPC:

grpcurl -insecure \ -H "authorization: Bearer $TOKEN" \ -d '{"service_id":"<service_id>","backup_name":"docs-backup-001"}' \ "rpc.dev.dodil.io:443" dodil.vbase.v1.VBaseService/DeleteBackup

HTTP:

curl -sS -X DELETE \ -H "Authorization: Bearer $TOKEN" \ "https://api.dev.dodil.io:443/v1/vbase/<service_id>/backup/docs-backup-001"

Practical Notes

  • backup delete uses backup_name, not job ID.
  • policy update/delete expect valid policy_id UUID.
  • if jobs stay RUNNING, inspect backup worker/storage connectivity.