Projects API Reference
List your Axe Developer Hub projects and look up a project ID programmatically using the REST API
The Projects endpoint returns the list of Axe Developer Hub projects your API key can access. Use it to discover a project's ID from its name, so you can pass that ID to the Sessions and Results API.
If you already know your project ID, you can find it in Axe Developer Hub and call the Sessions and Results API directly; you do not need this endpoint.
Authentication
All requests require an API key. Provide it using the X-API-Key header:
X-API-Key: <DEQUE_API_KEY>Find your API key in the Axe Account Portal. Choose an Axe Developer Hub API key for web or CI/CD projects, or an Axe DevTools Mobile API key for mobile projects.
Access Control
- Project members see only the projects they belong to.
- Org Admins with an active Axe Developer Hub or Axe DevTools Mobile subscription see every project in their organization of that product type, regardless of project membership.
- In both cases, the response is scoped to the API key's product: an Axe Developer Hub API key returns only Axe Developer Hub projects, and an Axe DevTools Mobile API key returns only Axe DevTools Mobile projects.
An inactive subscription returns 401 Unauthorized.
Projects Endpoint
Returns the list of projects the authenticated API key can access.
Request
- Endpoint:
GET https://axe.deque.com/api-pub/v1/results/projects - Headers (required):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Query Parameters
All query parameters are optional.
| Parameter | Description |
|---|---|
project_types |
Comma-separated list of project types to return, for example axe-devtools-watcher,axe-devtools-html. Also accepts the aliases web and mobile, which each expand to the concrete types for that product. When omitted, every project type your API key can access is returned. |
page_size |
Number of projects to return per page. Default: 30. Maximum: 100. Values above the maximum are clamped to 100. See Cursor Pagination. |
after |
Cursor value from the previous response, used to retrieve the next page. See Cursor Pagination. |
Response Body
A successful response returns a JSON array of project objects. Each project object includes the following fields:
| Field | Type | Description |
|---|---|---|
project_id |
String | Unique identifier for the project. Use this value as {project_id} when calling the Sessions endpoint. |
name |
String | The project's display name. |
selected_project_type |
String | The project's type, for example axe-devtools-watcher or axe-devtools-html. |
role |
String | Your role on the project, for example admin. |
created_at |
String | ISO 8601 UTC timestamp for when the project was created. |
last_session_created_at |
String | ISO 8601 UTC timestamp of the project's most recent session. null when the project has no sessions. |
has_git_information |
Boolean | Whether the project has associated Git metadata. |
git_url |
String | Git repository URL associated with the project. null when the project has no Git information. |
latest_session |
Object | Details of the project's most recent session, or null when the project has no sessions. To enumerate a project's sessions, use the Sessions endpoint rather than this field. |
Example Response Body
[
{
"project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "webapp-ci",
"selected_project_type": "axe-devtools-watcher",
"role": "admin",
"created_at": "2026-06-01T14:23:00.000Z",
"last_session_created_at": "2026-06-14T09:12:00.000Z",
"has_git_information": true,
"git_url": "https://github.com/example/webapp",
"latest_session": {
"session_id": "0d4a85a2-9e6f-44ef-b814-fee8412abeb0",
"created_at": "2026-06-14T09:12:00.000Z",
"git_branch": "main"
}
},
{
"project_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
"name": "design-system",
"selected_project_type": "axe-devtools-html",
"role": "admin",
"created_at": "2026-05-20T08:00:00.000Z",
"last_session_created_at": null,
"has_git_information": false,
"git_url": null,
"latest_session": null
}
]Cursor Pagination
Pagination is opt-in. A request that sends neither page_size nor after returns your complete project list in a single response, with no cursor header, exactly as if these parameters didn't exist.
To page through results instead, the Projects endpoint uses the same cursor-based pagination as the Sessions endpoint: when there are more results beyond the current page, an opaque cursor value is returned in the x-pagination-cursor response header. Pass this value as the after query parameter in your next request to retrieve the next page.
When the x-pagination-cursor header is absent from the response, you have reached the last page.
Look Up a Project ID by Name
This example uses curl and jq to find a project's ID from its name:
curl -s \
-H "Accept: application/json" \
-H "X-API-Key: $API_KEY" \
"https://axe.deque.com/api-pub/v1/results/projects" \
| jq -r '.[] | select(.name == "webapp-ci") | .project_id'Pass the returned ID to the Sessions endpoint to list that project's sessions.
Projects Endpoint Error Responses
| Status | Cause |
|---|---|
400 Bad Request |
The project_types value contains an invalid project type, the after cursor is malformed, or page_size/after was repeated in the query string. |
401 Unauthorized |
The API key is invalid, missing, or the associated subscription is inactive. |
