Skip to content

The project’s threads

GET
/v1/projects/{projectId}/threads
curl --request GET \
--url https://api.blupinta.app/v1/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/threads \
--header 'Authorization: Bearer <token>'

Every thread pinned on the project’s plans, with its messages, oldest first.

projectId
required
string format: uuid

One of the projects the person chose when connecting the app

The project’s threads

Media typeapplication/json
object
rows
required
Array<object>

A conversation pinned on a plan

object
id
required
string
planId
required

The plan it is on, by the home’s id

string
anchor
required

Where a thread is pinned: on an element of a plan (by its kind and id), at a point of the plan’s sheet

object
ref

The element, when it is on one: { kind: 'wall', id: 'north' }

object
kind
required
string
id
required
string
at
required

The point, in the plan’s sheet units

array
>= 2 items <= 2 items
resolvedAt
required

When it was marked resolved; null while open

string | null
createdAt
required
string
comments
required

Its messages, oldest first

Array<object>

A message in a thread

object
id
required
string
authorName
required

Who wrote it: their name, or their address when they gave none; null once their account is gone

string | null
body
required
string
appName
required

The app that wrote it through /v1, as people read its name; null when written in the editor

string | null
editedAt
required

When it was last changed, ISO 8601; null when never

string | null
createdAt
required
string
next
required

Where the next page starts; null on the last page

string | null
Examplegenerated
{
"rows": [
{
"id": "example",
"planId": "example",
"anchor": {
"ref": {
"kind": "example",
"id": "example"
},
"at": [
"example"
]
},
"resolvedAt": "example",
"createdAt": "example",
"comments": [
{
"id": "example",
"authorName": "example",
"body": "example",
"appName": "example",
"editedAt": "example",
"createdAt": "example"
}
]
}
],
"next": "example"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

unauthenticated: No valid access token for this API

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

forbidden: The token lacks the scope this operation needs

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

not_found: Nothing there, or nothing this token may read

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

rate_limited: Too many requests: wait as long as Retry-After says

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

Retry-After
integer

Seconds to wait before asking again

server_error: Something failed on Blupinta’s side: quote errorId when asking for help

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again