Edit up to fifty issues
const url = 'https://api.pealboard.com/v1/issues/bulk';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"issueIds":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"],"change":{"labels":["example"],"assignees":["example"],"milestoneId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","state":"open","stateReason":"completed","field":{"projectId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","fieldNodeId":"example","value":{"optionId":"example","optionName":"example","text":"example","number":1,"date":"2026-04-15","iterationId":"example","optionIds":["example"]}}}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.pealboard.com/v1/issues/bulk \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "issueIds": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "change": { "labels": [ "example" ], "assignees": [ "example" ], "milestoneId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "state": "open", "stateReason": "completed", "field": { "projectId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "fieldNodeId": "example", "value": { "optionId": "example", "optionName": "example", "text": "example", "number": 1, "date": "2026-04-15", "iterationId": "example", "optionIds": [ "example" ] } } } }'Applies one change to every issue named. Each issue is a separate GitHub write, serialised through the workspace’s installation limiter so a bulk edit cannot race itself into a secondary rate limit.
Partial success is the normal outcome and is reported as a 200. The response lists every id with what happened to it; an issue in an archived repository or one GitHub refused fails on its own without stopping the rest. Read results, not the status code.
Access. Requires the member role or above (member, admin, owner). Editing many issues at once is editing issues, and is held to the same role. API-key scope: issues:write.
Authorizations
Section titled “Authorizations”Request Body
Section titled “Request Body”object
At most fifty, because each one is a GitHub write.
Send exactly one kind of change.
object
Replaces the label set on every issue named.
Replaces the assignees. GitHub drops anybody without repository access.
Null clears the milestone. A milestone belongs to one repository.
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.
Sets one project field on every issue that is an item of that project.
object
A UUID this API issued.
Send exactly one key. Send null in place of the whole object to clear the field. Assignees, Labels, Milestone and Repository cannot be set this way — GitHub requires those to be changed on the issue itself.
object
A single-select option id.
A single-select option by name, matched case-insensitively.
YYYY-MM-DD.
A multi-select field’s options.
Responses
Section titled “Responses”What happened to each issue.
object
object
A UUID this API issued.
Null when it succeeded.
object
Examplegenerated
{ "results": [ { "issueId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "ok": true, "error": { "code": "example", "message": "example" } } ], "succeeded": 1, "failed": 1}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" }}