> ## Documentation Index
> Fetch the complete documentation index at: https://docs.roofkit.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Contacts and Data Objects

> The RoofKit MCP tools for Contacts and Data Objects, with their access, kind, and arguments.

This page lists 37 tools. Each tool shows only to members whose role grants its access. The descriptions are the text that the MCP server sends to AI clients.

## List leads

List workspace Contacts as a sync feed ordered by updated\_at, oldest first. Use from/to to read only recent changes. The feed also holds contacts without a usable email or phone, which the Contacts list and the dashboards leave out. Do not page this list to count leads: for totals or breakdowns in a period, call roofkit.analytics.metric.get.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.list` | `leads.read` | Read |

**Arguments**

**limit** `number`

Page size, 1 to 500. Default 50.

**cursor** `string`

pagination.next\_cursor of the previous page.

**search** `string`

Matches name, email, phone, address, id, source, medium, or campaign.

**from** `string`

ISO 8601 date-time with an offset. Keeps leads updated at or after it.

**to** `string`

ISO 8601 date-time with an offset. Keeps leads updated at or before it.

**source** `string`

First-touch source key, for example google.

**medium** `string`

**campaign** `string`

**status\_stage\_id** `string`

A stage id from roofkit.leads.pipeline.list.

**lead\_type** `string`

Key or label of a workspace lead type.

**conversion\_type** `string`

Allowed values: `public_quiz`, `onsite_form`, `partner_api`, `jobnimbus_import`, `sms_inbound`, `phone_call`.

**communication\_channel** `string`

Allowed values: `call`, `sms`.

## Get lead

Get one lead by id.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.get` | `leads.read` | Read |

**Arguments**

**lead\_id** `string` *required*

## Create lead

Create or upsert a lead. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.create` | `leads.write` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**contact\_name** `string`

**contact\_email** `string`

**contact\_phone** `string`

**property\_address** `string`

**lead\_type** `string`

Key or label of a workspace lead type. Built-in keys: phone\_call, text\_message, roofkit\_site, own\_website, ad\_lead\_form, chat, email, appointment, manual, crm\_import, external, other. Create uses external when omitted. Update changes it only when sent. At most 100 characters.

## Update lead

Update a lead as the app does. Requires an idempotency key. Only the fields sent change. Warning: notes replaces the whole Notes field, so send the full text. quote\_value and sales\_value need financial access. The change is live: a stage change can send conversions to connected ad and analytics accounts, the lead syncs to a connected JobNimbus, and automations run.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.update` | `leads.write` | Write |

**Arguments**

**lead\_id** `string` *required*

**idempotency\_key** `string` *required*

**contact\_name** `string`

**contact\_email** `string`

**contact\_phone** `string`

**property\_address** `string`

**lead\_type** `string`

Key or label of a workspace lead type. Built-in keys: phone\_call, text\_message, roofkit\_site, own\_website, ad\_lead\_form, chat, email, appointment, manual, crm\_import, external, other. Create uses external when omitted. Update changes it only when sent. At most 100 characters.

**notes** `string | null`

Replaces the whole Notes field. It does not append. Read the lead first and send all the text to keep. An empty string or null clears it. At most 5000 characters.

**status\_stage\_id** `string`

A stage id from roofkit.leads.pipeline.list. Moves the lead to it.

**follow\_up\_date** `string | null`

ISO 8601 date-time with Z or a +/-HH:MM offset, for example 2026-11-03T15:00:00-05:00. null clears it.

**quote\_value** `number | null`

Quote value in dollars, not cents. Needs financial access. null clears it. Minimum 0. Maximum 10000000.

**sales\_value** `number | null`

Sales value in dollars, not cents. Needs financial access. null clears it. Minimum 0. Maximum 10000000.

**custom\_fields** `object`

Custom field values by field key. Only the keys sent change, and null clears one. Each key must be an active custom field of the workspace.

## List lead campaigns

