---
title: "Sync an app's declared sources"
method: POST
path: "/api/apps/{id}/sync"
tags: ["Apps"]
---

# Sync an app's declared sources

`POST /api/apps/{id}/sync`

Runs every (model x source) pair the body selects. Each pass pulls outside the row mutation lock and reconciles inside it.

## Path parameters

- `id` string, required

## Request body

- object
  - `model` string
  - `source` string

## Response `200`

Sync passes

- object
  - `ok` boolean, required
  - `passes` object[], required
    - `model` string, required
    - `source` string, required
    - `connector` 'script' | 'swarm-tasks', required
    - `pulled` number, required
    - `created` number, required
    - `updated` number, required
    - `refreshed` number, required
    - `unchanged` number, required
    - `markedStale` number, required
    - `staleSweepSkipped` boolean
    - `warnings` string[], required
    - `durationMs` number, required
    - `invokedBy` string
    - `error` string
    - `skipped` true
    - `alreadyRunning` true

## Other responses

- `400` — Unknown model or source, or no model declares a source
- `403` — Permission denied
- `404` — App not found
- `409` — App definition needs repair

---

[API](https://skmtc.net/desplega-ai/apis/agent-swarm-api.md) · [All operations](https://skmtc.net/desplega-ai/apis/agent-swarm-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/desplega-ai/agent-swarm-api/versions/db1079e034dc/schema)
