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

# Sheets

> API reference for Essal Office spreadsheet operations — CRUD, cell range reads and writes.

## List Sheets

`GET /v1/office/sheets`

Returns a paginated list of spreadsheets in the workspace.

***

## Create a Sheet

`POST /v1/office/sheets`

```json theme={null}
{
  "title": "Budget 2026",
  "initial_sheets": [
    { "name": "Q1", "rows": 100, "columns": 20 },
    { "name": "Q2", "rows": 100, "columns": 20 }
  ]
}
```

**Response** — `201 Created`

```json theme={null}
{
  "id": "sht_01HXYZSHT1",
  "title": "Budget 2026",
  "sheet_count": 2,
  "created_at": "2026-07-10T09:30:00Z"
}
```

***

## Read a Cell Range

`GET /v1/office/sheets/{id}/values`

**Query Parameters**

| Parameter      | Type   | Description                         |
| -------------- | ------ | ----------------------------------- |
| `range`        | string | A1 notation range, e.g. `Q1!A1:D10` |
| `value_render` | enum   | `formatted` (default) or `raw`      |

**Response**

```json theme={null}
{
  "range": "Q1!A1:D4",
  "values": [
    ["Category", "Jan", "Feb", "Mar"],
    ["Revenue", 48000, 52000, 61000],
    ["Expenses", 31000, 34000, 37000],
    ["Net", 17000, 18000, 24000]
  ]
}
```

***

## Write a Cell Range

`PUT /v1/office/sheets/{id}/values`

```json theme={null}
{
  "range": "Q1!A5",
  "values": [["Total", 161000, 104000, 57000]],
  "value_input": "raw"
}
```

***

## Delete a Sheet

`DELETE /v1/office/sheets/{id}`

Soft-deletes the spreadsheet. Pass `?hard=true` for permanent deletion.

**Response** — `204 No Content`