List the marketing campaigns linked to a lead, with the first and last touch flags.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.campaigns.list` | `leads.read` | Read |

**Arguments**

**lead\_id** `string` *required*

## Attach campaign to lead

Link a marketing campaign to a lead, as the Campaigns section of the lead page does. The campaign becomes the last touch of the lead, and campaign reports count it. utm\_campaign links the campaign of that key and creates the campaign when none exists. Requires an idempotency key. The change is live.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.campaigns.attach` | `leads.write` | Write |

**Arguments**

**lead\_id** `string` *required*

**idempotency\_key** `string` *required*

**campaign\_id** `string`

A campaign id from roofkit.leads.campaigns.list.

**utm\_campaign** `string`

A campaign key, for example the key of a roofkit.campaigns.list row.

## Detach campaign from lead

Remove the link between a marketing campaign and a lead. The first and last touch flags move to the remaining campaigns, and campaign reports stop counting the lead for it. The campaign itself stays. Requires an idempotency key. The change is live.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.campaigns.detach` | `leads.write` | Destructive write |

**Arguments**

**lead\_id** `string` *required*

**idempotency\_key** `string` *required*

**campaign\_id** `string`

A campaign id from roofkit.leads.campaigns.list.

**utm\_campaign** `string`

A campaign key, for example the key of a roofkit.campaigns.list row.

## Archive lead

Archive a lead. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.delete` | `leads.write` | Destructive write |

**Arguments**

**lead\_id** `string` *required*

**idempotency\_key** `string` *required*

## List pipeline stages

List lead pipeline stages.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.pipeline.list` | `leads.read` | Read |

**Arguments**

This tool takes no arguments.

## List lead conversions

List conversion snapshots for a lead.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.leads.conversions.list` | `leads.read` | Read |

**Arguments**

**lead\_id** `string` *required*

## List Data Objects

List Data Object definitions for the workspace.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.list` | `data_objects.read` | Read |

**Arguments**

This tool takes no arguments.

## List Data Object records

List records for one Data Object, newest first. values are keyed by field id, and fields names each field (key, label, type).

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.list` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

**limit** `number`

## Get Data Object schema

Read the schema of one Data Object: the table, its fields with id, key, type, options, and relation target, its relationships, and its views. Send the field ids to the record tools, a relationship id to roofkit.objects.links.create, and a view id to the view tools. A financial field that you cannot read has is\_masked true.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.get` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

## Get Data Object record

Read one record of a Data Object: values keyed by field id, its links with their ids, its stage history, and updated\_at. A financial field that you cannot read has no value, and masked\_field\_ids names it.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.get` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**record\_id** `string` *required*

A record id from roofkit.objects.records.list.

## Create Data Object record

Create one record in a custom table. The record is live at once for every member. relationships links the new record in the same write. Contacts and Reports refuse: create a lead with roofkit.leads.create. Needs the Data Tables plan. Writing a financial field needs financial access. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.create` | `data_objects.write` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**values** `object` *required*

Field values keyed by field id or field key, from roofkit.objects.get.

**relationships** `object[]`

**properties**

**relationship\_definition\_id** `string` *required*

**target\_record\_ids** `string[]` *required*

## Update Data Object record

Change some fields of one record. Only the fields sent change, null clears one, and the change is live at once. On Contacts (system:leads) the email, phone, address, and attribution are read-only here: use roofkit.leads.update for a lead. A Contacts write also needs leads.write. Reports refuse. Undo a change with roofkit.objects.records.history.revert. A custom table needs the Data Tables plan. Writing a financial field needs financial access. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.update` | `data_objects.write` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**record\_id** `string` *required*

A record id from roofkit.objects.records.list.

**values** `object` *required*

Field values keyed by field id or field key, from roofkit.objects.get.

## Archive Data Object record

Archive one record of a custom table. It leaves every list at once, and its links are archived with it. Restore it with roofkit.objects.records.restore. Contacts and Reports refuse: archive a lead with roofkit.leads.delete. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.archive` | `data_objects.write` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**record\_id** `string` *required*

A record id from roofkit.objects.records.list.

## Restore Data Object record

Restore one archived record of a custom table with the links archived with it. It is live at once. It refuses when its table is archived, when a unique field value is taken, or at the record limit of the plan. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.restore` | `data_objects.write` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**record\_id** `string` *required*

