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 '
{
"commit_sha": "<string>",
"host": "<string>",
"interactive": false,
"platform": "<string>",
"profile_id": "<string>",
"repo_name": "<string>",
"repos": [
{
"repo_name": "<string>",
"host": "<string>"
}
]
}
'import requests
url = "https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans"
payload = {
"commit_sha": "<string>",
"host": "<string>",
"interactive": False,
"platform": "<string>",
"profile_id": "<string>",
"repo_name": "<string>",
"repos": [
{
"repo_name": "<string>",
"host": "<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({
commit_sha: '<string>',
host: '<string>',
interactive: false,
platform: '<string>',
profile_id: '<string>',
repo_name: '<string>',
repos: [{repo_name: '<string>', host: '<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([
'commit_sha' => '<string>',
'host' => '<string>',
'interactive' => false,
'platform' => '<string>',
'profile_id' => '<string>',
'repo_name' => '<string>',
'repos' => [
[
'repo_name' => '<string>',
'host' => '<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 \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"platform\": \"<string>\",\n \"profile_id\": \"<string>\",\n \"repo_name\": \"<string>\",\n \"repos\": [\n {\n \"repo_name\": \"<string>\",\n \"host\": \"<string>\"\n }\n ]\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 \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"platform\": \"<string>\",\n \"profile_id\": \"<string>\",\n \"repo_name\": \"<string>\",\n \"repos\": [\n {\n \"repo_name\": \"<string>\",\n \"host\": \"<string>\"\n }\n ]\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 \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"platform\": \"<string>\",\n \"profile_id\": \"<string>\",\n \"repo_name\": \"<string>\",\n \"repos\": [\n {\n \"repo_name\": \"<string>\",\n \"host\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"created_at": 123,
"effort": "normal",
"host": "<string>",
"org_id": "<string>",
"profile": {
"name": "<string>",
"profile_id": "<string>"
},
"repo_name": "<string>",
"scan_id": "<string>",
"scan_type": "security",
"status": "waiting",
"url": "<string>",
"outpost_pool_id": "<string>",
"platform": "<string>",
"repo_full_name": "<string>"
}{
"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"
}Iniciar análisis de código (API de Devin)
Inicia un nuevo análisis de código de Devin en un repositorio de una organización mediante la API Enterprise v3, opcionalmente con un perfil de análisis o un 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 '
{
"commit_sha": "<string>",
"host": "<string>",
"interactive": false,
"platform": "<string>",
"profile_id": "<string>",
"repo_name": "<string>",
"repos": [
{
"repo_name": "<string>",
"host": "<string>"
}
]
}
'import requests
url = "https://api.devin.ai/v3/enterprise/organizations/{org_id}/code-scans"
payload = {
"commit_sha": "<string>",
"host": "<string>",
"interactive": False,
"platform": "<string>",
"profile_id": "<string>",
"repo_name": "<string>",
"repos": [
{
"repo_name": "<string>",
"host": "<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({
commit_sha: '<string>',
host: '<string>',
interactive: false,
platform: '<string>',
profile_id: '<string>',
repo_name: '<string>',
repos: [{repo_name: '<string>', host: '<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([
'commit_sha' => '<string>',
'host' => '<string>',
'interactive' => false,
'platform' => '<string>',
'profile_id' => '<string>',
'repo_name' => '<string>',
'repos' => [
[
'repo_name' => '<string>',
'host' => '<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 \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"platform\": \"<string>\",\n \"profile_id\": \"<string>\",\n \"repo_name\": \"<string>\",\n \"repos\": [\n {\n \"repo_name\": \"<string>\",\n \"host\": \"<string>\"\n }\n ]\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 \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"platform\": \"<string>\",\n \"profile_id\": \"<string>\",\n \"repo_name\": \"<string>\",\n \"repos\": [\n {\n \"repo_name\": \"<string>\",\n \"host\": \"<string>\"\n }\n ]\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 \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"platform\": \"<string>\",\n \"profile_id\": \"<string>\",\n \"repo_name\": \"<string>\",\n \"repos\": [\n {\n \"repo_name\": \"<string>\",\n \"host\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"created_at": 123,
"effort": "normal",
"host": "<string>",
"org_id": "<string>",
"profile": {
"name": "<string>",
"profile_id": "<string>"
},
"repo_name": "<string>",
"scan_id": "<string>",
"scan_type": "security",
"status": "waiting",
"url": "<string>",
"outpost_pool_id": "<string>",
"platform": "<string>",
"repo_full_name": "<string>"
}{
"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"
}Permisos
Requiere un usuario de servicio o un token de acceso personal con el permisoUseAccountCodeScans en el nivel empresarial.
Comportamiento
Pone en cola un nuevo análisis de código del repositorio especificado (repo_name) o de los repositorios especificados (repos) en la organización indicada. El análisis se inicia de forma asíncrona mediante el despachador de análisis; la respuesta es el registro del análisis con un status inicial de waiting o pending. Consulte periódicamente List Code Scans para seguir el progreso y List Code Scan Findings (filtrado por scan_id) para consultar los resultados cuando el análisis alcance el estado completed.
El análisis se atribuye al principal que realiza la llamada (el usuario de servicio o PAT que realizó la solicitud).
Campos de la solicitud
Proporcione exactamente uno de los camposrepo_name o repos.
repo_name: nombre completo del repositorio; por ejemplo,owner/repo. El repositorio ya debe ser accesible mediante la integración de Git de la organización.host: host de Git del repositorio, si no se puede inferir.repos: repositorios que abarca un único análisis multirrepositorio, como una lista de objetos conrepo_namey unhostopcional (hasta 200). La primera entrada es el repositorio principal del análisis.profile_id: un perfil de análisis que se aplicará. Use Start Ingestion Scan para perfiles en modoingest.scan_type: tipo de análisis que se ejecutará. Debe coincidir con el tipo de análisis del perfil cuando se proporcionaprofile_id. De forma predeterminada, usa el tipo del perfil osecuritypara análisis sin perfil. Los tipos de análisis distintos de los de seguridad requieren un perfil.commit_sha: commit que se extraerá antes del análisis. De forma predeterminada, usa la cabecera de la rama predeterminada del repositorio.effort:normal(predeterminado) usa un nivel de razonamiento del modelo más bajo con lotes de investigación más grandes;deepejecuta el proceso completo.interactive: cuando estrue, el análisis se pausa enawaiting_user_inputpara que el usuario lo revise entre el modelado de amenazas y la investigación. El valor predeterminado esfalse. Solo los análisis de seguridad admiten la revisión interactiva; los demás tipos de análisis se ejecutan sin supervisión.platform: dónde se ejecutan las sesiones del análisis; puede ser una etiqueta de plataforma configurada para la organización (por ejemplo,linux,windowsomacos) o el nombre de un pool de outposts, sin distinguir entre mayúsculas y minúsculas. Si un nombre coincide con ambas opciones, tienen prioridad las plataformas. El valor predeterminado es el de la organización.
Errores
400cuandoscan_typeentra en conflicto con el perfil, se proporciona unscan_typeque no es de seguridad sin un perfil oplatformno coincide con ninguna etiqueta de plataforma configurada ni con ningún pool de outpost (el cuerpo del error indica los valores disponibles).403cuando la organización está restringida a análisis de solo ingesta y no se proporciona un perfil en modoingest.404cuando la organización, el repositorio o el perfil no son visibles para la cuenta Enterprise.409cuando el backlog de análisis de la organización está lleno. Vuelve a intentarlo más tarde.422cuando se proporcionan tantorepo_namecomorepos, o ninguno de los dos, o cuandoreposestá vacío.
Autorizaciones
Credencial de usuario de servicio (prefijo: cog_)
Parámetros de ruta
ID de la organización (prefijo: org-)
"org-abc123def456"
Cuerpo
Cuerpo de la solicitud para iniciar un nuevo análisis de código.
Commit que se debe extraer antes de ejecutar el análisis.
Nivel de esfuerzo del análisis: 'normal' (predeterminado) utiliza un menor esfuerzo de razonamiento del modelo con lotes de investigación más grandes; 'deep' ejecuta el proceso completo.
normal, deep Host de Git del repositorio, si se conoce.
Cuando es true, el análisis se pausa entre el modelado de amenazas y la investigación para que el usuario lo revise.
Dónde se ejecutan las sesiones del análisis: una etiqueta de plataforma configurada para la organización (p. ej., 'linux', 'windows', 'macos') o el nombre de un pool de outposts (BYOB), sin distinguir entre mayúsculas y minúsculas; las plataformas tienen prioridad cuando un nombre coincide tanto con una plataforma como con un pool. Si se omite, se utiliza el valor predeterminado de la organización. Los valores no reconocidos se rechazan con una respuesta 400 cuyo cuerpo de error enumera las etiquetas de plataforma y los nombres de pools de outposts disponibles.
128Perfil de análisis que se aplicará al análisis.
Nombre completo del repositorio que se va a analizar. Proporcione exactamente uno de los campos repo_name o repos.
Repositorios incluidos en un análisis; la primera entrada corresponde al repositorio principal del análisis. Proporcione exactamente uno de los campos repo_name o repos.
200Show child attributes
Show child attributes
Tipo de análisis que se ejecutará. Debe coincidir con el tipo de análisis del perfil cuando se proporciona un perfil; de forma predeterminada, se usa el tipo del perfil o 'security' para análisis sin perfil. Los tipos que no son de seguridad requieren un perfil y se rechazan sin uno.
security, performance, db-queries, test-coverage, dead-code, code-quality, cleanup, telemetry, accessibility, compliance, general, migration-docs Respuesta
Respuesta satisfactoria
Un análisis de código individual.
Momento en que se creó el análisis (segundos Unix).
Nivel de esfuerzo del análisis: 'normal' utiliza un nivel de esfuerzo de razonamiento del modelo más bajo y lotes de investigación más grandes; 'deep' ejecuta el proceso completo.
normal, deep Host de Git del repositorio, si se conoce.
Organización a la que pertenece el análisis.
Perfil con el que se ejecutó el análisis, si corresponde.
Show child attributes
Show child attributes
Repositorio principal del análisis. Los análisis de varios repositorios abarcan repositorios adicionales que no se enumeran aquí.
Identificador único del análisis.
Tipo de análisis, establecido al crearlo.
security, performance, db-queries, test-coverage, dead-code, code-quality, cleanup, telemetry, accessibility, compliance, general, migration-docs Estado del análisis: waiting, pending, running, awaiting_user_input, completed, failed o cancelled.
waiting, pending, running, awaiting_user_input, completed, failed, cancelled URL de la página del análisis en la webapp de Devin.
Pool de outposts en el que se ejecutan las sesiones del análisis, si se ha configurado uno.
Etiqueta de la plataforma alojada en la que se ejecutan las sesiones del análisis. Null cuando el análisis se ejecuta en un pool de outposts o con la configuración predeterminada de la organización.
Identidad del repositorio principal que incluye el host (p. ej., github.com/org/repo). Null para los depósitos de Perforce, que no tienen un host de Git.

