List the organization's projects
GET
/projects
const url = 'https://app.squally.dev/api/v1/projects';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 \ --header 'Authorization: Bearer <token>'The projects of the key’s organization, oldest first. Start here: every other route takes a project id from this list. Cheap.
Authorizations
Section titled “Authorizations”Responses
Section titled “ Responses ”OK
Media typeapplication/json
object
projects
required
Array<object>
object
id
required
string
name
required
string
stableBranch
required
string
createdAt
required
string format: date-time
Examplegenerated
{ "projects": [ { "id": "example", "name": "example", "stableBranch": "example", "createdAt": "2026-04-15T12:00:00Z" } ]}Headers
Section titled “Headers”Squally-Key-Expires-At
string format: date-time
When the read key expires (ISO-8601). Present only from 7 days before expiry.
Error: invalid_key, key_expired, key_revoked, missing_key, wrong_key_type
Media typeapplication/json
object
error
required
A sentence for a human. May be reworded.
string
code
required
Stable slug - match on this, not on the sentence.
string
code
required
Example
{ "code": "invalid_key"}Error: tier_too_low
Media typeapplication/json
object
error
required
A sentence for a human. May be reworded.
string
code
required
Stable slug - match on this, not on the sentence.
string
code
required
Example
{ "code": "tier_too_low"}Rate limited by the edge firewall. No JSON body and no Retry-After - back off for at least 60 s.
Error: internal_error
Media typeapplication/json
object
error
required
A sentence for a human. May be reworded.
string
code
required
Stable slug - match on this, not on the sentence.
string
code
required
Example
{ "code": "internal_error"}