---
title: "Trigger a build"
method: POST
path: "/build-sources/{buildSourceId}/builds"
tags: ["Build Sources"]
---

# Trigger a build

`POST /build-sources/{buildSourceId}/builds`

## Request

- Base URL: `https://api.render.com/v1`
- URL: `https://api.render.com/v1/build-sources/{buildSourceId}/builds`
- Auth: HTTP bearer

Start a new build of the build source at the current HEAD of its
branch, even if an up-to-date build already exists. Services linked to
the build source with autodeploy enabled are deployed with the result.

Updating a build source or its build-time environment (env vars,
secret files, env groups) with the REST API does not build it. Call
this endpoint after those changes to build them.

Only `git` build sources can be built.

## Response `201`

Build started

- object
  - `id` Schema, required (unresolved $ref)
  - `buildSourceId` Schema, required (unresolved $ref)
  - `buildRun` object: The Render build run that produced this build. Present when the build source is currently build-based. Mutually exclusive with `image`.
    - `id` string, required
    - `status` 'created' | 'inProgress' | 'succeeded' | 'failed' | 'canceled' | 'unknown'
    - `buildStartedAt` string, date-time
    - `buildFinishedAt` string, date-time
    - `runtime` 'docker' | 'elixir' | 'go' | 'node' | 'python' | 'ruby' | 'rust'
    - `commitId` string
    - `commitUrl` string
  - `image` object: Present when the build source is currently image-based. Mutually exclusive with `buildRun`.
    - `imageVersionId` string
    - `SHA` string
    - `ref` string
    - `imageUrl` string
    - `registryCredentialId` string
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `assetsDeletedAt` string, date-time

## Other responses

- `400`: The request could not be understood by the server.
- `401`: Authorization information is missing or invalid.
- `403`: You do not have permissions for the requested resource. If a scoped API token does not satisfy the endpoint's minimum scope requirements, the response has code insufficient_token_scope and its message lists all minimum required scopes. Broader scopes that include their permissions also satisfy the requirements. Passing this check does not guarantee access to the requested resource or to conditional operations.
- `404`: Unable to find the requested resource.
- `429`: Rate limit has been surpassed. Rate-limited endpoints also return `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` on successful responses so clients can track their remaining quota.
- `500`: An unexpected server error has occurred.
- `503`: Server currently unavailable.

## Changes

- **2026-11-03** `6ac5d3d47362`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/render/apis/render-public-api/changes/build-sources/:buildSourceId/builds/post.md)

---

[API](https://skmtc.dev/render/apis/render-public-api.md) - [All operations](https://skmtc.dev/render/apis/render-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/render/apis/render-public-api/revisions/6ac5d3d47362?raw)
