Bulk index repositories
curl --request PUT \
--url https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"repositories": [
{
"repository_path": "<string>",
"branch_names": [
"<string>"
]
}
]
}
'import requests
url = "https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing"
payload = { "repositories": [
{
"repository_path": "<string>",
"branch_names": ["<string>"]
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({repositories: [{repository_path: '<string>', branch_names: ['<string>']}]})
};
fetch('https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing', 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://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'repositories' => [
[
'repository_path' => '<string>',
'branch_names' => [
'<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://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing"
payload := strings.NewReader("{\n \"repositories\": [\n {\n \"repository_path\": \"<string>\",\n \"branch_names\": [\n \"<string>\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"repositories\": [\n {\n \"repository_path\": \"<string>\",\n \"branch_names\": [\n \"<string>\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"repositories\": [\n {\n \"repository_path\": \"<string>\",\n \"branch_names\": [\n \"<string>\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"branches": [
"<string>"
],
"indexing_enabled": true,
"repository_path": "<string>",
"indexing_status": {
"indexing_enabled": true,
"latest_completed_search_index_job": {
"branch_name": "<string>",
"commit": "<string>",
"created_at": 123,
"job_id": "<string>",
"status": "failed"
},
"latest_completed_wiki_index_job": {
"branch_name": "<string>",
"commit": "<string>",
"created_at": 123,
"job_id": "<string>",
"status": "failed"
},
"latest_indexes": [
{
"branch_name": "<string>",
"commit": "<string>",
"created_at": 123,
"job_id": "<string>",
"status": "failed"
}
]
}
}
]{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Repositories (Organization)
Bulk index repositories
Idempotently enables indexing for a batch of repositories and triggers indexing jobs.
PUT
/
v3beta1
/
organizations
/
{org_id}
/
repositories
/
indexing
Bulk index repositories
curl --request PUT \
--url https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"repositories": [
{
"repository_path": "<string>",
"branch_names": [
"<string>"
]
}
]
}
'import requests
url = "https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing"
payload = { "repositories": [
{
"repository_path": "<string>",
"branch_names": ["<string>"]
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({repositories: [{repository_path: '<string>', branch_names: ['<string>']}]})
};
fetch('https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing', 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://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'repositories' => [
[
'repository_path' => '<string>',
'branch_names' => [
'<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://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing"
payload := strings.NewReader("{\n \"repositories\": [\n {\n \"repository_path\": \"<string>\",\n \"branch_names\": [\n \"<string>\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"repositories\": [\n {\n \"repository_path\": \"<string>\",\n \"branch_names\": [\n \"<string>\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3beta1/organizations/{org_id}/repositories/indexing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"repositories\": [\n {\n \"repository_path\": \"<string>\",\n \"branch_names\": [\n \"<string>\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"branches": [
"<string>"
],
"indexing_enabled": true,
"repository_path": "<string>",
"indexing_status": {
"indexing_enabled": true,
"latest_completed_search_index_job": {
"branch_name": "<string>",
"commit": "<string>",
"created_at": 123,
"job_id": "<string>",
"status": "failed"
},
"latest_completed_wiki_index_job": {
"branch_name": "<string>",
"commit": "<string>",
"created_at": 123,
"job_id": "<string>",
"status": "failed"
},
"latest_indexes": [
{
"branch_name": "<string>",
"commit": "<string>",
"created_at": 123,
"job_id": "<string>",
"status": "failed"
}
]
}
}
]{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Permissions
Requires a service user or personal access token. The permission check depends on how repository access is managed for your organization:- Organization-level permissions: the caller needs the
IndexOrgRepositoriespermission at the organization level. - Granular repository grants:
IndexOrgRepositoriesis not checked. The caller needs theReadpermission at the organization level, plus both therepo.use_readandrepo.indexgrants on every repository in the request. If any repository is missing either grant, the entire request is rejected with403and no repositories are indexed.
Behavior
This endpoint is idempotent — calling it multiple times with the same repositories will not create duplicate indexing jobs. It enables indexing and triggers indexing jobs for each repository in the request. You can optionally specifybranch_names for each repository to index specific branches. If omitted, the default branch is used.Authorizations
Service User credential (prefix: cog_)
Path Parameters
Organization ID (prefix: org-)
Example:
"org-abc123def456"
Body
application/json
Required array length:
1 - 100 elementsShow child attributes
Show child attributes

