Download OpenAPI specification:Download
Публичный REST API для чтения и записи данных в таблицах Coverse.
API рассчитан на интеграции (машина-машина): создайте токен доступа в настройках аккаунта Coverse (раздел «Автоматизация и API») и обращайтесь к эндпоинтам /v1. Значения читаются из заранее вычисленного снимка, поэтому при чтении формулы уже посчитаны; запись проходит через движок таблиц, так что отправленные формулы пересчитываются на сервере.
Как устроены значения ячеек (важно при построении интеграций):
Каждая ячейка возвращается как { v, m, f? }. v — исходное значение,
m — строка в том виде, в каком её видит пользователь, f — формула
(только у формульных ячеек). Пустая ячейка возвращается как null.
Числа в v используют точку как десятичный разделитель. Строка m
следует локали документа (в русском документе число может выглядеть как
1 234,50).
Даты хранятся в v как серийные номера (число дней от эпохи таблицы), а в
m — как отформатированная строка.
При записи формул используйте английские имена функций, ; как разделитель
аргументов и , как десятичный разделитель, например =SUM(A1;B1),
=ROUND(3,14159;2).
Возвращает документы, доступные владельцу токена. Требуется право sheets.read. В список попадает каждый документ, который пользователь может открыть; доступ проверяется по каждому документу теми же правами, что и в приложении.
| type | string Examples: type=table Фильтр по типу документа, например |
curl "https://app.coverse.team/v1/documents?type=table" \ -H "Authorization: Bearer $TOKEN"
{- "documents": [
- {
- "id": "3f2b9c10-8a4e-4f21-9b7d-2c5e6a1f0d34",
- "type": "table",
- "title": "Заявки",
- "revisionId": "121",
- "createdAt": "2026-06-01T10:00:00+00:00",
- "updatedAt": "2026-07-09T09:15:14+00:00",
- "content": {
}
}
]
}Возвращает один документ по идентификатору. Требуется право sheets.read и доступ на просмотр документа.
| document required | string <uuid> Идентификатор документа (UUID). |
curl "https://app.coverse.team/v1/documents/$DOCUMENT_ID" \ -H "Authorization: Bearer $TOKEN"
{- "document": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "table",
- "title": "string",
- "revisionId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "content": {
- "contentUrl": "string",
- "stylesUrl": "string"
}
}
}Читает значения из одного диапазона в A1-нотации. Требуется право sheets.read.
Сегмент пути {range} может содержать имя листа и разделитель диапазона :, поэтому его нужно URL-кодировать (например Sheet1!A1:C10 превращается в Sheet1%21A1%3AC10). Поддерживаются открытые диапазоны: A:A (весь столбец), 1:1 (вся строка), A1:A (открытый снизу). Результат разбивается на страницы и ограничен серверным лимитом строк.
| document required | string <uuid> Идентификатор документа (UUID). |
| range required | string Диапазон в A1-нотации, URL-кодированный. Примеры: |
| offset | integer >= 0 Default: 0 Смещение по строкам внутри разрешённого диапазона (от 0). |
| limit | integer >= 1 Максимальное число строк в ответе. Ограничивается серверным максимумом (1000). Если не указан, сервер возвращает до максимума и выставляет |
curl "https://app.coverse.team/v1/documents/$DOCUMENT_ID/values/A1:B10" \ -H "Authorization: Bearer $TOKEN"
{- "values": {
- "sheet": "Лист 1",
- "range": "A1:B2",
- "majorDimension": "ROWS",
- "cells": [
- [
- {
- "v": "Имя",
- "m": "Имя"
}, - {
- "v": "Сумма",
- "m": "Сумма"
}
], - [
- {
- "v": "Заявка №1",
- "m": "Заявка №1"
}, - {
- "v": 3456,
- "m": "3 456"
}
]
], - "pagination": {
- "offset": 0,
- "limit": 1000,
- "total": 2,
- "returned": 2,
- "hasMore": false,
- "nextOffset": null
}
}
}Записывает блок значений, где верхняя-левая ячейка диапазона — точка привязки. Требуется право sheets.write и доступ на редактирование. При USER_ENTERED (по умолчанию) ведущий = считается формулой и движок пересчитывает; при RAW всё записывается как есть.
| document required | string <uuid> Идентификатор документа (UUID). |
| range required | string Диапазон в A1-нотации, URL-кодированный. Примеры: |
| Idempotency-Key | string Необязательный уникальный ключ, чтобы запись можно было безопасно повторить. Повторный запрос с тем же ключом вернёт исходный результат, а не запишет дважды. |
| values required | Array of strings or numbers or booleans or null (ValueMatrix) non-empty [ items ] Матрица значений для записи, по строкам. Каждый вложенный массив — строка. При |
| valueInputOption | string (ValueInputOption) Enum: "RAW" "USER_ENTERED"
|
{- "values": [
- [
- "Заявка №2",
- "=B2+100"
]
], - "valueInputOption": "USER_ENTERED"
}{- "updated": {
- "sheet": "Лист 1",
- "cells": 2
}
}Читает несколько диапазонов A1 за один запрос. Требуется право sheets.read. Некорректный диапазон или отсутствующий лист даёт запись с полем error, а не роняет весь запрос. Не более 20 диапазонов.
| document required | string <uuid> Идентификатор документа (UUID). |
| ranges required | Array of strings [ 1 .. 20 ] items По одной записи на диапазон, например |
curl "https://app.coverse.team/v1/documents/$DOCUMENT_ID/values/batchGet?ranges[]=A1:B2&ranges[]=D1:D5" \ -H "Authorization: Bearer $TOKEN"
{- "valueRanges": [
- {
- "sheet": "Лист 1",
- "range": "A1:A2",
- "majorDimension": "ROWS",
- "cells": [
- [
- {
- "v": "Имя",
- "m": "Имя"
}
], - [
- {
- "v": "Заявка №1",
- "m": "Заявка №1"
}
]
], - "pagination": {
- "offset": 0,
- "limit": 1000,
- "total": 2,
- "returned": 2,
- "hasMore": false,
- "nextOffset": null
}
}, - {
- "range": "Лист 5!A1",
- "error": "Sheet not found"
}
]
}Записывает несколько диапазонов одной атомарной операцией. Требуется право sheets.write. Все диапазоны применяются за один прогон движка и одну транзакцию; если хотя бы один диапазон некорректен — весь запрос отклоняется и ничего не записывается.
| document required | string <uuid> Идентификатор документа (UUID). |
| Idempotency-Key | string Необязательный уникальный ключ, чтобы запись можно было безопасно повторить. Повторный запрос с тем же ключом вернёт исходный результат, а не запишет дважды. |
required | Array of objects non-empty |
| valueInputOption | string (ValueInputOption) Enum: "RAW" "USER_ENTERED"
|
{- "data": [
- {
- "range": "Лист 1!A2",
- "values": [
- [
- "Заявка №1",
- 3456
]
]
}, - {
- "range": "Лист 1!D1",
- "values": [
- [
- "Статус"
]
]
}
], - "valueInputOption": "USER_ENTERED"
}{- "updated": {
- "ranges": [
- "Лист 1!A2:B2",
- "Лист 1!D1"
], - "cells": 3
}
}Добавляет строки после последней заполненной строки листа. Требуется право sheets.write. Начальный столбец берётся из range; начальная строка — последняя заполненная плюс один.
| document required | string <uuid> Идентификатор документа (UUID). |
| Idempotency-Key | string Необязательный уникальный ключ, чтобы запись можно было безопасно повторить. Повторный запрос с тем же ключом вернёт исходный результат, а не запишет дважды. |
| range required | string |
| values required | Array of strings or numbers or booleans or null (ValueMatrix) non-empty [ items ] Матрица значений для записи, по строкам. Каждый вложенный массив — строка. При |
| valueInputOption | string (ValueInputOption) Enum: "RAW" "USER_ENTERED"
|
{- "range": "Лист 1!A1",
- "values": [
- [
- "Заявка №3",
- 780
], - [
- "Заявка №4",
- 1290
]
]
}{- "updated": {
- "sheet": "Лист 1",
- "startRow": 6,
- "cells": 4
}
}Очищает заполненные ячейки в диапазоне. Требуется право sheets.write. Удаляются только заполненные ячейки; открытые диапазоны разрешаются по размеру листа.
| document required | string <uuid> Идентификатор документа (UUID). |
| Idempotency-Key | string Необязательный уникальный ключ, чтобы запись можно было безопасно повторить. Повторный запрос с тем же ключом вернёт исходный результат, а не запишет дважды. |
| range required | string |
{- "range": "Лист 1!A2:B100"
}{- "updated": {
- "sheet": "Лист 1",
- "cells": 8
}
}Возвращает листы (вкладки) таблицы. Требуется право sheets.read.
| document required | string <uuid> Идентификатор документа (UUID). |
curl "https://app.coverse.team/v1/documents/$DOCUMENT_ID/sheets" \ -H "Authorization: Bearer $TOKEN"
{- "sheets": [
- {
- "sheetId": "0",
- "uid": "8a4e4f21-9b7d-2c5e-6a1f-0d343f2b9c10",
- "name": "Лист 1",
- "hidden": false,
- "order": 0,
- "color": null
}
]
}Создаёт новый лист. Требуется право sheets.write. Имя необязательно; если не указано — назначается имя по умолчанию.
| document required | string <uuid> Идентификатор документа (UUID). |
| Idempotency-Key | string Необязательный уникальный ключ, чтобы запись можно было безопасно повторить. Повторный запрос с тем же ключом вернёт исходный результат, а не запишет дважды. |
| name | string <= 255 characters |
{- "name": "string"
}{- "sheet": {
- "sheetId": "string",
- "uid": "string",
- "name": "string",
- "hidden": true,
- "order": 0,
- "color": "string"
}
}Переименовывает лист. Требуется право sheets.write.
| document required | string <uuid> Идентификатор документа (UUID). |
| sheet required | string Идентификатор листа, как его возвращают эндпоинты листов ( |
| name required | string <= 255 characters |
{- "name": "string"
}{- "sheet": {
- "sheetId": "string",
- "uid": "string",
- "name": "string",
- "hidden": true,
- "order": 0,
- "color": "string"
}
}Удаляет лист. Требуется право sheets.write.
| document required | string <uuid> Идентификатор документа (UUID). |
| sheet required | string Идентификатор листа, как его возвращают эндпоинты листов ( |
curl -X DELETE "https://app.coverse.team/v1/documents/$DOCUMENT_ID/sheets/$SHEET_ID" \ -H "Authorization: Bearer $TOKEN"
{- "deleted": {
- "sheetId": "string",
- "uid": "string",
- "name": "string",
- "hidden": true,
- "order": 0,
- "color": "string"
}
}Это исходящий запрос, который Coverse отправляет на url вашей http-подписки при изменении документа. Настраивается через POST /documents/{document}/webhooks.
Доставка сгруппирована (дебаунс): близкие по времени правки объединяются в одно уведомление на документ. Тело содержит изменённые ячейки на момент доставки. Ваш обработчик должен ответить кодом 2xx, иначе доставка считается неуспешной и повторяется с задержкой.
Проверка подписи (обязательно для безопасности). В заголовке X-Coverse-Signature приходит sha256=<hex>, где <hex> — это HMAC-SHA256 от сырого тела запроса с ключом, равным секрету подписи (secret, выданному один раз при создании подписки). Сравнивайте подпись по сырым байтам тела, до любого разбора JSON. Пример на PHP: hash_hmac('sha256', $rawBody, $secret).
| X-Coverse-Event | string Имя события, например |
| X-Coverse-Signature | string Подпись тела: |
| X-Coverse-Timestamp | string <date-time> Момент доставки в формате ISO 8601 (защита от повторной отправки). |
Тело уведомления.
| schemaVersion | string Версия схемы payload. |
| event | string |
| source | string Enum: "api" "browser" Откуда пришло изменение — через API или из браузера. |
| sourceToken | string or null Имя токена-интеграции для изменений через API; для браузера — null. |
| documentId | string or null <uuid> |
| documentTitle | string or null |
| documentUrl | string or null Прямая ссылка на документ. |
object or null | |
object Диапазон ревизий, охваченных этим уведомлением. | |
| changedAt | string or null <date-time> |
Array of objects | |
| cellCount | integer Общее число изменённых ячеек (даже если часть не вошла в |
| changes | string Готовая строка-сводка всех включённых ячеек, например |
| ranges | Array of strings Изменённые ячейки, схлопнутые в горизонтальные диапазоны A1. |
Array of objects | |
| truncated | boolean
|
| deliveryId | string <uuid> Идентификатор доставки, стабилен при повторах. |
| attempt | integer Номер попытки доставки (растёт при повторах). |
| deliveredAt | string or null <date-time> |
{- "schemaVersion": "1.0",
- "event": "document.updated",
- "source": "api",
- "sourceToken": "Интеграция с CRM",
- "documentId": "3f2b9c10-8a4e-4f21-9b7d-2c5e6a1f0d34",
- "documentTitle": "Заявки",
- "workspace": {
- "id": 42,
- "name": "Отдел продаж"
}, - "revision": {
- "from": 118,
- "to": 121
}, - "changedAt": "2026-07-09T09:15:04+00:00",
- "authors": [
- {
- "id": 7,
- "name": "Павел Власов"
}
], - "cellCount": 2,
- "changes": "Лист 1!E21 = 3456; Лист 1!F21 = Новый",
- "ranges": [
- "Лист 1!E21:F21"
], - "cells": [
- {
- "sheet": "0",
- "sheetName": "Лист 1",
- "ref": "E21",
- "row": 20,
- "col": 4,
- "v": 3456,
- "m": "3456",
- "f": null,
- "t": "number"
}, - {
- "sheet": "0",
- "sheetName": "Лист 1",
- "ref": "F21",
- "row": 20,
- "col": 5,
- "v": "Новый",
- "m": "Новый",
- "f": null,
- "t": "string"
}
], - "truncated": false,
- "deliveryId": "9a1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e",
- "attempt": 1,
- "deliveredAt": "2026-07-09T09:15:14+00:00"
}Возвращает подписки-вебхуки документа. Требуется право sheets.webhooks.
| document required | string <uuid> Идентификатор документа (UUID). |
curl "https://app.coverse.team/v1/documents/$DOCUMENT_ID/webhooks" \ -H "Authorization: Bearer $TOKEN"
{- "webhooks": [
- {
- "id": 0,
- "channel": "http",
- "events": [
- "string"
], - "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "url": "string",
- "token": "string",
- "chatId": "string"
}
]
}Создаёт подписку-вебхук. Требуется право sheets.webhooks. Для канала http в ответе один раз возвращается секрет подписи — больше он не показывается. Для канала telegram вместо url укажите botToken и chatId.
| document required | string <uuid> Идентификатор документа (UUID). |
| channel | string Default: "http" Enum: "http" "telegram" |
| url | string <uri> <= 2048 characters Обязателен для канала |
| botToken | string <= 255 characters Обязателен для канала |
| chatId | string <= 64 characters Обязателен для канала |
| events | Array of strings non-empty Items Value: "document.updated" |
{- "channel": "http",
}{- "webhook": {
- "id": 15,
- "channel": "http",
- "events": [
- "document.updated"
], - "active": true,
- "createdAt": "2026-07-09T09:20:00+00:00",
- "token": "Интеграция с CRM"
}, - "secret": "whsec_8f3a9b2c1d4e5f6a7b8c9d0e1f2a3b4c"
}Удаляет подписку-вебхук. Требуется право sheets.webhooks.
| document required | string <uuid> Идентификатор документа (UUID). |
| webhook required | integer Числовой идентификатор подписки-вебхука. |
curl -X DELETE "https://app.coverse.team/v1/documents/$DOCUMENT_ID/webhooks/$WEBHOOK_ID" \ -H "Authorization: Bearer $TOKEN"
{- "success": true
}Возвращает журнал изменений документа, сделанных через API и интеграции. Требуется право sheets.read и тариф с аудитом (Профессиональный и выше); иначе возвращается 403.
| document required | string <uuid> Идентификатор документа (UUID). |
| offset | integer >= 0 Default: 0 |
| limit | integer >= 1 Default: 50 Ограничивается значением 200. |
curl "https://app.coverse.team/v1/documents/$DOCUMENT_ID/audit?limit=50" \ -H "Authorization: Bearer $TOKEN"
{- "audit": {
- "entries": [
- {
- "id": 204,
- "action": "update",
- "origin": "api",
- "userId": 7,
- "userName": "Павел Власов",
- "token": "Интеграция с CRM",
- "properties": {
- "range": "Лист 1!A2:B2",
- "cells": 2
}, - "createdAt": "2026-07-09T09:15:14+00:00"
}
], - "total": 1,
- "offset": 0,
- "limit": 50,
- "tokens": [
- "Интеграция с CRM"
]
}
}При ошибке возвращается соответствующий HTTP-код и тело вида { "message": "..." } с пояснением.
| Код | Когда возникает |
|---|---|
401 |
Токен доступа отсутствует или недействителен. |
403 |
У токена нет нужного права (scope), либо действие не разрешено тарифом (например, аудит — только на тарифе Профессиональный и выше). |
404 |
Документ или лист не существует или недоступен вашему токену. |
422 |
Некорректный запрос: неверный диапазон A1, документ не является таблицей, неправильное тело запроса; либо достигнут лимит вебхуков тарифа. |
429 |
Превышен лимит запросов. Базовый лимит — 60 запросов в минуту на токен; тарифы могут его повышать. |
При batchGet некорректный диапазон или отсутствующий лист не роняет весь запрос — в ответе для такого диапазона приходит поле error, а остальные диапазоны отдаются нормально.