Получить изменения, случившиеся после момента, названного курсором
Дельта-чтение: «что изменилось с момента X». Одна операция на все сущности — сущность называется параметром entity, а не отдельным адресом, поэтому интегратор учит одну форму и хранит один курсор.
Ответ несёт ИДЕНТИЧНОСТЬ изменения, а не объект: сущность, идентификатор, вид изменения и момент. Сам объект читатель забирает штатной операцией под своими правами — у ленты нет своего сериализатора, значит нет и второго места, где можно отдать поле, которого читателю видеть нельзя.
Первый вызов делается БЕЗ курсора и данных не отдаёт: он возвращает пустой список и позицию. Порядок такой — снять курсор, вычитать данные штатными операциями, продолжить с курсора; лента не является выгрузкой и строк, не менявшихся с момента заведения журнала, не содержит.
Гарантия — «НЕ МЕНЬШЕ одного раза». Один объект может приехать дважды: строка, изменённая повторно, приезжает с новым изменением, а курсор, предъявленный второй раз, отдаёт ту же страницу. Читатель обязан сводить по паре entity + id. «Ровно один раз» не обещано и обещано не будет.
has_more означает «в этом прогоне есть ещё», а не «в кабинете больше ничего не менялось»: ложь закрывает прогон, следующий запрос откроет новый и увидит случившееся после.
Курсор непрозрачен: его возвращают как есть, не разбирая и не собирая. Он привязан к кабинету и к набору сущностей; предъявленный в другом кабинете или с другим entity отклоняется. Курсор старше срока хранения журнала — 30 суток — отвечает 409 changes.cursor_expired: за ним стоят вычищенные строки, и молчание вместо отказа означало бы тихую потерю.
Request
- Base URL: https://erp.akeda.ru
- URL: https://erp.akeda.ru/api/v1/reference/changes
- Auth: one of:
- HTTP bearer
- API key in header X-Api-Key
- OAuth 2 (authorization code, authorization URL https://erp.akeda.ru/oauth2/authorize, token URL https://erp.akeda.ru/oauth2/token, scopes: akeda:delegate)
Query parameters
Сущности через запятую (core.contact,core.document). Без параметра берутся все, доступные предъявителю. Названная сущность без права — отказ 403, а не молчаливое сужение: молчание читается как «ничего не менялось».
Выбор влияет и на срок жизни курсора. Курсор, снятый БЕЗ параметра, означает «всё, что мне видно», и переживает появление новых сущностей — они просто начинают приезжать. Курсор, снятый с поимённым списком, связан этим списком: запрос с другим набором отвечает 400, потому что прошлого новых сущностей читатель не получил бы, а решил бы, что получил.
Курсор предыдущего ответа. Пусто — первый вызов, отдающий позицию без данных.
Потолок страницы. Строк, а не прогонов
Headers
Slug выбранного кабинета; кабинет не является юрлицом
Response
Страница изменений и курсор продолжения
Changes
No recorded changes to this operation across all 1 revision of this API.