Skip to content

Create a view

POST
/v1/views
curl --request POST \
--url https://api.pealboard.com/v1/views \
--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" }, "groupBy": { "kind": "project_field", "fieldNodeId": "example", "fieldName": "example", "projectId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }, "columns": [], "shared": false }'

shared: false saves it for you alone. shared: true puts it in every member’s sidebar, so it needs the admin role or above.

A board layout needs a groupBy; without one there is nothing to make columns from.

Access. Requires the member role or above (member, admin, owner). Saving a view is a change to the workspace a viewer does not make. API-key scope: views:write.

Media typeapplication/json
object
name
required
string
>= 1 characters <= 80 characters
layout

board groups by the view’s groupBy; the other two do not.

string
default: list
Allowed values: list board table
filter
object
q

Full text over title, number, label names and body.

string
repository

Repository ids. Any of them matches.

Array<string>
state
string
Allowed values: open closed all
label

Label names. An issue must carry every one of them.

Array<string>
assignee

GitHub logins, @me for the caller, or none for unassigned. Any of them matches.

Array<string>
milestone

Milestone ids, or none.

Array<string>
project

Project ids. Any of them matches.

Array<string>
type

Issue type names, or none.

Array<string>
field

Project field node id to the value it must hold, or none for not set. Every entry must match.

object
key
additional properties
string
updatedSince

An ISO 8601 instant, or a window such as -7d, -24h, -2w.

string
closedSince

The same forms as updatedSince.

string
noProjectStatus

Issues on no project, or on one whose Status field is not set.

boolean
hasPortalRequest

Issues that are a request in at least one portal.

boolean
sort
object
key
string
default: updated
Allowed values: updated created number title comments
order
string
default: desc
Allowed values: asc desc
groupBy
One of:
object
kind
required
string
Allowed values: project_field
fieldNodeId
string
fieldName

For a view saved before any project existed. Resolved when the board is run.

string
projectId

A UUID this API issued.

string format: uuid
columns

The columns the table layout shows, in order.

Array<string>
default:
shared

Shared with the workspace, so it appears for every member. A view that is not shared is visible only to you.

boolean

The view.

Media typeapplication/json
object
id
required

A UUID this API issued.

string format: uuid
name
required
string
layout
required

board groups by the view’s groupBy; the other two do not.

string
Allowed values: list board table
filter
required
object
q

Full text over title, number, label names and body.

string
repository

Repository ids. Any of them matches.

Array<string>
state
string
Allowed values: open closed all
label

Label names. An issue must carry every one of them.

Array<string>
assignee

GitHub logins, @me for the caller, or none for unassigned. Any of them matches.

Array<string>
milestone

Milestone ids, or none.

Array<string>
project

Project ids. Any of them matches.

Array<string>
type

Issue type names, or none.

Array<string>
field

Project field node id to the value it must hold, or none for not set. Every entry must match.

object
key
additional properties
string
updatedSince

An ISO 8601 instant, or a window such as -7d, -24h, -2w.

string
closedSince

The same forms as updatedSince.

string
noProjectStatus

Issues on no project, or on one whose Status field is not set.

boolean
hasPortalRequest

Issues that are a request in at least one portal.

boolean
sort
required
object
key
string
default: updated
Allowed values: updated created number title comments
order
string
default: desc
Allowed values: asc desc
groupBy
required
One of:
object
kind
required
string
Allowed values: project_field
fieldNodeId
string
fieldName

For a view saved before any project existed. Resolved when the board is run.

string
projectId

A UUID this API issued.

string format: uuid
columns
required

The columns the table layout shows, in order. Empty means the client’s own default set.

Array<string>
shared
required

Shared with the workspace. A view that is not shared is visible only to the member who owns it.

boolean
ownerMembershipId
required

Null for a shared view.

string | null format: uuid
builtIn
required

Which of the six seeded views this started as, or null for one somebody made.

string | null
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
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.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": {
"additionalProperty": "example"
},
"remedy": "example",
"requestId": "example"
}
}

Authenticated, but not permitted.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": {
"additionalProperty": "example"
},
"remedy": "example",
"requestId": "example"
}
}

No such resource, or it is not visible to you.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": {
"additionalProperty": "example"
},
"remedy": "example",
"requestId": "example"
}
}

The request conflicts with the current state.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": {
"additionalProperty": "example"
},
"remedy": "example",
"requestId": "example"
}
}

The request did not match the expected shape.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": {
"additionalProperty": "example"
},
"remedy": "example",
"requestId": "example"
}
}

Rate limited. Retry after the interval in the header.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
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.

Media typeapplication/json
object
error
required
object
code
required

A stable identifier for the kind of failure. Safe to branch on.

string
message
required

What went wrong, written for a person.

string
detail

Structured particulars, when there are any.

object
key
additional properties
remedy

What to do about it, when there is something to do.

string
requestId
required

Quote this when asking about a specific failure.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": {
"additionalProperty": "example"
},
"remedy": "example",
"requestId": "example"
}
}