curl --request POST \
--url https://api.devin.ai/v3/organizations/{org_id}/code-scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"commit_sha": "<string>",
"host": "<string>",
"interactive": false,
"new_budget": {
"acu_limit": 500000
},
"platform": "<string>",
"profile_id": "<string>",
"repo_name": "<string>",
"repos": [
{
"repo_name": "<string>",
"host": "<string>"
}
]
}
'import requests
url = "https://api.devin.ai/v3/organizations/{org_id}/code-scans"
payload = {
"commit_sha": "<string>",
"host": "<string>",
"interactive": False,
"new_budget": { "acu_limit": 500000 },
"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,
new_budget: {acu_limit: 500000},
platform: '<string>',
profile_id: '<string>',
repo_name: '<string>',
repos: [{repo_name: '<string>', host: '<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([
'commit_sha' => '<string>',
'host' => '<string>',
'interactive' => false,
'new_budget' => [
'acu_limit' => 500000
],
'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/organizations/{org_id}/code-scans"
payload := strings.NewReader("{\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"new_budget\": {\n \"acu_limit\": 500000\n },\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/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 \"new_budget\": {\n \"acu_limit\": 500000\n },\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/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 \"new_budget\": {\n \"acu_limit\": 500000\n },\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 varredura de código (API do Devin)
Inicie uma nova varredura de código do Devin em um ou mais repositórios usando a API v3 da organização, opcionalmente com um perfil de varredura, SHA de commit ou nível de esforço
curl --request POST \
--url https://api.devin.ai/v3/organizations/{org_id}/code-scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"commit_sha": "<string>",
"host": "<string>",
"interactive": false,
"new_budget": {
"acu_limit": 500000
},
"platform": "<string>",
"profile_id": "<string>",
"repo_name": "<string>",
"repos": [
{
"repo_name": "<string>",
"host": "<string>"
}
]
}
'import requests
url = "https://api.devin.ai/v3/organizations/{org_id}/code-scans"
payload = {
"commit_sha": "<string>",
"host": "<string>",
"interactive": False,
"new_budget": { "acu_limit": 500000 },
"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,
new_budget: {acu_limit: 500000},
platform: '<string>',
profile_id: '<string>',
repo_name: '<string>',
repos: [{repo_name: '<string>', host: '<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([
'commit_sha' => '<string>',
'host' => '<string>',
'interactive' => false,
'new_budget' => [
'acu_limit' => 500000
],
'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/organizations/{org_id}/code-scans"
payload := strings.NewReader("{\n \"commit_sha\": \"<string>\",\n \"host\": \"<string>\",\n \"interactive\": false,\n \"new_budget\": {\n \"acu_limit\": 500000\n },\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/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 \"new_budget\": {\n \"acu_limit\": 500000\n },\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/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 \"new_budget\": {\n \"acu_limit\": 500000\n },\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"
}Permissões
Requer um usuário de serviço ou um token de acesso pessoal com a permissãoUseCodeScans no nível da organização.
Comportamento
Enfileira uma nova varredura de código para o repositório informado (repo_name) ou para os repositórios informados (repos) na organização. A varredura é iniciada de forma assíncrona pelo despachante de varreduras; a resposta é o registro da varredura, com status inicial waiting ou pending. Consulte List Code Scans para acompanhar o progresso e List Code Scan Findings (filtrada por scan_id) para ler os resultados quando a varredura atingir completed.
A varredura é atribuída ao principal que fez a chamada (o usuário de serviço ou PAT que fez a requisição). O equivalente no escopo Enterprise é Iniciar varredura de código (Enterprise).
Campos da requisição
Informe exatamente um dos campos:repo_name ou repos.
repo_name: nome completo do repositório, por exemplo,owner/repo. O repositório já deve estar acessível pela integração Git da organização.host: host Git do repositório, caso não possa ser inferido.repos: repositórios abrangidos por uma única varredura de vários repositórios, na forma de uma lista de objetos comrepo_namee umhostopcional (até 200). A primeira entrada é o repositório principal da varredura.profile_id: um perfil de varredura a ser aplicado. Use Iniciar varredura de ingestão para perfis no modoingest.scan_type: tipo de varredura a ser executada. Deve corresponder ao tipo de varredura do perfil quandoprofile_idfor informado. Por padrão, usa o tipo do perfil ousecuritypara varreduras sem perfil. Tipos de varredura que não são de Security exigem um perfil.commit_sha: commit a ser usado antes da varredura. Por padrão, usa o commit mais recente da branch padrão do repositório.effort:normal(padrão) usa menor esforço de raciocínio do modelo, com lotes de investigação maiores;deepexecuta o pipeline completo.interactive: quandotrue, a varredura fica pausada emawaiting_user_inputpara revisão do usuário entre a modelagem de ameaças e a investigação. O padrão éfalse. Apenas varreduras de Security oferecem suporte à revisão interativa; os demais tipos de varredura são executados sem supervisão.platform: onde as sessões da varredura são executadas: um rótulo de plataforma configurado para a organização (por exemplo,linux,windowsoumacos) ou o nome de um pool do outpost, sem diferenciar maiúsculas de minúsculas. As plataformas têm prioridade quando um nome corresponde aos dois. O padrão é o definido para a organização.
Erros
400quandoscan_typeconflita com o perfil, quando umscan_typediferente de Security é fornecido sem um perfil ou quandoplatformnão corresponde a um rótulo de plataforma configurado nem a um pool do outpost (o corpo do erro lista os valores disponíveis).403quando a organização está restrita a varreduras somente de ingestion e nenhum perfil no modoingesté fornecido.404quando o repositório ou o perfil não está visível para a organização.409quando o backlog de varreduras da organização atinge a capacidade máxima. Tente novamente mais tarde.422quandorepo_nameerepossão fornecidos juntos ou nenhum dos dois é fornecido, ou quandoreposestá vazio.
Autorizações
Credencial de usuário de serviço (prefixo: cog_)
Parâmetros de caminho
ID da organização (prefixo: org-)
"org-abc123def456"
Corpo
Corpo da requisição para iniciar uma nova varredura de código.
Commit do qual fazer checkout antes da varredura.
Esforço da varredura: 'normal' (padrão) usa um esforço de raciocínio menor do modelo com lotes de investigação maiores; 'deep' executa o pipeline completo.
normal, deep Servidor Git do repositório, se conhecido.
Quando true, a varredura é pausada para revisão pelo usuário entre a modelagem de ameaças e a investigação.
Atribua à varredura um orçamento próprio de ACU. Requer as permissões ManageAccountServiceUsers e ManageAcuLimits.
Show child attributes
Show child attributes
Onde as sessões da varredura são executadas: um rótulo de plataforma configurado para a organização (por exemplo, 'linux', 'windows', 'macos') ou o nome de um pool do outpost (BYOB), sem distinção entre maiúsculas e minúsculas; as plataformas têm prioridade quando um nome corresponde a ambos. Quando omitido, usa o padrão da organização. Valores não reconhecidos são rejeitados com um erro 400 cujo corpo lista os rótulos de plataforma e os nomes dos pools do outpost disponíveis.
128Perfil de varredura a ser aplicado à varredura.
Nome completo do repositório a ser analisado na varredura. Forneça exatamente um dos campos repo_name ou repos.
Repositórios abrangidos por uma varredura; a primeira entrada é o repositório principal da varredura. Forneça exatamente um dos campos repo_name ou repos.
200Show child attributes
Show child attributes
Tipo de varredura a executar. Quando um perfil for fornecido, deve corresponder ao tipo de varredura desse perfil. O padrão é o tipo do perfil ou 'security' para varreduras sem perfil. Tipos diferentes de 'security' exigem um perfil e são rejeitados sem ele.
security, performance, db-queries, test-coverage, dead-code, code-quality, cleanup, telemetry, accessibility, compliance, general, migration-docs Resposta
Resposta bem-sucedida
Uma única varredura de código.
Quando a varredura foi criada (segundos Unix).
Esforço da varredura: 'normal' usa um nível menor de esforço de raciocínio do modelo e lotes maiores de investigação; 'deep' executa o pipeline completo.
normal, deep Host Git do repositório, se conhecido.
Organização à qual a varredura pertence.
Perfil sob o qual a varredura foi executada, se houver.
Show child attributes
Show child attributes
Repositório principal da varredura. Varreduras com vários repositórios abrangem repositórios adicionais não listados aqui.
Identificador único da varredura.
Tipo de varredura, definido na criação.
security, performance, db-queries, test-coverage, dead-code, code-quality, cleanup, telemetry, accessibility, compliance, general, migration-docs Status da varredura: waiting, pending, running, awaiting_user_input, completed, failed ou cancelled.
waiting, pending, running, awaiting_user_input, completed, failed, cancelled URL da página da varredura no webapp do Devin.
Pool do outpost em que as sessões da varredura são executadas, se definido.
Rótulo da plataforma hospedada em que as sessões da varredura são executadas. Null quando a varredura é executada em um pool do outpost ou usa o padrão da organização.
Identidade do repositório principal qualificada pelo host (por exemplo, github.com/org/repo). Null para depósitos Perforce, que não têm servidor Git.

