Skip to Content
We are live but in Staging 🎉
API ReferenceBackup and Policy APIs

Backup and Policy APIs

Last validated: 2026-05-11

Use these APIs for backup lifecycle automation when CLI coverage is not available.

Method Inventory

gRPC methodHTTP annotationMain use case
CreateBackupPOST /v1/vbase/{service_id}/backupTrigger backup job for service/db collections.
ListBackupsGET /v1/vbase/{service_id}/backupList jobs for one service.
ListBackupByOrgPOST /v1/vbase/backup/org/{organization_id}List jobs for an organization across services.
RestoreBackupPOST /v1/vbase/{service_id}/backup/restoreTrigger restore job by backup name.
DeleteBackupDELETE /v1/vbase/{service_id}/backup/{backup_name}Delete backup artifact by backup name.
CreateBackupPolicyPOST /v1/vbase/{service_id}/backup/policyCreate recurring backup policy.
UpdateBackupPolicyPOST /v1/vbase/{service_id}/backup/policy/{policy_id}Modify schedule/retention/active status.
DeleteBackupPolicyDELETE /v1/vbase/{service_id}/backup/policy/{policy_id}Remove policy.

Core Request Arguments

CreateBackupRequest

FieldTypeRequiredDescription
service_idstringYesService to back up.
organization_idstringYesOrganization UUID for ownership validation.
db_namestringYesDatabase name in tenant endpoint.
collection_namesrepeated stringYesOne or more collections.
backup_nameoptional stringNoUser-defined backup label.

RestoreBackupRequest

FieldTypeRequiredDescription
service_idstringYesTarget service for restore.
organization_idstringYesTenant org UUID.
backup_namestringYesExisting backup artifact name.
db_namestringYesTarget DB name.
collection_namesrepeated stringYesCollections to restore.

CreateBackupPolicyRequest and UpdateBackupPolicyRequest

FieldTypeRequiredDescription
service_idstringYesService governed by this policy.
organization_idstringYes on createTenant organization ID.
policy_idstringYes on update/deleteExisting policy UUID.
schedule_cronstringYesCron expression for schedule.
retention_countint32YesNumber of backups to retain.
is_activeboolOptional on updateActive/inactive toggle.

End-to-End Examples

Create 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" }'

List backups for service

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"

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"] }'

Create daily backup policy

gRPC:

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

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/policy" \ -d '{ "service_id":"<service_id>", "organization_id":"'"$ORG_ID"'", "schedule_cron":"0 0 * * *", "retention_count":7 }'

Operational Notes

  • Backup deletion resolves job by backup_name for the given service; ensure names are unique enough for your organization conventions.
  • Keep db_name and collection_names aligned with current tenant state before restore.
  • Policy update/delete requires a valid UUID policy_id.