---
title: "Create GitHub integration"
method: POST
path: "/github-integration/project/{projectId}"
tags: ["GitHub"]
---

# Create GitHub integration

`POST /github-integration/project/{projectId}`

Link a project to a GitHub repository.

## Path parameters

- `projectId` string, required

## Request body

- object
  - `repositoryOwner` string, required
  - `repositoryName` string, required

## Response `200`

The stored integration

- CreatedGitHubIntegration
  - `id` string
  - `projectId` string
  - `repositoryOwner` string, required
  - `repositoryName` string, required
  - `installationId` number, nullable, required — The GitHub App installation that grants access to the repository.
  - `branchPattern` string — Template used to name branches created for a task.
  - `commentTaskLinkOnGitHubIssue` boolean — When on, Kaneo comments a link back to the task on the linked GitHub issue.
  - `isActive` boolean, nullable
  - `createdAt` string, date-time
  - `updatedAt` string, date-time

## Other responses

- `400` — Invalid body, or unknown project
- `401` — Missing or invalid credentials
- `403` — No workspace access, or missing workspace:manage_settings

## Changes

- **2026-08-24** `08bbb5bedb5d` — 5 breaking, 3 info
  - the response property `createdAt` became optional for the status `200`
  - the response property `id` became optional for the status `200`
  - the response property `isActive` became optional for the status `200`
  - the response property `projectId` became optional for the status `200`
  - …4 more
- **2026-07-11** `32cece1ebe43` — 3 breaking, 2 info
  - request body became required
  - the `createdAt` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - the `updatedAt` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - added the optional property `branchPattern` to the response with the `200` status
  - …1 more
- **2026-03-05** `c45ef22a736c` — 2 breaking, 2 info
  - the response property `installationId` became nullable for the status `200`
  - the response property `isActive` became nullable for the status `200`
  - response property `installationId` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
  - response property `isActive` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
- …earlier changes not shown

[Full history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/github-integration/project/:projectId/post.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) · [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usekaneo/kaneo-api/revisions/7ccee4eec682/schema)
