Skip to content

Pull requests

Turn on auto-merge for a pull request: it merges on its own, as you, once its required checks, reviews and rules allow, with merge_method (the repository's default when left out) and, for merge and squash, commit_title and commit_message.

PUT/repos/{owner}/{name}/pulls/{number}/auto-merge

Needs the Write role, since it merges as you, and a repository that allows auto-merge (allow_auto_merge). A method the repository or a rule for its base does not allow is refused. A pull request that may merge already merges at once instead. Auto-merge is turned off when it merges or closes, when someone turns it off, and when someone other than whoever turned it on pushes to it. Publishes pull.auto_merge_enabled. Returns the pull request, with auto_merge saying how and who asked.

A repository with allow_auto_merge off answers 422, as does a method it or a rule for the base does not allow. A pull request that may already merge merges at once: check status. auto_merge is cleared when it merges or closes, when it is turned off, and when someone other than enabled_by pushes to it. See Auto-merge.

Name Type Required Description
owner string Yes The workspace that owns the repository.
name string Yes The repository’s name.
number integer Yes The number shown after the #. Issues and pull requests share one sequence.

Send a JSON object. Names are snake_case, as in responses; the camelCase spelling is accepted too.

Name Type Required Description
merge_method string No How it will merge: merge, squash, rebase or fast_forward. The repository’s default_merge_method when left out. One of merge, squash, rebase, fast_forward.
commit_title string No For merge and squash: the commit message’s first line. The repository’s default when left out.
commit_message string No For merge and squash: the rest of the commit message. The repository’s default when left out.
curl -X PUT https://api.g1t.sh/repos/flagon-io/hello/pulls/14/auto-merge \
-H "Authorization: Bearer $G1T_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"merge_method": "squash",
"commit_title": "Greeting names the caller (#14)"
}'

A successful request answers 200 with:

{
"id": "pr_01m43smh3vexsr5pmp60qwv0vs",
"repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
"number": 14,
"issue": 12,
"title": "Greeting should name the caller",
"body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
"agent": "claude-code",
"runtime": "external",
"status": "open",
"fork": {
"namespace": "pulls",
"name": "pr_01m43smh3vexsr5pmp60qwv0vs"
},
"fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
"branch": null,
"head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
"merge_base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
"merged_by": null,
"merged_at": null,
"superseded_by": null,
"check_status": "running",
"files": [
{
"path": "src/main.rs",
"additions": 6,
"deletions": 2
}
],
"assignees": [],
"reviewers": [
"ana"
],
"labels": [],
"milestone": null,
"base": "main",
"author": {
"id": "usr_01kkntcg1eeb98j62xjm7eh09p",
"username": "syntaqx",
"display_username": "syntaqx",
"kind": "user",
"verified": false,
"workspaces": []
},
"requested_by": null,
"created_at": "2026-10-01T18:20:02.117Z",
"updated_at": "2026-10-01T18:44:09.310Z",
"auto_merge": {
"method": "squash",
"commit_title": "Greeting names the caller (#14)",
"commit_message": null,
"enabled_by": "syntaqx",
"enabled_at": "2026-10-01T18:44:09.310Z"
},
"closes": [
12
]
}

A failed request answers with one of these statuses and a body like {"error": {"code": "not_found", "message": "Repository not found."}}. See errors.

Status Code When
401 unauthenticated A token is required, or the one sent is not valid.
403 forbidden The token is valid but not allowed to do this, such as a member-only change, or a token without the scope it needs.
404 not_found It does not exist, or you cannot see it.
409 conflict The request conflicts with the current state.
422 invalid The input is not valid. message says which field and why.