21. POST /orgs/{org}/repos — создать репозиторий в организации
POST /orgs/{org}/repos — создать репозиторий в организации
Описание
Создает новый репозиторий в указанной организации от имени аутентифицированного пользователя.
Пользователь должен быть членом организации org и обладать правом на создание репозиториев в ней.
Требования
Убедитесь, что ключ API указан корректно и обладает необходимыми правами:
- репозитории → Запись.
Параметры URL
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
org | string | Да | Имя (slug) организации, в которой создается репозиторий |
Параметры запроса
Данный метод не принимает query-параметров.
Тело запроса
Тело запроса — JSON-объект со следующими полями:
| № | Поле | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|---|
| 1 | name | string | Да | — | Имя репозитория. Допустимые символы: a-z, A-Z, 0-9, _, ., -. Максимальная длина — 100 символов |
| 2 | description | string | Нет | null | Описание репозитория. Максимальная длина — 2048 символов |
| 3 | private | boolean | Нет | false | Создать приватный репозиторий. Если передано поле visibility, значение private игнорируется |
| 4 | visibility | string | Нет | — | Видимость репозитория: public или private. Имеет приоритет над полем private |
| 5 | is_template | boolean | Нет | false | Сделать репозиторий шаблоном для создания других репозиториев |
| 6 | default_branch | string | Нет | master | Имя ветки по умолчанию. Максимальная длина — 100 символов |
| 7 | auto_init | boolean | Нет | false | Создать начальный коммит с пустым README.md. Требуется для применения gitignores и license_template |
| 8 | gitignores | array[string] | Нет | null | Список шаблонов .gitignore по имени языка, например, ["Python", "Go", "Java"] |
| 9 | license_template | string | Нет | null | Ключ шаблона лицензии, например, mit |
| 10 | allow_squash_merge | boolean | Нет | true | Разрешить squash-слияние pull-запросов |
| 11 | allow_merge_commit | boolean | Нет | true | Разрешить создание merge-коммитов |
| 12 | allow_rebase_merge | boolean | Нет | true | Разрешить rebase-слияние pull-запросов |
| 13 | delete_branch_on_merge | boolean | Нет | false | Автоматически удалять ветку после слияния pull-запроса |
Пример запроса
curl -X POST "https://api.gitverse.ru/orgs/user/repos" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/vnd.gitverse.object+json;version=latest" \
-H "Content-Type: application/json" \
-d '{
"name": "my-new-repo",
"description": "Описание репозитория",
"private": true,
"default_branch": "master",
"auto_init": true,
"gitignores": ["Python", "Go", "Java"],
"license_template": "mit",
"allow_squash_merge": true,
"allow_merge_commit": true,
"allow_rebase_merge": false,
"delete_branch_on_merge": true
}'Ответ (201 Created)
При успешном создании сервер возвращает заголовок Location с URL созданного репозитория и тело — тот же объект Repository, что возвращает GET /orgs/{org}/repos.
Заголовки ответа:
Location: https://api.gitverse.ru/repos/user/my-new-repo
Content-Type: application/vnd.gitverse.object+json;version=latestТело ответа:
{
"id": 545,
"name": "my-new-repo",
"full_name": "user/my-new-repo",
"owner": {
"login": "user",
"id": 49,
"avatar_url": "https://api.gitverse.ru/sc/avatars/avatar_hash",
"url": "https://api.gitverse.ru/users/user",
"html_url": "https://gitverse.ru/user",
"followers_url": "https://api.gitverse.ru/users/user/followers",
"following_url": "https://api.gitverse.ru/users/user/following{/other_user}",
"organizations_url": "https://api.gitverse.ru/users/user/orgs",
"repos_url": "https://api.gitverse.ru/users/user/repos",
"type": "Organization",
"site_admin": false
},
"private": true,
"visibility": "private",
"description": "Описание репозитория",
"fork": false,
"archived": false,
"disabled": false,
"size": 0,
"default_branch": "master",
"is_template": false,
"has_issues": true,
"has_wiki": true,
"forks": 0,
"forks_count": 0,
"stargazers_count": 0,
"watchers": 0,
"watchers_count": 0,
"open_issues": 0,
"open_issues_count": 0,
"topics": null,
"language": null,
"created_at": "2026-05-26T10:15:00Z",
"updated_at": "2026-05-26T10:15:00Z",
"pushed_at": "2026-05-26T10:15:00Z",
"allow_merge_commit": true,
"allow_squash_merge": true,
"allow_rebase_merge": false,
"delete_branch_on_merge": true,
"html_url": "https://gitverse.ru/user/my-new-repo",
"clone_url": "https://gitverse.ru/user/my-new-repo.git",
"ssh_url": "git@gitverse.ru:user/my-new-repo.git",
"mirror_url": "https://gitverse.ru/user/my-new-repo.git",
"url": "https://api.gitverse.ru/repos/user/my-new-repo",
"contents_url": "https://api.gitverse.ru/repos/user/my-new-repo/contents/{+path}",
"issues_url": "https://api.gitverse.ru/repos/user/my-new-repo/issues{/number}",
"issue_comment_url": "https://api.gitverse.ru/repos/user/my-new-repo/issues/comments{/number}",
"pulls_url": "https://api.gitverse.ru/repos/user/my-new-repo/pulls{/number}",
"forks_url": "https://api.gitverse.ru/repos/user/my-new-repo/forks",
"languages_url": "https://api.gitverse.ru/repos/user/my-new-repo/languages",
"permissions": {
"pull": true,
"push": true,
"admin": true
},
"template_repository": null,
"parent": null
}Формат ответа:
application/vnd.gitverse.object+json;version=latest
Поля ответа
Тело ответа содержит 57 полей, сгруппированных ниже по назначению.
Основные поля репозитория
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный числовой идентификатор репозитория |
name | string | Имя репозитория |
full_name | string | Полное имя репозитория в формате org/repo |
private | boolean | Признак приватности: true — приватный, false — публичный |
visibility | string | Видимость репозитория: public или private |
description | string или null | Описание репозитория |
fork | boolean | Является ли репозиторий форком |
archived | boolean | Архивирован ли репозиторий |
disabled | boolean | Отключен ли репозиторий |
size | integer | Размер репозитория в килобайтах |
default_branch | string | Имя ветки по умолчанию |
is_template | boolean | Является ли репозиторий шаблоном |
has_issues | boolean | Включены ли задачи (issues) |
has_wiki | boolean | Включена ли вики |
Счетчики
| Поле | Тип | Описание |
|---|---|---|
forks | integer | Количество форков |
forks_count | integer | Количество форков (дубликат forks для совместимости с GitHub API) |
stargazers_count | integer | Количество пользователей, поставивших «звезду» |
watchers | integer | Количество наблюдателей |
watchers_count | integer | Количество наблюдателей (дубликат watchers для совместимости с GitHub API) |
open_issues | integer | Количество открытых задач и pull-запросов |
open_issues_count | integer | Количество открытых задач и pull-запросов (дубликат open_issues) |
Темы и язык
| Поле | Тип | Описание |
|---|---|---|
topics | array[string] или null | Список тем (тегов) репозитория |
language | string или null | Основной язык программирования репозитория |
Даты
Все даты возвращаются в формате RFC3339 (UTC).
| Поле | Тип | Описание |
|---|---|---|
created_at | string | Дата и время создания репозитория |
updated_at | string | Дата и время последнего обновления метаданных |
pushed_at | string | Дата и время последнего git push в репозиторий |
Merge-настройки
| Поле | Тип | Описание |
|---|---|---|
allow_merge_commit | boolean | Разрешено ли создание merge-коммитов |
allow_squash_merge | boolean | Разрешено ли squash-слияние |
allow_rebase_merge | boolean | Разрешено ли rebase-слияние |
delete_branch_on_merge | boolean | Удалять ли ветку после слияния pull-запроса |
URL-поля
| Поле | Тип | Описание |
|---|---|---|
html_url | string | URL веб-страницы репозитория |
clone_url | string | Ссылка для клонирования по HTTPS |
ssh_url | string | Ссылка для клонирования по SSH |
mirror_url | string | URL зеркала репозитория |
url | string | API URL репозитория |
contents_url | string | API URL содержимого с шаблоном пути |
issues_url | string | API URL задач с шаблоном номера |
issue_comment_url | string | API URL комментариев к задачам с шаблоном номера |
pulls_url | string | API URL pull-запросов с шаблоном номера |
forks_url | string | API URL списка форков |
languages_url | string | API URL статистики языков репозитория |
Объект owner
Объект owner описывает организацию-владельца репозитория.
| Поле | Тип | Описание |
|---|---|---|
owner.login | string | Логин (slug) владельца |
owner.id | integer | Уникальный идентификатор владельца |
owner.avatar_url | string | URL аватара владельца |
owner.url | string | API URL владельца |
owner.html_url | string | URL веб-страницы профиля владельца |
owner.followers_url | string | API URL списка подписчиков |
owner.following_url | string | API URL списка подписок |
owner.organizations_url | string | API URL организаций пользователя |
owner.repos_url | string | API URL списка репозиториев владельца |
owner.type | string | Тип владельца: User или Organization |
owner.site_admin | boolean | Является ли владелец администратором платформы |
Объект permissions
Объект permissions описывает права аутентифицированного пользователя на созданный репозиторий.
| Поле | Тип | Описание |
|---|---|---|
permissions.pull | boolean | Права на чтение содержимого |
permissions.push | boolean | Права на запись (push) |
permissions.admin | boolean | Права администратора |
Связанные репозитории
| Поле | Тип | Описание |
|---|---|---|
template_repository | object или null | Объект Repository, на основе которого создан данный репозиторий (если использовался шаблон). Иначе — null |
parent | object или null | Объект Repository родительского репозитория (если данный репозиторий — форк). Иначе — null |
💡 Поля
template_repositoryиparentсодержат полный объект репозитория с теми же полями, что и в корневом ответе.
Коды ответа
| Код | Статус | Описание |
|---|---|---|
201 | Created | Репозиторий успешно создан. В ответе — заголовок Location и объект Repository |
401 | Unauthorized | Токен авторизации отсутствует или недействителен. Тело ответа пустое |
403 | Forbidden | Аутентифицированный пользователь не является членом организации или не имеет прав на создание репозитория. Тело ответа пустое |
404 | Not Found | Организация с указанным org не найдена. Тело ответа пустое |
409 | Conflict | Репозиторий с таким именем уже существует в данной организации. Тело ответа пустое |
422 | Unprocessable Entity | Ошибка валидации тела запроса: недопустимые символы в name, превышение длины полей, неизвестный шаблон gitignores или license_template, недопустимое значение visibility. Тело ответа пустое |
500 | Internal Server Error | Внутренняя ошибка сервера |