Archive a Record

Archive and restore records to hide them from active lists without deleting their data.


Archiving a record takes it out of its list without deleting it. The data — title, description, dates, assignees, tags, comments, checklists, and custom-field values — is preserved in full and reappears the moment you restore the record. Use the archiveRecord mutation to archive a record and unarchiveRecord to restore it. Records are Record objects in the API.

Archiving differs from deleting a record: a deleted record is moved to Trash and purged after the organization’s retention window, and only a project OWNER/ADMIN can restore it, whereas any member with edit access can archive and unarchive. It is also distinct from completion: a completed record (done: true) still lives in its list, whereas an archived record is hidden from it.

Both mutations take the record id and return the updated Record.

Request

Archive a record by passing its ID:

mutation ArchiveRecord {
  archiveRecord(id: "todo_123") {
    id
    archived
    archivedAt
  }
}

Restore it later with unarchiveRecord:

mutation RestoreRecord {
  unarchiveRecord(id: "todo_123") {
    id
    archived
    todoList {
      id
      title
    }
  }
}

Parameters

archiveRecord

ParameterTypeRequiredDescription
idString!YesID of the record to archive.

unarchiveRecord

ParameterTypeRequiredDescription
idString!YesID of the record to restore.

Response

Both mutations return the updated Record. After archiveRecord, archived is true and archivedAt carries the archive timestamp; after unarchiveRecord, archived is false and archivedAt is null.

{
  "data": {
    "archiveRecord": {
      "id": "todo_123",
      "archived": true,
      "archivedAt": "2026-06-05T14:21:00.000Z"
    }
  }
}

Returns

FieldTypeDescription
archivedBoolean!true after archiving, false after restoring.
archivedAtDateTimeWhen the record was archived. null once restored.
todoListRecordList!The record’s list. Unchanged by archiving — a restored record returns to the same list.

See List records for the full set of selectable Record fields.

What archiving does

When you archive a record, the API:

  1. Marks it archived and records the timestamp and the acting user. The record drops out of its list’s active view and out of list-records results unless you explicitly query the archive (see Archive scope).
  2. Notifies connected clients in real time so the card disappears from open sessions.
  3. Excludes the record from charts and reports, whose counts recalculate accordingly.

The record’s list and position are left untouched. unarchiveRecord clears the archived flag and timestamp, and the record snaps back to exactly the spot it occupied before — there is no need to move or re-position it.

Both mutations are idempotent

Re-archiving an already-archived record (or restoring an already-active one) is a no-op: the mutation returns the current record unchanged rather than erroring, and the original archivedAt / archived-by audit data is preserved. This is unlike archiving a workspace, where calling the mutation in the wrong state returns FORBIDDEN.

Errors

CodeWhen
TODO_NOT_FOUNDNo record exists with the given id, or the caller can’t access it.
FORBIDDENThe caller lacks permission to archive or restore the record (see below).
{
  "errors": [
    {
      "message": "Todo was not found.",
      "extensions": { "code": "TODO_NOT_FOUND" }
    }
  ]
}

Permissions

Access levelArchive / Restore
OWNERYes
ADMINYes
MEMBERYes
CLIENTNo
COMMENT_ONLYNo
VIEW_ONLYNo

The record’s workspace must be active (not archived). Custom roles can further restrict these actions independently: a role with canArchiveRecords: false is denied archiving, and one with canUnarchiveRecords: false is denied restoring, even at an otherwise-permitted access level. Restoring deliberately does not require the view-archived permission — a role that can reach an archived record by direct link or reference can restore it without being able to browse the archive.