curl --request POST \
--url https://api.devin.ai/v3/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/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/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/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/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/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/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-Organisations-API einen neuen Devin-Code-Scan für ein Repository, optional mit einem Scan-Profil oder Commit-SHA
curl --request POST \
--url https://api.devin.ai/v3/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/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/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/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/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/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/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
UseCodeScans auf Organisationsebene.
Verhalten
repo_name in der 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 Code-Scans auflisten auf, um den Fortschritt zu verfolgen, und 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). Das Äquivalent mit Enterprise-Geltungsbereich ist Code-Scan starten (Enterprise).
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 abgeleitet werden kann.profile_id: anzuwendendes Scan-Profil. Verwenden Sie Ingestion-Scan starten für Profile imingest-Modus.scan_type: Typ des auszuführenden Scans. Wennprofile_idangegeben ist, muss 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 Scannen ausgecheckt werden soll. Standardmäßig wird der aktuelle Stand des Standard-Branches des Repositorys verwendet.
Fehler
400, wennscan_typemit dem Profil in Konflikt steht 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 das Repository oder Profil für die Organisation nicht sichtbar ist.409, wenn der Scan-Backlog der Organisation ausgelastet ist. 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 
