# Rename a repository

> Give a repository a new name in its workspace.

<div class="g1t-endpoint"><span class="g1t-method" data-method="post">POST</span><code>/repos/{owner}/{name}/rename</code></div>

Needs the Admin role. Everything stays with it: git data, issues, pull requests, workflow runs, deployments, secrets and webhooks. Its old address keeps working: web pages, git remotes and API calls redirect to the new one until a repository is made at the old address. The new name must be free in the workspace, including names held by recently deleted repositories.

The repository under its new name. Needs the Admin role (`403` otherwise). Refused with `409` when the workspace already has a repository of that name, a recently deleted one included, and with `422` when the name is not valid. The old address redirects. See [Rename a repository](/guides/managing-repositories/#rename-a-repository).

- **Authentication:** Required. Send an [access token](/reference/api/#authentication) as `Authorization: Bearer`.
- **MCP tool:** [`repository`](/reference/mcp/#repository) with `action` `rename`, and the same inputs
- **Scope:** An access token needs [`repo:admin`](/guides/authentication/#scopes).

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `owner` | string | Yes | The workspace that owns the repository. |
| `name` | string | Yes | The repository's name. |

## Body parameters

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

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | Yes | The new name: lowercase letters, digits, dots, hyphens and underscores, at most 100 characters, not starting with a dot or ending in .git. |

## Example request

```sh
curl -X POST https://api.g1t.sh/repos/flagon-io/hello/rename \
  -H "Authorization: Bearer $G1T_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "greeter"
  }'
```

## Example response

A successful request answers `200` with:

```json
{
  "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
  "namespace": "flagon-io",
  "name": "greeter",
  "description": "A tiny service that says hello.",
  "is_private": false,
  "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
  "default_branch": "main",
  "fork_of": null,
  "protected": true,
  "created_at": "2026-09-28T14:11:52.640Z",
  "topics": [
    "http",
    "example"
  ],
  "website": "https://hello.g1t.page",
  "archived_at": null
}
```

## Errors

A failed request answers with one of these statuses and a body like `{"error": {"code": "not_found", "message": "Repository not found."}}`. See [errors](/reference/api/#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 an agent token outside its repository. |
| 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. |
