---
title: "Monitor or Stop Monitoring Git Repositories"
method: PATCH
path: "/api/v1/git/repositories"
tags: ["Git Repositories"]
---

# Monitor or Stop Monitoring Git Repositories

`PATCH /api/v1/git/repositories`

## Request

- Base URL: `https://public-api.linearb.io`
- URL: `https://public-api.linearb.io/api/v1/git/repositories`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/linearb/apis/linearb-api/docs/api/v1/git/repositories/patch.ts> (a function with typed inputs; its response is checked against the schema)

Sets repositories to `monitored` or `not_monitored`, up to 100 per call, exactly as Settings > Git > Repositories does. Monitoring starts collecting the repository and loads its history; it counts against the repository quota. Stopping monitoring stops collecting new data; data already collected is kept. Each repository is applied or rejected on its own: a repository already in the requested state is applied, and a rejected one carries a code and a message.

## Request body

- GitRepositoriesStateRequestModel: Body of PATCH /api/v1/git/repositories.
  - `repositories` GitRepositoryStateModel[], required: The monitoring changes to apply
    - `id` integer, required: LinearB repository id, as listed by GET /api/v1/git/repositories
    - `state` 'monitored' | 'not_monitored', required: The monitoring states a caller may set; `failing` and `discovered` are assigned by LinearB.

## Response `200`

Successful Response

- GitRepositoriesStateResponseModel
  - `applied` GitRepositoryStateModel[], required
    - `id` integer, required: LinearB repository id, as listed by GET /api/v1/git/repositories
    - `state` 'monitored' | 'not_monitored', required: The monitoring states a caller may set; `failing` and `discovered` are assigned by LinearB.
  - `rejected` GitRepositoryRejectedModel[], required
    - `id` integer, required
    - `state` 'monitored' | 'not_monitored', required: The monitoring states a caller may set; `failing` and `discovered` are assigned by LinearB.
    - `code` 'duplicate_repository' | 'repository_not_found' | 'integration_not_available' | 'backfill_in_progress' | 'never_monitored' | 'state_changed' | 'write_failed', required: Why one entry of a monitoring call was not applied.
    - `message` string, required

## Other responses

- `400`: Every repository was rejected; an invalid body is also a 400
- `401`: Unauthorized
- `403`: The caller may not change repositories, or the repository quota
- `404`: Not Found
- `405`: Method Not Allowed
- `409`: Conflict
- `422`: Validation Error
- `500`: Internal Server Error
- `504`: Gateway Timeout

---

[API](https://skmtc.dev/linearb/apis/linearb-api.md) - [All operations](https://skmtc.dev/linearb/apis/linearb-api/llms.txt) - [OpenAPI document](https://skmtc.dev/linearb/apis/linearb-api/revisions/3aea06710db6?raw)
