Skip to content

Developers · Data

Data Backup and Removal

Last updated 1 November 2026

This article describes how removed data is backed up. It also discusses when archived data is removed permanently.

deleted_at

Every record you create in our database has several built-in properties. One of those properties is which is when the record is created. When you delete a record, the system fills this property with a record of the date and time of the delete operation by default.

For example, you can delete a record like this. Pass the record id and the name of its table:

mutation DefaultDelete($id: ID!, $table: String!) {
  record_delete(id: $id, table: $table) {
    deleted_at
  	id
  }
}

GraphQL queries do not return those records. You can find them by filtering records by the existing property ().

For example:

query records {
  records(
    per_page: 10
    filter: {
      deleted_at: { exists: true }
    }
  ) {
    results {
      deleted_at
      id
    }
  }
}

Automatic delayed permanent removal

About 30 days after the date set in , an overnight job permanently deletes the data.

For example, if is 2020-03-15T14:28:48.153Z (15 March 2020, 2:28 PM UTC), the overnight job deletes the record about 30 days later, around 14 April 2020. Until then, you can still recover it by setting to .

Manual permanent removal

You can force permanent removal by setting the value to a date more than 30 days ago.

For example:

You want the record to be deleted as soon as possible.
Assuming it is 30 April, you would set to a date more than 30 days ago, for example, March 10, which means it will be permanently deleted in the next purge.

mutation Delete($id: ID!, $deleted_at: JSONDate) {
  record_update(
    id: $id
    record: {
      deleted_at: $deleted_at
    }
  ) {
    id
  }
}

Important

A record that has been deleted using both and methods cannot be recovered in any way.

Undeleting data

If you want to bring back a record, you can nullify , and this record will not be marked as deleted.

mutation Undelete($id: ID!) {
  record_update(
    id: $id
    record: { deleted_at: null }
  ) {
    id
  }
}

You can also set to a different, future date to prolong its permanent removal or move the date backwards to speed up its removal.