Skip to content

The last version saved

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

The last saved version of the project with its home. It carries an ETag: send it back in If-None-Match and an unchanged home answers 304 with no body. A project with no version saved yet answers not_found.

projectId
required
string format: uuid

One of the projects the person chose when connecting the app

The last version saved

Media typeapplication/json

A saved version with its home

object
home
required

The home, in Blupinta’s home format at the version its schema field names. Its schema: https://blupinta.app/schema/home-6.json

object
files
required

The files of the project the home names (its drawings’ images, a floor’s photo), each read by its sha256

Array<object>

A file of a project, as uploaded

object
sha256
required

Its content’s hash: how a home names it (a drawing’s src, a floor’s image)

string
contentType
required
string
Allowed values: image/png image/jpeg image/webp application/pdf
size
required

In bytes

integer
name
required

Its name, as uploaded

string
createdAt
required

When it was first uploaded, ISO 8601

string
number
required

The version’s number, from 1, never reused

integer
>= 1
message
required

What its author wrote when saving it

string
authorName
required

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

string | null
restoredFrom
required
Any of:
integer
createdAt
required

When it was saved, ISO 8601

string
Example
{
"files": [
{
"contentType": "image/png"
}
]
}
ETag
string

Send it back in If-None-Match

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

Unchanged since the ETag sent in If-None-Match

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