Перейти к содержанию
Sursa для разработчиков

Идентификаторы объектов

У каждого объекта API есть id. Сохраняйте его в своей системе, если к объекту нужно будет вернуться: имена и заголовки могут меняться, идентификаторы — никогда.

ОбъектidПример
Карточка, папкаСтрока"3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60"
СобытиеСтрока с префиксом evt_"evt_0123456789abcdef0123456789abcdef"
ЗагрузкаСтрока с префиксом upl_"upl_8b0c…"
OAuth-приложениеСтрока с префиксом app_"app_5f1c…"
Коллекция, пользователь, группа, ключ API, вебхук, задание и большинство остальныхЦелое число3

Считайте идентификаторы непрозрачными. Не разбирайте их и не рассчитывайте на какой-либо формат, кроме типа: строковый идентификатор может быть любой строкой длиной до допустимой для его поля.

Новые виды объектов, на которые вы, скорее всего, будете ссылаться из своих систем, получают строковые идентификаторы с коротким префиксом, обозначающим вид, и 32 шестнадцатеричными символами после него.

Ссылки между объектами

Объекты ссылаются друг на друга по идентификатору в полях с именем <object>_id: collection_id, owner_id, folder_id. Чтобы получить связанный объект в том же ответе, используйте expand[].

Параметры пути, которые принимают идентификатор, называются так же: {card_id}, {webhook_id}, {upload_id}.

Коллекции по идентификатору

У коллекций есть и id, и уникальное имя name, например support. Пути, которые появились до того, как предпочтение отдали идентификаторам, принимают имя коллекции:

GET /v1/collections/support/stats

Те же пути принимают и идентификатор в записи id:<number>:

curl https://api.sursa.com/v1/collections/id:3/stats \
  -H "Authorization: Bearer $SURSA_API_KEY"

В новом коде предпочитайте форму id:: администратор может переименовать коллекцию, а её идентификатор не меняется. Сегмент из одних цифр, например /v1/collections/3, по-прежнему означает коллекцию с именем 3. Имя коллекции не может содержать :, поэтому две формы никогда не путаются.

В телах запросов и параметрах запроса collection_id стоит рядом с прежним collection (именем). Если передать оба, действует collection_id. collection_id, которого нет в организации или который ключу видеть нельзя, возвращает 404 с кодом collections.not_found.

curl -G https://api.sursa.com/v1/cards \
  -H "Authorization: Bearer $SURSA_API_KEY" \
  --data-urlencode "collection_id=3"

Свои идентификаторы

Карточка может хранить в external_id идентификатор записи в вашей системе, из которой она получена: до 512 символов, уникален среди карточек организации. Тогда хранить идентификатор карточки в Sursa вообще не нужно:

ОперацияЧто делает
PUT /v1/cards-by-external-id/{external_id}Создаёт карточку или заменяет её содержимое, если она уже есть.
GET /v1/cards-by-external-id/{external_id}Читает карточку.
GET /v1/cards?external_id=…Находит карточку в списке вместе с другими фильтрами.

Если external_id входит в путь, кодируйте его для URL: crm/A-1042 превращается в crm%2FA-1042.

У документов своего источника есть свой external_id в пределах их источника. Они не пересекаются: карточку своего источника меняют, повторно отправляя документ в её источник, а не через PUT /v1/cards-by-external-id/… — в этом случае он отвечает 409 с кодом cards.managed_by_source.