A record id from roofkit.objects.records.list.

## Search relation targets

Search the records that a relation can link to, by name. object\_id is the target table id: relation\_target\_object\_id of a relation field in roofkit.objects.get, system:leads, or system:reports. Reports also need reports.read.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.relation_targets.search` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

Target table id. A slug is not accepted.

**search** `string`

At most 200 characters.

**limit** `integer`

Page size. Default 25. Minimum 1. Maximum 100.

**cursor** `string`

pagination.next\_cursor of the previous page.

## List record links

List the links of one record. outgoing holds the links that the record holds, and incoming the links that other records hold to it. Send the id of an outgoing link, or the relationship\_id of an incoming link, to roofkit.objects.links.delete.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.links.list` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**record\_id** `string` *required*

A record id from roofkit.objects.records.list.

## Link records

Link two records through one relationship of the source table, from relationships in roofkit.objects.get. The link is live at once on both records, and the cardinality of the relationship applies. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.links.create` | `data_objects.write` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**relationship\_definition\_id** `string` *required*

**source\_record\_id** `string` *required*

A record of the source table of the relationship.

**target\_record\_id** `string` *required*

A record from roofkit.objects.relation\_targets.search.

## Unlink records

Remove one link between two records. It is gone from both records at once. Undo it with roofkit.objects.records.history.revert. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.links.delete` | `data_objects.write` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**relationship\_id** `string` *required*

A link id from roofkit.objects.links.list.

## Save Data Object view

Create a view of one table, or update the view that view\_id names. Every member sees the change at once. config\_json is the config of a view in roofkit.objects.get, as JSON text: its filters, sorts, and columns. A kanban view groups by a status field. When the table has none, RoofKit adds a Deal stages field and names it in seeded\_status\_field. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.views.save` | `data_objects.views.manage` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Table id: object.id from roofkit.objects.get. A slug is not accepted.

**view\_id** `string`

A view id from roofkit.objects.get.

**name** `string` *required*

At most 120 characters.

**view\_type** `string` *required*

Allowed values: `table`, `kanban`, `list`.

**config\_json** `string`

At most 20000 characters.

**group\_by\_field\_id** `string | null`

Status field a kanban groups by.

**is\_default** `boolean`

Open this view first for every member.

## Archive Data Object view

Archive one view of a table. It leaves the view list of every member at once. The last view of a table cannot be archived. Bring it back with roofkit.objects.schema.versions.restore. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.views.archive` | `data_objects.views.manage` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Table id: object.id from roofkit.objects.get. A slug is not accepted.

**view\_id** `string` *required*

A view id from roofkit.objects.get.

## Create Data Object

Create a custom table from a template. It is live at once for every member with Data Objects access. It needs the Data Tables plan and room under the custom table limit: roofkit.objects.list answers custom\_table\_limit. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.create` | `data_objects.schema.manage` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**template\_key** `string` *required*

blank starts empty. Allowed values: `blank`, `insurance_claims`, `referral_partners`, `hoa_approvals`, `production_jobs`, `sales_efficiency`.

**label\_plural** `string` *required*

Table name, for example Jobs. At most 120 characters.

**label\_singular** `string` *required*

Name of one record, for example Job. At most 120 characters.

**description** `string | null`

null clears it. At most 2000 characters.

**icon** `string` *required*

Phosphor icon name, for example Table, HardHat, or ShieldCheck. At most 80 characters.

**color** `string` *required*

Hex color, for example #2563EB. RoofKit uses the nearest table palette color. At most 32 characters.

**slug** `string`

URL name. Default from label\_plural. At most 80 characters.

**view\_type** `string`

The first view. Default table. Allowed values: `table`, `kanban`, `list`.

## Update Data Object details

Change the name, description, icon, and color of a custom table. Send label\_plural, label\_singular, icon, and color each time. The change is live at once. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.update` | `data_objects.schema.manage` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Table id: object.id from roofkit.objects.get. A slug is not accepted.

