Skip to content

One product, whole

GET
/v1/catalog/products/{namespace}/{name}
curl --request GET \
--url https://api.blupinta.app/v1/catalog/products/example/example \
--header 'Authorization: Bearer <token>'

A product of the catalog as a home holds it among its products: its options, sizes as expressions of them, geometry, clearances, what a house entity may drive in it, its thumbnails.

namespace
required
string
/^[a-z0-9-]+$/

The first part of the product’s id (ikea)

name
required
string
/^[a-z0-9-]+$/

The second part of the product’s id (kallax)

One product, whole

Media typeapplication/json

A product of the catalog whole: its options, sizes, geometry, as a home holds it among its products

object
id
required

Namespace/name, stable forever (“ikea/kallax”, “jal/handmade-drawers”)

string
version
required

Bumped on any change that can move or reshape an item

number
brand
string
name
required

App content, shared by every user: in each of the app’s languages (furnishing.md F5)

object
it
required
string
en
required
string
description

App content, shared by every user: in each of the app’s languages (furnishing.md F5)

object
it
required
string
en
required
string
category
required

A path in the shared taxonomy: “storage/shelving”, “lighting/pendant”, “decor/wall-art”

string
tags
required
Array<string>
mount
required
string
Allowed values: floor wall ceiling surface built-in
options
required
Array
Any of:
object
kind
required
string
Allowed value: choice
choices
required

Each with numbers the expressions read as <option>.<name> (KALLAX’s size.cols)

Array<object>
object
id
required
string
name
required

App content, shared by every user: in each of the app’s languages (furnishing.md F5)

object
it
required
string
en
required
string
params
object
key
additional properties
number
allowedIf

A rule between options (furnishing.md §3, a modular system): a value is offered only while every condition holds (BESTÅ’s 180 frame only in white)

Array<object>

Shows (or allows) an option only when another holds one of some values

object
option
required
string
in
required
Array<string | number | boolean>
default
required
string
id
required
string
name
required

App content, shared by every user: in each of the app’s languages (furnishing.md F5)

object
it
required
string
en
required
string
visibleIf

Shows (or allows) an option only when another holds one of some values

object
option
required
string
in
required
Array<string | number | boolean>
variants

Option combinations the maker sells under its own article number (a slots option’s as its slots’ choices)

Array<object>
object
options
required
object
key
additional properties
Any of:
string
article
required
string
geometry
required
Any of:
object
kind
required
string
Allowed value: builtin
generator
required
string
size
required

Width (x), height (y), depth (z) as expressions of the options, m

object
w
required
string
h
required
string
d
required
string
clearances

The space it needs in use, beside its sides (furnishing.md §8): drawers pulled out, a door’s swing, a chair

Array<object>
object
use
required

What a clearance is kept free for, named in the editor’s warnings

string
Allowed values: drawers doors seat access appliance
side
required

The side it opens out of, as the product faces: across its whole width on the front or back, its depth on a side

string
Allowed values: front back left right
depth
required

How far out, m, as an expression of the options

string
source
required

Where the measure comes from: the product sheet, a measurement, a usual allowance

string
bindings

What in it a house entity can drive

Array<object>
object
slot
required
string
kind
required
string
Allowed values: light media cover appliance sensor
media
object
thumbnails
required
Array<string>
source
required

The product sheet or the measurement it comes from

string
links
Array<object>
object
url
required
string
kind
required
string
Allowed values: product manual shop
Example
{
"mount": "floor",
"options": [
{
"kind": "choice"
}
],
"geometry": {
"kind": "builtin"
},
"clearances": [
{
"use": "drawers",
"side": "front"
}
],
"bindings": [
{
"kind": "light"
}
],
"links": [
{
"kind": "product"
}
]
}
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