Appwrite Backups API
The Backups service allows you to manage backup policies, archives, and restorations for your project. 12 operations across 7 paths in the Appwrite 2.0.0 OpenAPI.
The Backups service allows you to manage backup policies, archives, and restorations for your project. 12 operations across 7 paths in the Appwrite 2.0.0 OpenAPI.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/appwrite-backups-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.0.0
info:
title: Appwrite Backups API
description: Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)
version: 2.0.0
termsOfService: https://appwrite.io/policy/terms
contact:
name: Appwrite Team
url: https://appwrite.io/support
email: team@appwrite.io
license:
name: BSD-3-Clause
url: https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE
servers:
- url: https://cloud.appwrite.io/v1
description: Appwrite Cloud endpoint.
- url: https://{region}.cloud.appwrite.io/v1
description: Appwrite Cloud regional endpoint. Replace `{region}` with your project region.
variables:
region:
default: fra
description: Appwrite Cloud region.
tags:
- name: backups
description: The Backups service allows you to manage backup policies, archives, and restorations for your project.
paths:
/backups/archives:
get:
summary: List archives
operationId: backupsListArchives
tags:
- backups
description: List all archives for a project.
responses:
'200':
description: Backup archive list
content:
application/json:
schema:
$ref: '#/components/schemas/backupArchiveList'
deprecated: false
x-appwrite:
group: null
demo: backups/list-archives.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: archives.read
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: queries
description: Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long.
required: false
schema:
type: array
items:
type: string
default: []
in: query
post:
summary: Create archive
operationId: backupsCreateArchive
tags:
- backups
description: Create a new archive asynchronously for a project.
responses:
'201':
description: Archive
content:
application/json:
schema:
$ref: '#/components/schemas/backupArchive'
deprecated: false
x-appwrite:
group: null
demo: backups/create-archive.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: archives.write
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
requestBody:
content:
application/json:
schema:
type: object
properties:
services:
description: Array of services to backup
type: array
items:
title: BackupServices
type: string
oneOf:
- type: string
enum:
- databases
title: databases
- type: string
enum:
- tablesdb
title: tablesdb
- type: string
enum:
- documentsdb
title: documentsdb
- type: string
enum:
- vectorsdb
title: vectorsdb
- type: string
enum:
- dedicatedDatabases
title: dedicatedDatabases
- type: string
enum:
- functions
title: functions
- type: string
enum:
- storage
title: storage
resourceId:
description: Resource ID. When set, only this single resource will be backed up.
type: string
example: <RESOURCE_ID>
nullable: true
required:
- services
/backups/archives/{archiveId}:
get:
summary: Get backup archive
operationId: backupsGetArchive
tags:
- backups
description: Get a backup archive using it's ID.
responses:
'200':
description: Archive
content:
application/json:
schema:
$ref: '#/components/schemas/backupArchive'
deprecated: false
x-appwrite:
group: null
demo: backups/get-archive.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: archives.read
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: archiveId
description: Archive ID. Choose a custom ID`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
required: true
schema:
type: string
example: <ARCHIVE_ID>
in: path
delete:
summary: Delete archive
operationId: backupsDeleteArchive
tags:
- backups
description: Delete an existing archive for a project.
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: null
demo: backups/delete-archive.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: archives.write
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: archiveId
description: Policy ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
required: true
schema:
type: string
x-appwrite:
idGenerator: ID.unique
example: <ARCHIVE_ID>
in: path
/backups/policies:
get:
summary: List backup policies
operationId: backupsListPolicies
tags:
- backups
description: List all policies for a project.
responses:
'200':
description: Backup policy list
content:
application/json:
schema:
$ref: '#/components/schemas/backupPolicyList'
deprecated: false
x-appwrite:
group: null
demo: backups/list-policies.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope:
- policies.read
- backups.policies.read
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: queries
description: Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long.
required: false
schema:
type: array
items:
type: string
default: []
in: query
post:
summary: Create backup policy
operationId: backupsCreatePolicy
tags:
- backups
description: Create a new backup policy.
responses:
'201':
description: backup
content:
application/json:
schema:
$ref: '#/components/schemas/backupPolicy'
deprecated: false
x-appwrite:
group: null
demo: backups/create-policy.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope:
- policies.write
- backups.policies.write
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
requestBody:
content:
application/json:
schema:
type: object
properties:
policyId:
description: Policy ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
type: string
example: <POLICY_ID>
x-appwrite:
idGenerator: ID.unique
name:
description: 'Policy name. Max length: 128 chars.'
type: string
default: ''
example: <NAME>
services:
description: Array of services to backup
type: array
items:
title: BackupServices
type: string
oneOf:
- type: string
enum:
- databases
title: databases
- type: string
enum:
- tablesdb
title: tablesdb
- type: string
enum:
- documentsdb
title: documentsdb
- type: string
enum:
- vectorsdb
title: vectorsdb
- type: string
enum:
- dedicatedDatabases
title: dedicatedDatabases
- type: string
enum:
- functions
title: functions
- type: string
enum:
- storage
title: storage
resourceId:
description: Resource ID. When set, only this single resource will be backed up.
type: string
example: <RESOURCE_ID>
nullable: true
enabled:
description: Is policy enabled? When set to 'disabled', no backups will be taken
type: boolean
default: true
example: false
retention:
description: Days to keep backups before deletion
type: integer
example: 1
format: int32
schedule:
description: Schedule CRON syntax.
type: string
required:
- policyId
- services
- retention
- schedule
/backups/policies/{policyId}:
get:
summary: Get backup policy
operationId: backupsGetPolicy
tags:
- backups
description: Get a backup policy using it's ID.
responses:
'200':
description: backup
content:
application/json:
schema:
$ref: '#/components/schemas/backupPolicy'
deprecated: false
x-appwrite:
group: null
demo: backups/get-policy.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope:
- policies.read
- backups.policies.read
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: policyId
description: Policy ID. Choose a custom ID`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
required: true
schema:
type: string
example: <POLICY_ID>
in: path
patch:
summary: Update backup policy
operationId: backupsUpdatePolicy
tags:
- backups
description: Update an existing policy using it's ID.
responses:
'200':
description: backup
content:
application/json:
schema:
$ref: '#/components/schemas/backupPolicy'
deprecated: false
x-appwrite:
group: null
demo: backups/update-policy.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope:
- policies.write
- backups.policies.write
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: policyId
description: Policy ID. Choose a custom ID`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
required: true
schema:
type: string
example: <POLICY_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
description: 'Policy name. Max length: 128 chars.'
type: string
example: <NAME>
nullable: true
retention:
description: Days to keep backups before deletion
type: integer
example: 1
format: int32
nullable: true
schedule:
description: Cron expression
type: string
enabled:
description: Is Backup enabled? When set to 'disabled', No backup will be taken
type: boolean
example: false
nullable: true
delete:
summary: Delete backup policy
operationId: backupsDeletePolicy
tags:
- backups
description: Delete a policy using it's ID.
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: null
demo: backups/delete-policy.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope:
- policies.write
- backups.policies.write
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: policyId
description: Policy ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
required: true
schema:
type: string
x-appwrite:
idGenerator: ID.unique
example: <POLICY_ID>
in: path
/backups/restoration:
post:
summary: Create restoration
operationId: backupsCreateRestoration
tags:
- backups
description: 'Create and trigger a new restoration for a backup on a project.
For a backup of one database, the restoration resolves its destination before it is queued. When `newResourceId` is omitted, the archived database is restored in place and its own ID is returned in `options`. Pass a different `newResourceId` to restore alongside it as a new database instead.
The restoration migration records the archived database in `resourceId` and `resourceType`, and the resolved database in `destinationResourceId` and `destinationResourceType`. Database types are stored canonically as `database`, `documentsdb`, or `vectorsdb`. Project-wide restorations leave these fields empty because they do not have a single source or destination database.
To list every migration related to one database, use its canonical type in a nested `OR(AND(...), AND(...), AND(...))` across the root, parent, and destination relation pairs: `(resourceType, resourceId)`, `(parentResourceType, parentResourceId)`, and `(destinationResourceType, destinationResourceId)`. Legacy and TablesDB databases use `database`; the operational `resourceType` of a table migration is not rewritten to `tablesdb`.
When restoring a DocumentsDB or VectorsDB database from a dedicated source, the restore provisions a fresh dedicated backing database at the source database''s own specification and lands the data there. An in-place restore swaps the database onto that backing only once the restore has succeeded, and retires the backing it displaced only once that swap is confirmed, so the source keeps serving its own data until the restored data is in place and any failure leaves it untouched. A serverless source has no dedicated backing to clone and restores onto the archived database instead.
'
responses:
'201':
description: Restoration
content:
application/json:
schema:
$ref: '#/components/schemas/backupRestoration'
deprecated: false
x-appwrite:
group: null
demo: backups/create-restoration.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: restorations.write
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
requestBody:
content:
application/json:
schema:
type: object
properties:
archiveId:
description: Backup archive ID to restore
type: string
example: <ARCHIVE_ID>
services:
description: Array of services to restore
type: array
items:
title: BackupServices
type: string
oneOf:
- type: string
enum:
- databases
title: databases
- type: string
enum:
- tablesdb
title: tablesdb
- type: string
enum:
- documentsdb
title: documentsdb
- type: string
enum:
- vectorsdb
title: vectorsdb
- type: string
enum:
- dedicatedDatabases
title: dedicatedDatabases
- type: string
enum:
- functions
title: functions
- type: string
enum:
- storage
title: storage
newResourceId:
description: Destination resource ID. Omit to restore the archived resource in place, or pass a different ID to restore alongside it as a new resource. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
type: string
default: ''
example: <NEW_RESOURCE_ID>
x-appwrite:
idGenerator: ID.unique
newResourceName:
description: 'Database name. Max length: 128 chars.'
type: string
default: ''
example: <NEW_RESOURCE_NAME>
required:
- archiveId
- services
/backups/restorations:
get:
summary: List restorations
operationId: backupsListRestorations
tags:
- backups
description: List all backup restorations for a project.
responses:
'200':
description: Backup restoration list
content:
application/json:
schema:
$ref: '#/components/schemas/backupRestorationList'
deprecated: false
x-appwrite:
group: null
demo: backups/list-restorations.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: restorations.read
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: queries
description: Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long.
required: false
schema:
type: array
items:
type: string
default: []
in: query
/backups/restorations/{restorationId}:
get:
summary: Get backup restoration
operationId: backupsGetRestoration
tags:
- backups
description: Get the current status of a backup restoration.
responses:
'200':
description: Restoration
content:
application/json:
schema:
$ref: '#/components/schemas/backupRestoration'
deprecated: false
x-appwrite:
group: null
demo: backups/get-restoration.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: restorations.read
platforms:
- console
- server
packaging: false
public: true
auth:
console:
Project: []
server:
Project: []
Key: []
security:
- Project: []
Key: []
parameters:
- name: restorationId
description: Restoration ID. Choose a custom ID`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
required: true
schema:
type: string
example: <RESTORATION_ID>
in: path
components:
schemas:
backupArchive:
description: Archive
type: object
properties:
$id:
type: string
description: Archive ID.
example: 5e5ea5c16897e
$createdAt:
type: string
description: Archive creation time in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
$updatedAt:
type: string
description: Archive update date in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
policyId:
type: string
description: Archive policy ID.
example: did8jx6ws45jana098ab7
size:
type: integer
description: Archive size in bytes.
format: int32
example: 100000
status:
type: string
description: 'The status of the archive creation. Possible values: pending, processing, uploading, completed, failed, skipped.'
example: completed
startedAt:
type: string
description: The backup start time.
example: '2020-10-15T06:38:00.000+00:00'
migrationId:
type: string
description: Migration ID.
example: did8jx6ws45jana098ab7
services:
type: array
description: The services that are backed up by this archive.
items:
type: string
example:
- '[''databases'', ''storage'']'
resources:
type: array
description: The resources that are backed up by this archive.
items:
type: string
example:
- '[''databases'', ''collections'', ''attributes'', ''indexes'']'
resourceId:
type: string
description: The resource ID to backup. Set only if this archive should backup a single resource.
example: DB1
nullable: true
resourceType:
type: string
description: The resource type to backup. Set only if this archive should backup a single resource.
example: database
nullable: true
required:
- $id
- $createdAt
- $updatedAt
- policyId
- size
- status
- startedAt
- migrationId
- services
- resources
example:
$id: 5e5ea5c16897e
$createdAt: '2020-10-15T06:38:00.000+00:00'
$updatedAt: '2020-10-15T06:38:00.000+00:00'
policyId: did8jx6ws45jana098ab7
size: 100000
status: completed
startedAt: '2020-10-15T06:38:00.000+00:00'
migrationId: did8jx6ws45jana098ab7
services: '[''databases'', ''storage'']'
resources: '[''databases'', ''collections'', ''attributes'', ''indexes'']'
resourceId: DB1
resourceType: database
backupArchiveList:
description: Backup archive list
type: object
properties:
total:
type: integer
description: Total number of archives that matched your query.
format: int32
example: 5
archives:
type: array
description: List of archives.
items:
$ref: '#/components/schemas/backupArchive'
example: []
required:
- total
- archives
example:
total: 5
archives: ''
backupPolicy:
description: backup
type: object
properties:
$id:
type: string
description: Backup policy ID.
example: 5e5ea5c16897e
name:
type: string
description: Backup policy name.
example: Hourly backups
$createdAt:
type: string
description: Policy creation date in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
$updatedAt:
type: string
description: Policy update date in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
services:
type: array
description: The services that are backed up by this policy.
items:
type: string
example:
- '[''databases'', ''storage'']'
resources:
type: array
description: The resources that are backed up by this policy.
items:
type: string
example:
- '[''databases'', ''collections'', ''attributes'', ''indexes'']'
resourceId:
type: string
description: The resource ID to backup. Set only if this policy should backup a single resource.
example: DB1
nullable: true
resourceType:
type: string
description: The resource type to backup. Set only if this policy should backup a single resource.
example: database
nullable: true
retention:
type: integer
description: How many days to keep the backup before it will be automatically deleted.
format: int32
example: 7
schedule:
type: string
description: Policy backup schedule in CRON format.
example: 0 * * * *
type:
type: string
description: 'Backup type. Possible values: full (complete database snapshot), incremental (changes since last backup).'
example: full
enabled:
type: boolean
description: Is this policy enabled.
example: true
required:
- $id
- name
- $createdAt
- $updatedAt
- services
- resources
- retention
- schedule
- type
- enabled
example:
$id: 5e5ea5c16897e
name: Hourly backups
$createdAt: '2020-10-15T06:38:00.000+00:00'
$updatedAt: '2020-10-15T06:38:00.000+00:00'
services: '[''databases'', ''storage'']'
resources: '[''databases'', ''collections'', ''attributes'', ''indexes'']'
resourceId: DB1
resourceType: database
retention: 7
schedule: 0 * * * *
type: full
enabled: true
backupPolicyList:
description: Backup policy list
type: object
properties:
total:
type: integer
description: Total number of policies that matched your query.
format: int32
example: 5
policies:
type: array
description: List of policies.
items:
$ref: '#/components/schemas/backupPolicy'
example: []
required:
- total
- policies
example:
total: 5
policies: ''
backupRestoration:
description: Restoration
type: object
properties:
$id:
type: string
description: Restoration ID.
example: 5e5ea5c16897e
$createdAt:
type: string
description: Restoration creation time in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
$updatedAt:
type: string
description: Restoration update date in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
archiveId:
type: string
description: Backup archive ID.
example: did8jx6ws45jana098ab7
policyId:
type: string
description: Backup policy ID.
example: did8jx6ws45jana098ab7
status:
type: string
description: 'The status of the restoration. Possible values: pending, downloading, processing, completed, failed.'
example: completed
startedAt:
type: string
description: The backup start time.
example: '2020-10-15T06:38:00.000+00:00'
migrationId:
type: string
description: Migration ID.
example: did8jx6ws45jana098ab7
services:
type: array
description: The services that are backed up by this policy.
items:
type: string
example:
- '[''databases'', ''storage'']'
resources:
type: array
description: The resources that are backed up by this policy.
items:
type: string
example:
- '[''databases'', ''collections'', ''attributes'', ''indexes'']'
options:
type: string
description: 'Optional data in key-value object. '
example: '{databases.database[{oldId, newId, newName}]}'
required:
-
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/appwrite/refs/heads/main/openapi/appwrite-backups-api-openapi.yml