**label\_plural** `string` *required*

Table name, for example Jobs. At most 120 characters.

**label\_singular** `string` *required*

Name of one record, for example Job. At most 120 characters.

**description** `string | null`

null clears it. At most 2000 characters.

**icon** `string` *required*

Phosphor icon name, for example Table, HardHat, or ShieldCheck. At most 80 characters.

**color** `string` *required*

Hex color, for example #2563EB. RoofKit uses the nearest table palette color. At most 32 characters.

## Save Data Object fields

Save the fields of one table with its name. Read roofkit.objects.get first and send every field in the order to show. A field with id changes it, and a field without id is created. archived\_field\_ids archives fields and hides their values. The change is live at once for every member. RoofKit keeps the schema before the save: roofkit.objects.schema.versions.restore brings it back. Needs the Data Tables plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.schema.save` | `data_objects.schema.manage` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Table id: object.id from roofkit.objects.get. A slug is not accepted.

**label\_plural** `string` *required*

Table name, for example Jobs. At most 120 characters.

**label\_singular** `string` *required*

Name of one record, for example Job. At most 120 characters.

**description** `string | null`

null clears it. At most 2000 characters.

**icon** `string` *required*

Phosphor icon name, for example Table, HardHat, or ShieldCheck. At most 80 characters.

**color** `string` *required*

Hex color, for example #2563EB. RoofKit uses the nearest table palette color. At most 32 characters.

**fields** `object[]` *required*

**properties**

**id** `string`

Id of an existing field. Leave it out to create the field.

**key** `string | null`

At most 80 characters.

**label** `string` *required*

At most 120 characters.

**field\_type** `string` *required*

text, long\_text, number, decimal, currency, date, datetime, boolean, email, phone, url, address, single\_select, multi\_select, status, relation, formula, or file\_url.

**description** `string | null`

**help\_text** `string | null`

**is\_required** `boolean` *required*

**is\_unique** `boolean` *required*

**options** `object[]`

Options of a select or status field. Keep the id of an option to keep its values.

**relation\_target\_object\_id** `string | null`

Target table id of a relation field.

**relation\_cardinality** `string | null`

Allowed values: `one_to_one`, `one_to_many`, `many_to_one`, `many_to_many`, `null`.

**relation\_inverse\_label** `string | null`

**formula** `object | null`

**archived\_field\_ids** `string[]`

**highlight\_field\_ids** `string[]`

Fields shown first on the record page.

**attribute\_order** `string[]`

Field ids in the order of the record page.

## Archive Data Object

Archive one custom table with its records and links. It leaves the navigation of every member at once. A built-in table, such as Contacts, Reports, or Opportunities, refuses with CONFLICT. Restore it with roofkit.objects.restore. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.archive` | `data_objects.schema.manage` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Table id: object.id from roofkit.objects.get. A slug is not accepted.

## Restore Data Object

Restore one archived custom table with its records and links. It needs room under the custom table limit of the plan. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.restore` | `data_objects.schema.manage` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Table id: object.id from roofkit.objects.get. A slug is not accepted.

## List archived tables and records

List the archived records of custom tables, and the archived tables when you can manage the schema. Restore them with roofkit.objects.records.restore and roofkit.objects.restore.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.trash.list` | `data_objects.write` | Read |

**Arguments**

This tool takes no arguments.

## Export Data Object CSV

Export the records of one table to a CSV file and return download\_url. The link works for 15 minutes without sign-in, so share it only with people who may read the data. The answer never holds the CSV. A custom table export without search, in created\_at or updated\_at order, holds up to 1,000 records: call again with next\_cursor while has\_more is true. Financial columns follow your financial access. The CSV export rule of the plan for your role applies.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.export` | `data_objects.export` | Read |

**Arguments**

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**view\_id** `string`

A view id from roofkit.objects.get.

**search** `string`

At most 200 characters.

**filters\_json** `string`

Filters in the form of a view config\_json. At most 20000 characters.

**sorts\_json** `string`

Sorts in the form of a view config\_json. At most 20000 characters.

**cursor** `string`

next\_cursor of the previous export.

## Import Data Object CSV

Import CSV rows into one custom table as new records. Send the CSV text, up to 2 MB, and one mapping for each CSV column: field (an existing field id), create\_field (a new field, also needs data\_objects.schema.manage), or ignore. Valid rows are live at once. rejected\_rows names each row that failed and why. Contacts and Reports refuse. Needs the Data Tables plan. Writing a financial field needs financial access. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.import` | `data_objects.import` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list. Contacts is system:leads.

