---
title: "Commit a branch"
method: POST
path: "/api/v2/projects/{projectId}/branches/{branch}/commits"
tags: ["Branches"]
---

# Commit a branch

`POST /api/v2/projects/{projectId}/branches/{branch}/commits`

## Request

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

Commits everything uncommitted on the branch. There is nothing to stage — the
working state is the live project, not a checkout, so a commit is all of it or
nothing.

Committing requires the branch to be loaded, which this does on the caller's
behalf. A commit of an untouched branch still produces a revision.

## Request body

- CommitRequest
  - `message` string, required
  - `author` object: Defaults to the acting user.
    - `name` string, required
    - `email` string

## Response `201`

Commit created.

- CommitResponse
  - `commit` object, required
    - `hash` string, required
    - `message` string
    - `author` string, nullable
    - `timestamp` string, date-time, nullable
    - `branch` string
    - `stats` object, nullable
      - `additions` integer
      - `modifications` integer
      - `deletions` integer

## Other responses

- `400`: Malformed request parameters or body. Agile requests may return `INVALID_PAGINATION` or `INVALID_IDEMPOTENCY_KEY`.
- `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`: 9 info
  - the `success` response property const value `false` was added for the status `400`
  - 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`
  - …5 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/commits/post.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)
