Skip to content

Submit a request

POST
/portal/requests
curl --request POST \
--url https://api.pealboard.com/portal/requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "requestTypeId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "title": "example", "values": {}, "attachmentIds": [], "visibility": "private", "turnstileToken": "example" }'

Creates an issue in the repository the request type names, with the form’s answers as headed sections and an attribution line naming the requester and their company — never their email address. On an open portal a customer’s first request waits in a hold queue and reaches GitHub only when a member releases it. Send Idempotency-Key and a retry of the same submission returns the same request rather than creating a second one.

Access. Requires a signed-in customer of this portal. Submitting a request is what a portal is for, and every signed-in customer may do it.

Media typeapplication/json
object
requestTypeId
required

A UUID this API issued.

string format: uuid
title
required

The issue’s title, and the line the customer sees in their list.

string
>= 3 characters <= 200 characters
values

Keyed by the form field’s key.

object
key
additional properties
Any of:
string
attachmentIds
Array<string>
default: <= 10 items
visibility

Only private and public may be chosen by a customer, and only up to the portal’s default. A company-visible request is a member’s decision.

string
Allowed values: private company public
turnstileToken

Required on an open portal, where anybody may sign in.

string

The request.

Media typeapplication/json
object
reference
required
string
title
required
string
status
required

Derived from the issue at read time, never stored.

object
id
required

The stable identifier a client filters on. The word is in status.label.

string
Allowed values: open planned in_progress waiting_on_you completed merged closed
label
required

The customer-facing word. Seven, fixed, and never GitHub’s own vocabulary.

string
Allowed values: Open Planned In progress Waiting on you Completed Merged Closed
visibility
required

Private: the requester and the workspace. company: everyone in the requester’s company. public: everyone in the portal. A manager sees every request in their company whatever this says.

string
Allowed values: private company public
requestType
required
string | null
submittedBy
required

The display name. Never an email address.

string
company
required
string | null
voteCount
required
integer
viewerVoted
required
boolean
viewerSubscribed
required
boolean
unread
required

Something has happened on this request since this customer last opened it.

boolean
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
Example
{
"status": {
"id": "open",
"label": "Open"
},
"visibility": "private"
}

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"
}
}