Get an error signature
const url = 'https://app.squally.dev/api/v1/projects/example/errors/example?days=7';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://app.squally.dev/api/v1/projects/example/errors/example?days=7' \ --header 'Authorization: Bearer <token>'One error signature: its counts, the tests it hits and the runs it occurred in. A signature quiet in the period is answered over everything still stored (windowEmpty: true). Moderate.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”A project id from GET /projects.
An error signature fingerprint from GET /projects/{projectId}/errors.
Query Parameters
Section titled “Query Parameters”The period, in days, ending now. Must not exceed the plan’s retention (Standard 60, Pro 90 days); a longer period is refused with 400 invalid_period rather than answered with less data.
Responses
Section titled “ Responses ”OK
object
object
object
object
First seen in what is still stored: the earliest occurrence the plan’s retention has kept, NOT bounded by the requested period. ISO-8601.
True when the signature did not occur in the requested period; the figures then cover everything still stored.
Examplegenerated
{ "project": { "id": "example", "name": "example" }, "window": { "days": 1, "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z" }, "signature": { "fingerprint": "example", "title": "example", "message": "example", "category": "example", "filePath": "example", "fileCount": 1, "testCount": 1, "testNames": [ "example" ], "occurrenceCount": 1, "runCount": 1, "firstSeen": "2026-04-15T12:00:00Z", "lastSeen": "2026-04-15T12:00:00Z", "isNew": true }, "windowEmpty": true, "tests": [ { "testName": "example", "filePath": "example", "occurrenceCount": 1 } ], "runs": [ { "runId": "example", "runNumber": 1, "branch": "example", "startedAt": "2026-04-15T12:00:00Z", "testName": "example", "filePath": "example", "attempts": 1, "occurrences": 1, "finalStatus": "example" } ]}Headers
Section titled “Headers”When the read key expires (ISO-8601). Present only from 7 days before expiry.
Error: invalid_period
object
A sentence for a human. May be reworded.
Stable slug - match on this, not on the sentence.
Example
{ "code": "invalid_period"}Error: invalid_key, key_expired, key_revoked, missing_key, wrong_key_type
object
A sentence for a human. May be reworded.
Stable slug - match on this, not on the sentence.
Example
{ "code": "invalid_key"}Error: tier_too_low
object
A sentence for a human. May be reworded.
Stable slug - match on this, not on the sentence.
Example
{ "code": "tier_too_low"}Error: error_not_found, project_not_found
object
A sentence for a human. May be reworded.
Stable slug - match on this, not on the sentence.
Example
{ "code": "error_not_found"}Rate limited by the edge firewall. No JSON body and no Retry-After - back off for at least 60 s.
Error: internal_error
object
A sentence for a human. May be reworded.
Stable slug - match on this, not on the sentence.
Example
{ "code": "internal_error"}