---
title: "Record what Azure DevOps holds for a batch of the integration's issues"
method: POST
path: "/integrations/{integration_id}/azureBoards/sync/observations"
tags: ["AzureBoardsSync"]
---

# Record what Azure DevOps holds for a batch of the integration's issues

`POST /integrations/{integration_id}/azureBoards/sync/observations`

Records each observation on mabl's copy of the issue only, ignoring one older than the revision already stored. An issue may appear once per batch. An existence_changed outcome means the issue flipped between present and deleted, which revisions cannot order, so the caller should read that work item again and send a fresh observation. Never retry a request automatically: a lost response is settled by the next read. After a call that timed out, do not release the lock; let it lapse, so no other holder writes while the request may still be running. Requires the integration's sync lock. Restricted to API keys with global write permission on integrations.

## Path parameters

- `integration_id` string, required

## Request body

- AzureBoardsSyncObservationBatch
  - `project_id` string, required — The project id the observations were read from; 409 when the integration now points elsewhere
  - `lock_key` string, required — Key that holds the integration's azure-boards-sync job lock
  - `observations` AzureBoardsSyncObservation[], required
    - `issue_id` string, required
    - `present` boolean, required — False only once the recycle bin confirmed the work item was deleted
    - `open` boolean — Required when present; whether the work item's state is not in a Completed or Removed category
    - `revision` integer — Required when present; the work item revision the state was read at

## Response `200`

One result per observation, in request order

- AzureBoardsSyncObservationResults
  - `results` AzureBoardsSyncObservationResult[], required
    - `issue_id` string, required
    - `outcome` 'unchanged' | 'written' | 'existence_changed' | 'not_found', required — unchanged, written, existence_changed (written, and it flipped deletion, so read the work item again), or not_found (no issue of this integration has this id; nothing written)

## Other responses

- `400` — Invalid or missing parameter
- `401` — User not authenticated
- `403` — User not authorized
- `404` — Entity not found
- `409` — Conflicts with the current state of the resource
- `default` — Unknown error

## Changes

- **2026-10-07** `488eade0b398` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/mabl/apis/mabl-api/changes/integrations/:integration_id/azureBoards/sync/observations/post.md)

---

[API](https://skmtc.dev/mabl/apis/mabl-api.md) · [All operations](https://skmtc.dev/mabl/apis/mabl-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mabl/apis/mabl-api/revisions/488eade0b398?raw)
