# Create merge

URL: https://docs.hanzo.ai/docs/openapi/git/post-git-repos-by-name-pulls-by-number-merge

> Merges an open pull request by FAST-FORWARDING base to head, and answers the proposal in its merged state with the revision base now points at.

`POST /v1/git/repos/{name}/pulls/{number}/merge`

> [Git →](https://docs.hanzo.ai/docs/openapi/git) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                                                 |
| ------------- | --------------------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/git/repos/{name}/pulls/{number}/merge` |
| **Method**    | `POST`                                                          |
| **Operation** | `post_git_repos_by_name_pulls_by_number_merge`                  |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                          |

Merges an open pull request by FAST-FORWARDING base to head, and
answers the proposal in its merged state with the revision base now points at.

It merges only when base is already an ancestor of head — the case where head
contains every commit base has, so moving the branch loses nothing and invents
nothing. When base has moved on independently, this REFUSES with 409 and says
so: a real three-way merge is not implemented here, and reporting one would
claim a result these bytes do not produce. Rebase head onto base and merge
again.

The move is judged by the same ref policy a `git push` of it would face, and
fires the same build and notify reactions, so merging is not a way around
either. Merging an already-merged proposal is a 409.

## Request

2 fields.

| Field    | In   | Type    | Required | Description                                                              |
| -------- | ---- | ------- | -------- | ------------------------------------------------------------------------ |
| `name`   | path | string  | yes      | Name is the repo, from the :name path segment.                           |
| `number` | path | integer | yes      | Number is the proposal's per-repo number, from the :number path segment. |

## Response

| Status    | Body            | Meaning |
| --------- | --------------- | ------- |
| `200`     | git.pullView    | ok      |
| `default` | problem-details | refused |

`200` body — 11 fields.

| Field       | In   | Type            | Always | Description                                                        |
| ----------- | ---- | --------------- | ------ | ------------------------------------------------------------------ |
| `author`    | body | string          | —      | Author is the user who opened it; empty for a caller with no user. |
| `base`      | body | string          | —      | Base is the branch the work is proposed into.                      |
| `body`      | body | string          | —      | Body is the longer description; empty when none was given.         |
| `createdAt` | body | string          | —      | CreatedAt is RFC 3339 UTC.                                         |
| `head`      | body | string          | —      | Head is the branch holding the work.                               |
| `mergedRev` | body | string          | —      | MergedRev is what base points at now that the merge landed.        |
| `number`    | body | integer (int64) | —      | Number is the proposal's per-repo handle, dense from 1.            |
| `repo`      | body | string          | —      | Repo is the repository the proposal belongs to.                    |
| `state`     | body | string          | —      | State is "open" or "merged".                                       |
| `title`     | body | string          | —      | Title is the one-line summary.                                     |
| `updatedAt` | body | string          | —      | UpdatedAt is RFC 3339 UTC.                                         |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo git repos pulls merge <name> 1
```

**SDK**

**.ts**

```ts
import { Configuration, GitApi } from 'hanzoai';

const api = new GitApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postGitReposByNamePullsByNumberMerge({ name: 'name', number: 'number' });
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import GitApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = GitApi(client).post_git_repos_by_name_pulls_by_number_merge(name='name', number='number')
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.GitAPI.PostGitReposByNamePullsByNumberMerge(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, git_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = git_api::post_git_repos_by_name_pulls_by_number_merge(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.GitApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new GitApi(client).postGitReposByNamePullsByNumberMerge();
```

**HTTP**

```bash
curl -X POST https://api.hanzo.ai/v1/git/repos/<name>/pulls/1/merge \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **git** through the `git` tool, which names its 38 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_git_keys"
         }
       }
     }'
```

---

[Git API](https://docs.hanzo.ai/docs/openapi/git) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
