List issues across every repository
const url = 'https://api.pealboard.com/v1/issues?cursor=MDAwMS0y&limit=50&q=board%20columns%20-duplicate&state=open&updated_since=-7d&sort=updated&order=asc';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://api.pealboard.com/v1/issues?cursor=MDAwMS0y&limit=50&q=board%20columns%20-duplicate&state=open&updated_since=-7d&sort=updated&order=asc' \ --header 'Authorization: Bearer <token>'Issues from every synced repository in the workspace, from Pealboard’s cache of GitHub. No GitHub request is made.
A project field is filtered on with a parameter named field:<fieldNodeId>, whose value is the value the field must hold, or none for a field that is not set. Field node ids come from GET /v1/projects/{projectId}. For example, ?field:PVTSSF_lADO...=In progress.
Ordering is by the sort key and then by id, so a cursor never repeats or skips a row.
Access. Requires the viewer role or above (viewer, member, admin, owner). Every member reads the issues of the repositories their workspace has connected. API-key scope: issues:read.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”The nextCursor from the previous page, unchanged. Omit it to start at the beginning.
Example
MDAwMS0yThe nextCursor from the previous page, unchanged. Omit it to start at the beginning.
How many rows to return. At most 100.
How many rows to return. At most 100.
Full text across every synced repository, over title, issue number, label names and body. Accepts what a person types, including quoted phrases, or, and a leading - to exclude.
Example
board columns -duplicateFull text across every synced repository, over title, issue number, label names and body. Accepts what a person types, including quoted phrases, or, and a leading - to exclude.
A repository id from GET /v1/github/repositories. Repeat for several.
Defaults to every state.
Defaults to every state.
A label name. Repeat for several; an issue must carry every one.
A GitHub login, @me for the calling person, or none for unassigned. Repeat for several; any of them matches.
A project id from GET /v1/projects. Repeat for several.
An ISO 8601 instant, or a window such as -7d, -24h, -2w.
Example
-7dAn ISO 8601 instant, or a window such as -7d, -24h, -2w.
Responses
Section titled “Responses”One page of issues.
object
object
A UUID this API issued.
GitHub’s own word for whether the issue is open or closed.
Why the issue is in this state. Null while it is open. duplicate is what makes a portal show a request as Merged.
object
A UUID this API issued.
object
GitHub’s numeric user id.
User, Bot or Organization.
object
GitHub’s numeric user id.
User, Bot or Organization.
object
object
A UUID this API issued.
A UUID this API issued.
The organization issue type, when the organization uses them.
object
object
object
Pass this to the project item routes.
A UUID this API issued.
Keyed by the field’s node id, which is what GitHub identifies it by.
object
object
object
object
object
object
object
Empty for an issue no portal knows about, which is most of them.
A portal request that points at this issue. One issue maps to at most one request per portal.
object
A UUID this API issued.
A UUID this API issued.
Lowercase letters, digits and hyphens.
The portal-local request number.
The issue on GitHub.
When Pealboard last read this issue from GitHub.
Pass this back as cursor for the next page. Null on the last page.
Example
{ "data": [ { "id": "8f1c2b3e-0a4d-4e6f-9c11-2d3e4f5a6b7c", "nodeId": "I_kwDOAbc123", "number": 412, "title": "Board columns lose their order after a drag", "body": "Dragging a card to the last column reorders every other column.", "state": "open", "stateReason": null, "repository": { "id": "1b2c3d4e-5f60-4718-8293-a4b5c6d7e8f9", "nodeId": "R_kgDOAbc123", "fullName": "mersoft-corp/pealboard-api", "ownerLogin": "mersoft-corp", "name": "pealboard-api", "private": false }, "author": { "id": 4891, "login": "jdoe", "avatarUrl": null, "type": "User" }, "assignees": [ { "id": 5120, "login": "asmith", "avatarUrl": null, "type": "User" } ], "labels": [ { "nodeId": "LA_kwDOAbc", "name": "bug", "color": "d73a4a" } ], "milestone": null, "issueType": null, "subIssues": null, "projectItems": [], "requests": [], "commentsCount": 3, "locked": false, "htmlUrl": "https://github.com/mersoft-corp/pealboard-api/issues/412", "createdAt": "2026-09-01T09:14:00.000Z", "updatedAt": "2026-09-08T16:02:11.000Z", "closedAt": null, "syncedAt": "2026-09-08T16:02:14.000Z" } ]}No valid credentials.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}Authenticated, but not permitted.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}No such resource, or it is not visible to you.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}The request conflicts with the current state.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}The request did not match the expected shape.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}Rate limited. Retry after the interval in the header.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}GitHub or another dependency refused or did not answer. Nothing in the workspace changed.
object
object
A stable identifier for the kind of failure. Safe to branch on.
What went wrong, written for a person.
Structured particulars, when there are any.
object
What to do about it, when there is something to do.
Quote this when asking about a specific failure.
Examplegenerated
{ "error": { "code": "example", "message": "example", "detail": { "additionalProperty": "example" }, "remedy": "example", "requestId": "example" }}