Edit a project
const url = 'https://api.pealboard.com/v1/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"title":"example","shortDescription":"example","public":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/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "title": "example", "shortDescription": "example", "public": true }'Only the fields sent are changed. A description can be changed but not removed — GitHub takes a blank one, keeps what it had and answers success, so Pealboard refuses it rather than reporting a write that did not happen. Remove it in the project’s own settings on GitHub.
The Status options are not editable here. GitHub replaces the whole option set and issues new ids, so renaming one after cards are on it is a decision about the cards — and that is GitHub’s own board to make it on.
public is refused with 403 whenever Pealboard is writing as the App, which is every organization installation: GitHub does not let an App change a project’s visibility. A value that matches what the project already is changes nothing and is accepted.
On a personal account, editing is refused with 403 too, before anything reaches GitHub: neither the App nor your own linked GitHub account can change a project there, for the same reason neither can create one. Edit it on GitHub directly; Pealboard picks up the change on the next sync.
Access. Requires the member role or above (member, admin, owner). Renaming a project renames the customer’s GitHub project. API-key scope: projects: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/projects.
From GET /v1/projects.
Request Body
Section titled “Request Body”object
Changed, never emptied: GitHub accepts a blank description, keeps the old one and reports success, so a blank one is refused here.
Examplegenerated
{ "title": "example", "shortDescription": "example", "public": true}Responses
Section titled “Responses”The project.
object
A UUID this API issued.
The project on GitHub.
object
A UUID this API issued.
What every field value is keyed by. Survives a rename.
GitHub’s ProjectV2FieldType: TEXT, SINGLE_SELECT, NUMBER, DATE, ITERATION, and the rest.
In the order the project shows them. Null unless the field is a single select.
object
True when the field is an organization issue field linked into this project.
Examplegenerated
{ "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "nodeId": "example", "number": 1, "title": "example", "shortDescription": "example", "ownerLogin": "example", "public": true, "closed": true, "url": "https://example.com", "fields": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "nodeId": "example", "name": "example", "dataType": "example", "options": [ { "id": "example", "name": "example", "color": "example", "description": "example" } ], "isIssueField": true } ], "itemCount": 1, "syncedAt": "2026-04-15T12:00:00Z"}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" }}