**file\_name** `string` *required*

Name of the CSV file, for the import history. At most 200 characters.

**csv\_content** `string` *required*

The CSV text with a header row. At most 2000000 characters.

**mappings** `object[]` *required*

**properties**

**csv\_column** `string` *required*

**action** `string` *required*

Allowed values: `field`, `create_field`, `ignore`.

**field\_id** `string`

For field.

**label** `string`

For create\_field.

**field\_type** `string`

For create\_field.

## List record history

List the change history of one Data Object record, newest first. Each change names its kind (create, import, update, archive, restore, link, unlink, revert, restore\_version), its source (ui, agent, mcp, partner\_api, system), the member who made it, and each changed field with its value before and after. A financial field you cannot read shows restricted: financial and no values. record.updated\_at is the value to send as expected\_updated\_at to revert or restore.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.history.list` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list.

**record\_id** `string` *required*

**limit** `integer`

Page size. Default 20. Minimum 1. Maximum 50.

**cursor** `string`

next\_cursor of the previous page.

## Revert record change

Undo one change of a Data Object record. The change is live at once. A field change sets each field back to its value before the change. An archive restores the record, a restore archives it, a link removes the link, and an unlink adds it back. A create or an import cannot be reverted. The call refuses with CONFLICT when the record changed after you read it, or when a later change wrote one of the same fields: then use roofkit.objects.records.history.restore. Writing a financial field needs financial access. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.history.revert` | `data_objects.write` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list.

**record\_id** `string` *required*

**change\_id** `string` *required*

A change id from roofkit.objects.records.history.list.

**expected\_updated\_at** `string` *required*

record.updated\_at from the history you read. A record that changed since refuses the write with CONFLICT.

## Restore record version

Restore the field values a Data Object record held right after one change, by undoing every later value change. The change is live at once. Links and the archive state stay as they are. The call refuses with CONFLICT when the record changed after you read it, or when the record is archived. Writing a financial field needs financial access. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.records.history.restore` | `data_objects.write` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list.

**record\_id** `string` *required*

**change\_id** `string` *required*

A change id from roofkit.objects.records.history.list.

**expected\_updated\_at** `string` *required*

record.updated\_at from the history you read. A record that changed since refuses the write with CONFLICT.

## List schema versions

List the saved versions of a Data Object schema and of its visualizations, newest first. RoofKit keeps one version before each schema save, field save, visualization save, and visualization archive. Each version names its kind (schema or view), the member and source of the save, and current\_updated\_at, the value to send as expected\_updated\_at to restore it.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.schema.versions.list` | `data_objects.read` | Read |

**Arguments**

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list.

**limit** `integer`

Page size. Default 20. Minimum 1. Maximum 50.

**cursor** `string`

next\_cursor of the previous page.

## Restore schema version

Restore one version of a Data Object schema or visualization. The change is live at once for every member. A schema restore writes back the table labels, the fields, and their options, and archives fields created after the version. skipped\_field\_ids names the fields it could not restore, such as a relation whose relationship was archived. The state before the restore becomes a version too. The call refuses with CONFLICT when the schema or the visualization changed after you read it. A visualization restore also needs the visualization manage permission. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.objects.schema.versions.restore` | `data_objects.schema.manage` | Destructive write |

**Arguments**

**idempotency\_key** `string` *required*

**object\_id** `string` *required*

Data Object id or slug, from roofkit.objects.list.

**version\_id** `string` *required*

A version id from roofkit.objects.schema.versions.list.

**expected\_updated\_at** `string` *required*

current\_updated\_at of the version, as you read it.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.