---
title: "Get latest sync status"
method: GET
path: "/api/v2/projects/{slug}/sync/"
tags: ["Sync"]
---

# Get latest sync status

`GET /api/v2/projects/{slug}/sync/`

## Request

- Base URL: `https://app.biel.ai`
- URL: `https://app.biel.ai/api/v2/projects/{slug}/sync/`
- Auth: API key in header `Authorization`

Inspect the most recent sync run for the project, including overall status, the URLs that were processed, and the event log for the run.

Use this to:
- Detect when an automated [`POST /api/v2/projects/{slug}/sources/`](/api/add-source) followed by [`POST /api/v2/projects/{slug}/sync/`](/api/sync-project) flow has finished (`status` transitions from `running` to `success`/`error`/`warning`).
- Surface failures with actionable context. `events` includes per-URL warnings and errors.

For lightweight polling, prefer [`GET /api/v2/projects/{slug}/`](/api/get-project) and read its `last_sync` summary instead. It returns the same `status` and timestamps without the full event log.

Returns 404 when the project has never been synced.

**Required permission:** `sync_read`

## Path parameters

- `slug` string, required

## Response `200`

Sync status retrieved successfully

- SyncStatus: Compact summary of a sync run, embedded in the project's `last_sync` field for lightweight polling.
  - `uuid` string, uuid, required: UUID of the sync run.
  - `status` 'running' | 'success' | 'error' | 'warning' | 'canceled', required: - `running`: crawl is in progress. - `success`: crawl finished without errors. - `warning`: crawl finished with non-fatal warnings (some URLs may have failed). - `error`: crawl failed. - `canceled`: a newer [`POST /api/v2/projects/{slug}/sync/`](/api/sync-project) call superseded this run.
  - `started_at` string, date-time, required: ISO-8601 timestamp of when the run started.
  - `finished_at` string, date-time, nullable: ISO-8601 timestamp of when the run finished, or `null` while `status` is `running`.
  - `total_sources` integer, required: Total number of sources processed in this run, including expanded entries (for example, individual files of a repository).
  - `urls` string[], required: URLs processed in this run.
  - `events` SyncEvent[], required: Structured events emitted during the run, in chronological order.
    - `level` 'info' | 'warning' | 'error', required: Severity of the event.
    - `message` string, required: Human-readable event message. Typically references a URL or source name.
    - `created_at` string, date-time, required: ISO-8601 timestamp of when the event was emitted.

## Other responses

- `403`: Forbidden. Missing permissions.
- `404`: Resource not found.

---

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