curl
curl "https://first-signal-api.fly.dev/v1/agents/6f1d2c3b-4a5e-4f60-8b7a-9c0d1e2f3a4b/coverage" \
-H "Authorization: Bearer $SIGNAL_API_KEY"import requests
url = "https://first-signal-api.fly.dev/v1/agents/{agentId}/coverage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://first-signal-api.fly.dev/v1/agents/{agentId}/coverage', 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://first-signal-api.fly.dev/v1/agents/{agentId}/coverage",
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://first-signal-api.fly.dev/v1/agents/{agentId}/coverage"
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://first-signal-api.fly.dev/v1/agents/{agentId}/coverage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://first-signal-api.fly.dev/v1/agents/{agentId}/coverage")
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{
"object": "coverage",
"picks": [
{
"callId": "3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"issueKey": "<string>",
"cells": [
"<string>"
],
"existingTestId": "3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
}
],
"coverage": [
{
"kind": "sub_use_case",
"key": "<string>",
"label": "<string>",
"supported": true,
"support": "<string>",
"lane": "hearing",
"calls": 123,
"wanted": 123,
"picked": 123,
"callIds": [
"3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
],
"reserveCallIds": [
"3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
],
"status": "covered",
"reason": "<string>"
}
],
"briefLines": [
{
"section": "intent",
"key": "<string>",
"text": "<string>",
"calls": 123,
"probe": true,
"reason": "<string>"
}
],
"excluded": {
"silent": 123,
"scripted": 123,
"unansweredTools": 123,
"outsideWindow": 123
},
"retire": [
{
"testId": "3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"reason": "<string>"
}
],
"totals": {
"tests": 123,
"newTests": 123,
"supportedCovered": 123,
"supportedCells": 123,
"unsupportedCovered": 123,
"unsupportedCells": 123
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}Tests
Get test coverage
Signal’s test plan and gaps: which calls it would test and why, coverage cells it could not fill, brief lines that get a probe, and tests it would retire. Reads only.
GET
/
v1
/
agents
/
{agentId}
/
coverage
curl
curl "https://first-signal-api.fly.dev/v1/agents/6f1d2c3b-4a5e-4f60-8b7a-9c0d1e2f3a4b/coverage" \
-H "Authorization: Bearer $SIGNAL_API_KEY"import requests
url = "https://first-signal-api.fly.dev/v1/agents/{agentId}/coverage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://first-signal-api.fly.dev/v1/agents/{agentId}/coverage', 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://first-signal-api.fly.dev/v1/agents/{agentId}/coverage",
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://first-signal-api.fly.dev/v1/agents/{agentId}/coverage"
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://first-signal-api.fly.dev/v1/agents/{agentId}/coverage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://first-signal-api.fly.dev/v1/agents/{agentId}/coverage")
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{
"object": "coverage",
"picks": [
{
"callId": "3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"issueKey": "<string>",
"cells": [
"<string>"
],
"existingTestId": "3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
}
],
"coverage": [
{
"kind": "sub_use_case",
"key": "<string>",
"label": "<string>",
"supported": true,
"support": "<string>",
"lane": "hearing",
"calls": 123,
"wanted": 123,
"picked": 123,
"callIds": [
"3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
],
"reserveCallIds": [
"3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
],
"status": "covered",
"reason": "<string>"
}
],
"briefLines": [
{
"section": "intent",
"key": "<string>",
"text": "<string>",
"calls": 123,
"probe": true,
"reason": "<string>"
}
],
"excluded": {
"silent": 123,
"scripted": 123,
"unansweredTools": 123,
"outsideWindow": 123
},
"retire": [
{
"testId": "3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"reason": "<string>"
}
],
"totals": {
"tests": 123,
"newTests": 123,
"supportedCovered": 123,
"supportedCells": 123,
"unsupportedCovered": 123,
"unsupportedCells": 123
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}{
"error": {
"type": "not_found_error",
"code": "agent_not_found",
"message": "Agent not found.",
"param": null,
"requestId": "req_8c1f0e2b4a6d9e3f7a5c1b0d"
}
}Authorizations
An API key (sig_...), or a session token from the web app.
Path Parameters
The agent's id.
Pattern:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$Example:
"3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f"
Response
The plan.
Available options:
coverage The calls Signal would turn into tests.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Calls left out of the plan, by why.
Show child attributes
Show child attributes
Tests the plan would retire.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?