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/CreateBackupHTTP:
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/ListBackupsHTTP:
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/ListBackupByOrgStep 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/RestoreBackupHTTP:
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/CreateBackupPolicyUpdate 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/UpdateBackupPolicyDelete 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/DeleteBackupPolicyStep 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/DeleteBackupHTTP:
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_idUUID. - if jobs stay
RUNNING, inspect backup worker/storage connectivity.