Version
GET

List a project's research

/v1/projects/{project}/research in the Research API.

curl https://api.example.test/v1/projects/$PROJECT_ID/research \  -H "Authorization: Bearer $TOKEN"

Every run, newest first, each with where it stands, how many notes it wrote and suggestions it left, which provider and model answered, who asked, when, and the notes themselves: topic, summary as sanitised HTML and the sources cited.

GET
/v1/projects/{project}/research

Requires ability

The token must hold this ability, or the call is refused with 403.

Run the same action from an agent, behind the same ability.

Authorization

bearerToken
AuthorizationBearer <token>

A personal access token minted in the app under Account Settings, then API Tokens, sent as Authorization: Bearer zg_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team, and optionally to one project, at mint time.

In: header

Path Parameters

project*string

The project.

Formatuuid

Responses

200OK

Array of ResearchRunResource

401Unauthorized

The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (a zg_test_ token on production).

403Forbidden

The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who registered a row answers FORBIDDEN with the same status, and says so in its own description. On this endpoint: FORBIDDEN: when the token is a client guest's, or the holder's role on the project does not carry import:view-any.

404Not found

An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred. On this endpoint: RESOURCE_NOT_FOUND: when the project is hidden from the token or missing.

429Too many requests

The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.

How is this guide?

Last updated on