Create GitHub integration
curl --request POST \
--url https://cloud.kaneo.app/api/github-integration/project/{projectId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"repositoryOwner": "<string>",
"repositoryName": "<string>"
}
'import requests
url = "https://cloud.kaneo.app/api/github-integration/project/{projectId}"
payload = {
"repositoryOwner": "<string>",
"repositoryName": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({repositoryOwner: '<string>', repositoryName: '<string>'})
};
fetch('https://cloud.kaneo.app/api/github-integration/project/{projectId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud.kaneo.app/api/github-integration/project/{projectId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'repositoryOwner' => '<string>',
'repositoryName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud.kaneo.app/api/github-integration/project/{projectId}"
payload := strings.NewReader("{\n \"repositoryOwner\": \"<string>\",\n \"repositoryName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cloud.kaneo.app/api/github-integration/project/{projectId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"repositoryOwner\": \"<string>\",\n \"repositoryName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.kaneo.app/api/github-integration/project/{projectId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"repositoryOwner\": \"<string>\",\n \"repositoryName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"repositoryOwner": "<string>",
"repositoryName": "<string>",
"installationId": 123,
"requiresVerification": true,
"id": "<string>",
"projectId": "<string>",
"importProgress": {
"runId": "<string>",
"pending": true,
"imported": 123,
"updated": 123,
"skipped": 123
},
"branchPattern": "<string>",
"commentTaskLinkOnGitHubIssue": true,
"isActive": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}Create GitHub integration
Link a project to a GitHub repository. Disconnect first to switch repositories; existing issue and pull request links cannot be reused for another repository.
POST
/
github-integration
/
project
/
{projectId}
Create GitHub integration
curl --request POST \
--url https://cloud.kaneo.app/api/github-integration/project/{projectId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"repositoryOwner": "<string>",
"repositoryName": "<string>"
}
'import requests
url = "https://cloud.kaneo.app/api/github-integration/project/{projectId}"
payload = {
"repositoryOwner": "<string>",
"repositoryName": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({repositoryOwner: '<string>', repositoryName: '<string>'})
};
fetch('https://cloud.kaneo.app/api/github-integration/project/{projectId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud.kaneo.app/api/github-integration/project/{projectId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'repositoryOwner' => '<string>',
'repositoryName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud.kaneo.app/api/github-integration/project/{projectId}"
payload := strings.NewReader("{\n \"repositoryOwner\": \"<string>\",\n \"repositoryName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cloud.kaneo.app/api/github-integration/project/{projectId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"repositoryOwner\": \"<string>\",\n \"repositoryName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.kaneo.app/api/github-integration/project/{projectId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"repositoryOwner\": \"<string>\",\n \"repositoryName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"repositoryOwner": "<string>",
"repositoryName": "<string>",
"installationId": 123,
"requiresVerification": true,
"id": "<string>",
"projectId": "<string>",
"importProgress": {
"runId": "<string>",
"pending": true,
"imported": 123,
"updated": 123,
"skipped": 123
},
"branchPattern": "<string>",
"commentTaskLinkOnGitHubIssue": true,
"isActive": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}{
"message": "Task not found",
"code": "NOT_FOUND",
"issues": [
{
"path": "body.title",
"message": "Required"
}
],
"missingPermissions": [
"task:update"
]
}Connecting a different repository while one is already linked returns 409. Disconnect the current integration first so its old issue and pull-request numbers cannot be reused against the new repository. Local tasks remain; old external links and saved import progress are removed by disconnecting. Reverification of the same numeric repository preserves existing links and preferences, including when its name or installation changes. Concurrent configuration changes also return 409; refresh before retrying.
Authorizations
API key or session token (Bearer)
Path Parameters
Body
application/json
Response
The stored integration
The GitHub App installation that grants access to the repository.
Show child attributes
Show child attributes
Template used to name branches created for a task.
When on, Kaneo comments a link back to the task on the linked GitHub issue.
Was this page helpful?
⌘I