curl --request POST \
--url https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"repo_name": "<string>",
"commit_sha": "<string>",
"host": "<string>",
"profile_id": "<string>"
}
'import requests
url = "https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans"
payload = {
"repo_name": "<string>",
"commit_sha": "<string>",
"host": "<string>",
"profile_id": "<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({
repo_name: '<string>',
commit_sha: '<string>',
host: '<string>',
profile_id: '<string>'
})
};
fetch('https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans', 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/v3/enterprise/organizations/{org_id}/code-scans",
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([
'repo_name' => '<string>',
'commit_sha' => '<string>',
'host' => '<string>',
'profile_id' => '<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/v3/enterprise/organizations/{org_id}/code-scans"
payload := strings.NewReader("{\n \"repo_name\": \"<string>\",\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"profile_id\": \"<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://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"repo_name\": \"<string>\",\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"profile_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans")
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 \"repo_name\": \"<string>\",\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"profile_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": 123,
"host": "<string>",
"org_id": "<string>",
"profile": {
"name": "<string>",
"profile_id": "<string>"
},
"repo_name": "<string>",
"scan_id": "<string>",
"scan_type": "security",
"status": "waiting"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Code-Scan starten (Devin API)
Starten Sie über die v3 Enterprise API einen neuen Devin-Code-Scan für ein Repository in einer Organisation, optional mit einem Scan-Profil oder einem Commit
curl --request POST \
--url https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"repo_name": "<string>",
"commit_sha": "<string>",
"host": "<string>",
"profile_id": "<string>"
}
'import requests
url = "https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans"
payload = {
"repo_name": "<string>",
"commit_sha": "<string>",
"host": "<string>",
"profile_id": "<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({
repo_name: '<string>',
commit_sha: '<string>',
host: '<string>',
profile_id: '<string>'
})
};
fetch('https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans', 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/v3/enterprise/organizations/{org_id}/code-scans",
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([
'repo_name' => '<string>',
'commit_sha' => '<string>',
'host' => '<string>',
'profile_id' => '<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/v3/enterprise/organizations/{org_id}/code-scans"
payload := strings.NewReader("{\n \"repo_name\": \"<string>\",\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"profile_id\": \"<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://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"repo_name\": \"<string>\",\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"profile_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans")
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 \"repo_name\": \"<string>\",\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"profile_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": 123,
"host": "<string>",
"org_id": "<string>",
"profile": {
"name": "<string>",
"profile_id": "<string>"
},
"repo_name": "<string>",
"scan_id": "<string>",
"scan_type": "security",
"status": "waiting"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Berechtigungen
UseAccountCodeScans auf Unternehmensebene.
Verhalten
repo_name in der angegebenen Organisation in die Warteschlange. Der Scan wird vom Scan-Dispatcher asynchron gestartet; die Antwort enthält den Scan-Datensatz mit dem anfänglichen status waiting oder pending. Rufen Sie regelmäßig Code-Scans auflisten auf, um den Fortschritt zu verfolgen, und verwenden Sie Code-Scan-Befunde auflisten (gefiltert nach scan_id), um die Ergebnisse abzurufen, sobald der Scan den Status completed erreicht.
Der Scan wird dem aufrufenden Principal zugeordnet (dem Service-Benutzer oder PAT, der die Anfrage gestellt hat).
Anfragefelder
repo_name(erforderlich): vollständiger Repository-Name, z. B.owner/repo. Das Repository muss bereits über die Git-Integration der Organisation zugänglich sein.host: Git-Host des Repositorys, falls er nicht automatisch ermittelt werden kann.profile_id: ein anzuwendendes Scan-Profil. Verwenden Sie Ingestion-Scan starten für Profile im Modusingest.scan_type: Typ des auszuführenden Scans. Bei Angabe vonprofile_idmuss er dem Scan-Typ des Profils entsprechen. Standardmäßig wird der Typ des Profils verwendet, bei Scans ohne Profilsecurity. Nicht sicherheitsbezogene Scan-Typen erfordern ein Profil.commit_sha: Commit, der vor dem Scan ausgecheckt werden soll. Standardmäßig wird der HEAD des Standard-Branches des Repositorys verwendet.
Fehler
400, wennscan_typenicht mit dem Profil übereinstimmt oder ein nicht sicherheitsbezogenerscan_typeohne Profil angegeben wird.403, wenn die Organisation auf reine Ingestion-Scans beschränkt ist und kein Profil imingest-Modus angegeben wird.404, wenn die Organisation, das Repository oder das Profil für das Enterprise-Konto nicht sichtbar ist.409, wenn das Scan-Backlog der Organisation seine Kapazitätsgrenze erreicht hat. Versuchen Sie es später erneut.
Autorisierungen
Servicebenutzer-Anmeldedaten (Präfix: cog_)
Pfadparameter
Organisations-ID (Präfix: org-)
"org-abc123def456"
Body
Request-Body zum Starten eines neuen Code-Scans.
Vollständiger Name des zu scannenden Repositorys.
Commit, der vor dem Scan ausgecheckt werden soll.
Git-Host des Repositorys, falls bekannt.
Scan-Profil, das auf den Scan angewendet werden soll.
Art des auszuführenden Scans. Muss dem Scan-Typ des Profils entsprechen, wenn ein Profil angegeben ist; standardmäßig wird der Typ des Profils verwendet, oder 'security' für Scans ohne Profil. Nicht sicherheitsbezogene Typen erfordern ein Profil und werden ohne eines abgelehnt.
security, performance, db-queries, test-coverage, dead-code, code-quality, telemetry, accessibility, general, migration-docs Antwort
Erfolgreiche Antwort
Ein einzelner Code-Scan.
Zeitpunkt, zu dem der Scan erstellt wurde (Unix-Sekunden).
Git-Host des Repositorys, falls bekannt.
Organisation, zu der der Scan gehört.
Profil, unter dem der Scan ausgeführt wurde, falls vorhanden.
Show child attributes
Show child attributes
Primäres Repository des Scans. Multi-Repo-Scans umfassen zusätzliche Repositorys, die hier nicht aufgeführt sind.
Eindeutige Kennung des Scans.
Typ des Scans, bei der Erstellung festgelegt.
security, performance, db-queries, test-coverage, dead-code, code-quality, telemetry, accessibility, general, migration-docs Scan-Status: waiting, pending, running, awaiting_user_input, completed, failed oder cancelled.
waiting, pending, running, awaiting_user_input, completed, failed, cancelled 
