curl --request GET \
--url https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview \
--header 'Authorization: Bearer <token>'import requests
url = "https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview', 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://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"summary": {
"jobId": "<string>",
"workflowType": "<string>",
"status": "SEMGREP_WORKFLOW_RUN_STATUS_SUBMITTED",
"deploymentId": "<string>",
"repoId": "<string>",
"gitRef": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"totalFindings": 123,
"eventSource": "<string>",
"repoUrl": "<string>",
"totalCostCredits": 123,
"triggerSource": "<string>"
},
"stepSkeleton": {
"schemaVersion": "<string>",
"steps": [
{
"stepId": "<string>",
"name": "<string>",
"displayName": "<string>",
"description": "<string>",
"status": "WORKFLOW_STEP_STATUS_PENDING",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"costUsd": 123,
"taskCount": 123,
"tasksCompleted": 123,
"tasksFailed": 123,
"taskIds": [
"<string>"
],
"costCredits": 123
}
],
"tasks": [
{
"taskId": "<string>",
"stepId": "<string>",
"displayName": "<string>",
"status": "WORKFLOW_STEP_STATUS_PENDING",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"attemptCount": 123,
"latestAttemptIndex": 123,
"logicalPath": "<string>",
"branchKey": "<string>",
"foreachIndex": 123,
"foreachValuePreview": "<string>",
"upstreamTaskIds": [
"<string>"
],
"attempts": [
{
"attemptIndex": 123,
"status": "WORKFLOW_STEP_STATUS_PENDING",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"errorSummary": "<string>"
}
]
}
]
},
"reportSummary": {
"repository": "<string>",
"commit": "<string>",
"totalFindings": 123,
"vulnerableFindings": 123,
"bySeverity": {},
"findings": [
{
"file": "<string>",
"startLine": 123,
"endLine": 123,
"severity": "<string>",
"reasoning": "<string>"
}
]
},
"metadata": {
"jobName": "<string>",
"workflowType": "<string>",
"deploymentId": "<string>",
"repoId": "<string>",
"repoName": "<string>",
"gitRef": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"status": "<string>",
"prId": "<string>",
"repoUrl": "<string>",
"repoScmType": "<string>"
}
}Get workflow job overview
Returns run-level metadata and a registry-derived step skeleton for a workflow job, without listing run artifacts — a fast first paint. Pair with GetWorkflowJobGraph to stream live step/task status separately.
curl --request GET \
--url https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview \
--header 'Authorization: Bearer <token>'import requests
url = "https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview', 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://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://semgrep.dev/api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"summary": {
"jobId": "<string>",
"workflowType": "<string>",
"status": "SEMGREP_WORKFLOW_RUN_STATUS_SUBMITTED",
"deploymentId": "<string>",
"repoId": "<string>",
"gitRef": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"totalFindings": 123,
"eventSource": "<string>",
"repoUrl": "<string>",
"totalCostCredits": 123,
"triggerSource": "<string>"
},
"stepSkeleton": {
"schemaVersion": "<string>",
"steps": [
{
"stepId": "<string>",
"name": "<string>",
"displayName": "<string>",
"description": "<string>",
"status": "WORKFLOW_STEP_STATUS_PENDING",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"costUsd": 123,
"taskCount": 123,
"tasksCompleted": 123,
"tasksFailed": 123,
"taskIds": [
"<string>"
],
"costCredits": 123
}
],
"tasks": [
{
"taskId": "<string>",
"stepId": "<string>",
"displayName": "<string>",
"status": "WORKFLOW_STEP_STATUS_PENDING",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"attemptCount": 123,
"latestAttemptIndex": 123,
"logicalPath": "<string>",
"branchKey": "<string>",
"foreachIndex": 123,
"foreachValuePreview": "<string>",
"upstreamTaskIds": [
"<string>"
],
"attempts": [
{
"attemptIndex": 123,
"status": "WORKFLOW_STEP_STATUS_PENDING",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"errorSummary": "<string>"
}
]
}
]
},
"reportSummary": {
"repository": "<string>",
"commit": "<string>",
"totalFindings": 123,
"vulnerableFindings": 123,
"bySeverity": {},
"findings": [
{
"file": "<string>",
"startLine": 123,
"endLine": 123,
"severity": "<string>",
"reasoning": "<string>"
}
]
},
"metadata": {
"jobName": "<string>",
"workflowType": "<string>",
"deploymentId": "<string>",
"repoId": "<string>",
"repoName": "<string>",
"gitRef": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"status": "<string>",
"prId": "<string>",
"repoUrl": "<string>",
"repoScmType": "<string>"
}
}Authorizations
Get access to data with your API token. Example header:
Authorization: Bearer 2991e2fb4b540fe75b8f90677b0b892b6314e4961cb001fe6eb452eee248a628
The token can be provisioned from the Tokens section in your Settings, and requires explicitly enabling Web API access.
Path Parameters
The unique numerical identifier of the deployment. Can be found via the Deployments Service or in your Settings in the web UI.
"1234"
The unique identifier of the workflow job.
Response
OK
Show child attributes
Show child attributes
Registry-derived step skeleton: every step in topological order, all PENDING, with no tasks. Built from the published workflow graph without listing any run artifacts in S3, so it returns immediately for a fast first paint. Live per-step/task status comes from GetWorkflowJobGraph. Empty when the workflow has no published static graph.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?