---
title: "Read uncommitted changes"
method: GET
path: "/api/v2/projects/{projectId}/branches/{branch}/changes"
tags: ["Branches"]
---

# Read uncommitted changes

`GET /api/v2/projects/{projectId}/branches/{branch}/changes`

## Request

- Base URL: `https://davinci-app.com`
- URL: `https://davinci-app.com/api/v2/projects/{projectId}/branches/{branch}/changes`
- Auth: HTTP bearer

Returns which objects on the branch differ from its last commit, as three
lists of ids plus enough metadata to name the deleted ones.

Deleted objects come with their name and type because they can no longer be
read from the project.

## Response `200`

Uncommitted changes.

- ChangesResponse: Uncommitted changes on a branch, as object ids. One shape regardless of whether the branch is loaded — the answer comes from memory when it is and from a git diff when it is not, and the difference is not published.
  - `hasChanges` boolean, required
  - `committedHash` string, nullable: Commit the changes are measured against.
  - `totalObjectChanges` integer, required
  - `added` string[], required
  - `modified` string[], required
  - `deleted` string[], required
  - `deletedObjects` object[], required: Enough of each deleted object to name it, since it can no longer be read from the project.
    - `objectId` string, required
    - `name` string, nullable
    - `type` string, nullable
    - `parentId` string, nullable

## Other responses

- `401`: No credential was supplied, or the supplied credential is malformed, expired, or revoked. A credential that is present but unusable is never downgraded to an anonymous request.
- `403`: Authenticated but not authorized. Either the acting user lacks the required resource permission, the key's scope ceiling excludes it, or the endpoint rejects this credential type (`CREDENTIAL_NOT_PERMITTED`).
- `404`: The resource does not exist in the parent named by the path, or is hidden from the caller. Absence and privacy denial are deliberately indistinguishable so project, organization, and private-team existence cannot be probed.
- `409`: The project stopped running between being opened for this request and the request reaching it. Error code is `PROJECT_NOT_RUNNING`. Retry: the next call opens it again.
- `429`: Request rate exceeded, either globally or for this key.
- `500`: Unexpected server error.
- `502`: The git operation failed inside the engine rather than being refused. Error code is `GIT_OPERATION_FAILED`, or `CHANGES_UNAVAILABLE` and `COMMIT_NOT_RECORDED` for the two cases where a specific step is known to have produced nothing.
- `503`: The project could not be opened in time, or no machine is currently available to run it. Error codes are `PROJECT_NOT_READY`, `SERVER_NOT_AVAILABLE`, and `SERVICE_UNAVAILABLE`. Retry after the interval in `Retry-After`.

## Changes

- **2026-09-15** (v2) `67c8b8616dbb`: 8 info
  - the `success` response property const value `false` was added for the status `401`
  - the `success` response property const value `false` was added for the status `403`
  - the `success` response property const value `false` was added for the status `404`
  - the `success` response property const value `false` was added for the status `409`
  - …4 more
- **2026-09-15** (v2) `48948af37797`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/changes/api/v2/projects/:projectId/branches/:branch/changes/get.md)

---

[API](https://skmtc.dev/celedon-solutions/apis/davinci-public-api.md) - [All operations](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/revisions/279218ca2e8d?raw)
