Edit a view
const url = 'https://api.pealboard.com/v1/views/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"example","layout":"list","filter":{"q":"example","repository":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"],"state":"open","label":["example"],"assignee":["example"],"milestone":["example"],"project":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"],"type":["example"],"field":{"additionalProperty":"example"},"updatedSince":"example","closedSince":"example","noProjectStatus":true,"hasPortalRequest":true},"sort":{"key":"updated","order":"asc","fieldNodeId":"example"},"groupBy":{"kind":"project_field","fieldNodeId":"example","fieldName":"example","projectId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"},"columns":["example"],"shared":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.pealboard.com/v1/views/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "example", "layout": "list", "filter": { "q": "example", "repository": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "state": "open", "label": [ "example" ], "assignee": [ "example" ], "milestone": [ "example" ], "project": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "type": [ "example" ], "field": { "additionalProperty": "example" }, "updatedSince": "example", "closedSince": "example", "noProjectStatus": true, "hasPortalRequest": true }, "sort": { "key": "updated", "order": "asc", "fieldNodeId": "example" }, "groupBy": { "kind": "project_field", "fieldNodeId": "example", "fieldName": "example", "projectId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }, "columns": [ "example" ], "shared": true }'Only the fields sent are changed. A shared view may be edited by an admin or by the member who made it; a personal view only by its owner.
Changing shared moves the view between the workspace and the person: sharing one needs the admin role, and unsharing one gives it to the member doing the unsharing.
Access. Requires the member role or above (member, admin, owner). Editing a view is a change to the workspace a viewer does not make. API-key scope: views:write.
Billing. Refused with 402 while the workspace’s billing has lapsed. Reads continue and nothing is deleted.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”From GET /v1/views.
From GET /v1/views.
Request Body
Section titled “Request Body”object
board groups by the view’s groupBy; the other two do not.
object
Full text over title, number, label names and body.
Repository ids. Any of them matches.
Label names. An issue must carry every one of them.
GitHub logins, @me for the caller, or none for unassigned. Any of them matches.
Milestone ids, or none.
Project ids. Any of them matches.
Issue type names, or none.
Project field node id to the value it must hold, or none for not set. Every entry must match.
The value is matched against the word on the card, and against an option id or an iteration id for a caller that already asked GitHub. A number is compared as a number, so 3 matches a stored 3.0. Five operators are written into the value, because the parameter’s name is already the field’s node id: >=, >, <=, <, and a..b for an inclusive range. A comparison operand has to be a number or a date as YYYY-MM-DD; anything else is a 422 rather than a refusal from Postgres. A date comparison also matches an iteration, by its start date.
object
An ISO 8601 instant, or a window such as -7d, -24h, -2w.
The same forms as updatedSince.
Issues on no project, or on one whose Status field is not set.
Issues that are a request in at least one portal.
object
The project field to order by, when key is field. A number sorts numerically, a date and an iteration chronologically, a single select in the project’s own option order, and a text field alphabetically. An issue with no value for the field sorts last, whichever direction is asked for. A node id that names no field falls back to the default sort, so a view saved against a field somebody has since deleted still opens.
object
Any kind of project field. A single select’s columns are its options, an iteration field’s are its iterations, a date’s are months, and a number’s or a text field’s are the distinct values this board holds.
For a view saved before any project existed. Resolved when the board is run.
A UUID this API issued.
object
Example
area:object
object
object
Responses
Section titled “Responses”The view.
object
A UUID this API issued.
board groups by the view’s groupBy; the other two do not.
object
Full text over title, number, label names and body.
Repository ids. Any of them matches.
Label names. An issue must carry every one of them.
GitHub logins, @me for the caller, or none for unassigned. Any of them matches.
Milestone ids, or none.
Project ids. Any of them matches.
Issue type names, or none.
Project field node id to the value it must hold, or none for not set. Every entry must match.
The value is matched against the word on the card, and against an option id or an iteration id for a caller that already asked GitHub. A number is compared as a number, so 3 matches a stored 3.0. Five operators are written into the value, because the parameter’s name is already the field’s node id: >=, >, <=, <, and a..b for an inclusive range. A comparison operand has to be a number or a date as YYYY-MM-DD; anything else is a 422 rather than a refusal from Postgres. A date comparison also matches an iteration, by its start date.
object
An ISO 8601 instant, or a window such as -7d, -24h, -2w.
The same forms as updatedSince.
Issues on no project, or on one whose Status field is not set.
Issues that are a request in at least one portal.
object
The project field to order by, when key is field. A number sorts numerically, a date and an iteration chronologically, a single select in the project’s own option order, and a text field alphabetically. An issue with no value for the field sorts last, whichever direction is asked for. A node id that names no field falls back to the default sort, so a view saved against a field somebody has since deleted still opens.
object
Any kind of project field. A single select’s columns are its options, an iteration field’s are its iterations, a date’s are months, and a number’s or a text field’s are the distinct values this board holds.
For a view saved before any project existed. Resolved when the board is run.
A UUID this API issued.
object
object
object
object
The columns the table layout shows, in order. Empty means the client’s own default set.
Shared with the workspace. A view that is not shared is visible only to the member who owns it.
Null for a shared view.
Which of the six seeded views this started as, or null for one somebody made.
Example
{ "id": "3c9a1f52-7b8e-4d21-9f03-6a5b4c3d2e1f", "name": "Needs triage", "layout": "list", "filter": { "state": "open", "noProjectStatus": true }, "sort": { "key": "created", "order": "desc" }, "groupBy": null, "columns": [], "shared": true, "ownerMembershipId": null, "builtIn": "needs_triage", "createdAt": "2026-09-09T10:00:00.000Z", "updatedAt": "2026-09-09T10:00:00.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" }}The workspace’s billing has lapsed, so writes are refused.
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" }}