API reference
Stock Formats
The Stock Formats API manages the sheet formats your shop buys: list them, fetch any version, add, edit, and retire your own, and hide or show standard ones.
The Stock Formats API manages the sheet formats your shop buys: list them, fetch any version, add, edit, and retire your own, and hide or show standard ones.
Auto-generated from the public OpenAPI spec — this page never drifts from the running API. Base URL
https://api.arcnm.io. Authenticate with theX-API-Keyheader (see Authentication).
List Stock Formats
GET /api/v1/stock-formats
The stock formats your organization prices with, its own first.
That is every format of your own plus each standard format you have
not hidden. Every row says in resolution what calculations do with it.
The response is a plain array, so the page position travels in the
Link (RFC 8288) and X-Next-Cursor / X-Has-More response headers.
Paginated. Pass
cursor(from the previous response) to fetch the next page;limitcaps the page size.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
kind |
query | sheet | plate | bar | tube |
no | Which purchased stock form to list: sheet, plate, bar or tube. One kind per list. |
include_suppressed |
query | boolean | no | Also list the standard formats your organization has hidden, marked suppressed. Off by default, so the list is exactly the formats calculations price with. |
at |
query | string | no | Read the list as it stood on this date (YYYY-MM-DD): the formats a calculation dated then prices with. Defaults to today (UTC). |
cursor |
query | string | no | Opaque position token from the previous page's next_cursor (or the Link / X-Next-Cursor response header). Omit it for the first page. Keep every other query parameter identical for the whole walk — a cursor replayed against different filters is rejected. |
limit |
query | integer | no | Maximum rows to return in one page. |
offset |
query | integer | no | Rows to skip. Superseded by cursor, which is stable under concurrent writes; kept for existing integrations. Bounded — past the cap, page with cursor. |
Request
curl -X GET https://api.arcnm.io/api/v1/stock-formats \
-H "X-API-Key: $ARCNM_API_KEY"
import requests
resp = requests.get(
"https://api.arcnm.io/api/v1/stock-formats",
headers={"X-API-Key": "YOUR_API_KEY"},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats", {
method: "GET",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
},
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
200 |
Successful Response |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Create Stock Format
POST /api/v1/stock-formats
Add a format your shop buys ("GF 3000 × 1500", or a 6 m bar).
Calculations price with it from today on, beside the standard formats
of its kind you have not hidden. Each kind states its own dimensions —
see kind.
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
diameter_mm |
number | no | |
gauge_max_mm |
number | no | |
gauge_min_mm |
number | no | |
key |
string | yes | A short identifier of lowercase letters, digits, - and _, starting with a letter or digit — unique among your current formats, and kept by every later version of this one. |
kind |
sheet | plate | bar | tube |
no | Which purchased stock form this is. A sheet states length_mm and width_mm; a plate adds thickness_mm to its largest size; a bar states length_mm and, optionally, diameter_mm; a tube states length_mm, diameter_mm and wall_mm. |
label |
string | yes | The format's name, e.g. GF 3000 × 1500, as calculations and quotes show it. Invisible formatting is removed — direction controls and zero-width characters — and a name with nothing left to read is refused. |
length_mm |
number | yes | |
material_category |
carbon_steel | alloy_steel | stainless_steel | tool_steel | cast_iron | aluminium | copper_alloy | nickel_alloy | titanium_alloy | magnesium_alloy | zinc_alloy | thermoplastic | thermoset | elastomer | composite | other |
no | |
thickness_mm |
number | no | |
wall_mm |
number | no | |
width_mm |
number | no |
Request
curl -X POST https://api.arcnm.io/api/v1/stock-formats \
-H "X-API-Key: $ARCNM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"key": "string",
"label": "string",
"length_mm": 0
}'
import requests
resp = requests.post(
"https://api.arcnm.io/api/v1/stock-formats",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"key": "string",
"label": "string",
"length_mm": 0
},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats", {
method: "POST",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
"key": "string",
"label": "string",
"length_mm": 0
}),
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
201 |
Successful Response |
409 |
One of your current formats already uses this key (stock_format_key_taken). |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
409 |
conflict |
A conflicting change, or an Idempotency-Key reused with a different body. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 201
| Field | Type | Description |
|---|---|---|
diameter_mm |
number | Bar: the one diameter this length is stocked in, null for every standard diameter. Tube: the outside diameter. Null on a sheet and a plate. In millimetres. |
gauge_max_mm |
number | Sheet: the thickest sheet this format is bought in, in millimetres; null for no upper limit. Null on every other kind. |
gauge_min_mm |
number | Sheet: the thinnest sheet this format is bought in, in millimetres; null for no lower limit. Null on every other kind. |
id |
string | Identifier of this version of the format. Changing a format's size, gauge band or material starts a new version, with a new id under the same key. |
is_platform |
boolean | True for a standard format. You can hide a standard format for your organization, but not edit or retire it. |
key |
string | Stable identifier shared by every version. |
kind |
sheet | plate | bar | tube |
The purchased stock form: sheet, plate (ordered cut to size), bar (round bar) or tube. Each kind states its own dimensions. |
label |
string | Display name, e.g. GF 3000 × 1500. |
length_mm |
number | Sheet: the longer edge. Plate: the longest plate the supplier cuts to size. Bar and tube: the length bought. In millimetres. |
material_category |
carbon_steel | alloy_steel | stainless_steel | tool_steel | cast_iron | aluminium | copper_alloy | nickel_alloy | titanium_alloy | magnesium_alloy | zinc_alloy | thermoplastic | thermoset | elastomer | composite | other |
Material category this format is bought in; null for every material. |
org_id |
string | Your organization's id on a format of your own; null on a standard format. |
resolution |
priced | suppressed | closed |
What calculations do with this format on the date read — at on the list, today otherwise. priced: they price with it. suppressed: a standard format your organization has hidden. closed: this version wasn't in force on that date — it was retired, or replaced by a newer version. |
thickness_mm |
number | Plate: the thickness the plate is cut to size in, in millimetres. Null on every other kind. |
valid_from |
string | Date this version took effect. |
valid_to |
string | Date this version was retired or replaced by a newer version; null while it is current. |
wall_mm |
number | Tube: the wall thickness, in millimetres. Null on every other kind. |
width_mm |
number | Sheet: the shorter edge. Plate: the widest plate the supplier cuts to size. Null on a bar and a tube. |
Example response
{
"diameter_mm": 0,
"gauge_max_mm": 0,
"gauge_min_mm": 0,
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"is_platform": true,
"key": "string",
"kind": "sheet",
"label": "string",
"length_mm": 0,
"material_category": "carbon_steel",
"org_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"resolution": "priced",
"thickness_mm": 0,
"valid_from": "2026-06-01",
"valid_to": "2026-06-01",
"wall_mm": 0,
"width_mm": 0
}
Retire Stock Format
DELETE /api/v1/stock-formats/{format_id}
Stop buying this format.
It closes today and stays readable by id, so calculations priced on it keep their numbers when they are run again. A format added today that no calculation has used yet is removed instead.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
format_id |
path | string | yes | Identifier of the format. |
Request
curl -X DELETE https://api.arcnm.io/api/v1/stock-formats/{format_id} \
-H "X-API-Key: $ARCNM_API_KEY"
import requests
resp = requests.delete(
"https://api.arcnm.io/api/v1/stock-formats/{format_id}",
headers={"X-API-Key": "YOUR_API_KEY"},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats/{format_id}", {
method: "DELETE",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
},
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
200 |
Successful Response |
404 |
None of your own formats has this id (stock_format_not_found). A standard format can be hidden, but not edited or retired. |
409 |
This version is already closed (stock_format_superseded), or retiring it would leave no format to price with (stock_format_last_remaining). |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
404 |
not_found |
A referenced resource doesn't exist or isn't visible to your organisation. |
409 |
conflict |
A conflicting change, or an Idempotency-Key reused with a different body. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 200
| Field | Type | Description |
|---|---|---|
message |
string |
Example response
{
"message": "string"
}
Get Stock Format
GET /api/v1/stock-formats/{format_id}
One stock format by id, in any version — including one retired or replaced since.
The format a calculation was priced on stays readable here after it
leaves the list. resolution says what calculations dated today do
with it.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
format_id |
path | string | yes | Identifier of the format. |
Request
curl -X GET https://api.arcnm.io/api/v1/stock-formats/{format_id} \
-H "X-API-Key: $ARCNM_API_KEY"
import requests
resp = requests.get(
"https://api.arcnm.io/api/v1/stock-formats/{format_id}",
headers={"X-API-Key": "YOUR_API_KEY"},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats/{format_id}", {
method: "GET",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
},
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
200 |
Successful Response |
404 |
No format with this id is visible to your organization (stock_format_not_found). |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
404 |
not_found |
A referenced resource doesn't exist or isn't visible to your organisation. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 200
| Field | Type | Description |
|---|---|---|
diameter_mm |
number | Bar: the one diameter this length is stocked in, null for every standard diameter. Tube: the outside diameter. Null on a sheet and a plate. In millimetres. |
gauge_max_mm |
number | Sheet: the thickest sheet this format is bought in, in millimetres; null for no upper limit. Null on every other kind. |
gauge_min_mm |
number | Sheet: the thinnest sheet this format is bought in, in millimetres; null for no lower limit. Null on every other kind. |
id |
string | Identifier of this version of the format. Changing a format's size, gauge band or material starts a new version, with a new id under the same key. |
is_platform |
boolean | True for a standard format. You can hide a standard format for your organization, but not edit or retire it. |
key |
string | Stable identifier shared by every version. |
kind |
sheet | plate | bar | tube |
The purchased stock form: sheet, plate (ordered cut to size), bar (round bar) or tube. Each kind states its own dimensions. |
label |
string | Display name, e.g. GF 3000 × 1500. |
length_mm |
number | Sheet: the longer edge. Plate: the longest plate the supplier cuts to size. Bar and tube: the length bought. In millimetres. |
material_category |
carbon_steel | alloy_steel | stainless_steel | tool_steel | cast_iron | aluminium | copper_alloy | nickel_alloy | titanium_alloy | magnesium_alloy | zinc_alloy | thermoplastic | thermoset | elastomer | composite | other |
Material category this format is bought in; null for every material. |
org_id |
string | Your organization's id on a format of your own; null on a standard format. |
resolution |
priced | suppressed | closed |
What calculations do with this format on the date read — at on the list, today otherwise. priced: they price with it. suppressed: a standard format your organization has hidden. closed: this version wasn't in force on that date — it was retired, or replaced by a newer version. |
thickness_mm |
number | Plate: the thickness the plate is cut to size in, in millimetres. Null on every other kind. |
valid_from |
string | Date this version took effect. |
valid_to |
string | Date this version was retired or replaced by a newer version; null while it is current. |
wall_mm |
number | Tube: the wall thickness, in millimetres. Null on every other kind. |
width_mm |
number | Sheet: the shorter edge. Plate: the widest plate the supplier cuts to size. Null on a bar and a tube. |
Example response
{
"diameter_mm": 0,
"gauge_max_mm": 0,
"gauge_min_mm": 0,
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"is_platform": true,
"key": "string",
"kind": "sheet",
"label": "string",
"length_mm": 0,
"material_category": "carbon_steel",
"org_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"resolution": "priced",
"thickness_mm": 0,
"valid_from": "2026-06-01",
"valid_to": "2026-06-01",
"wall_mm": 0,
"width_mm": 0
}
Update Stock Format
PATCH /api/v1/stock-formats/{format_id}
Edit one of your own formats. Standard formats are not editable.
Changing the size, gauge band or material starts a new version: this
one closes today, so calculations priced on it keep their numbers,
and the response is the new version — a new id under the same
key. A version that took effect today changes in place instead,
unless a calculation has already been pinned to it or priced on it; a
new label always changes in place. A value sent unchanged changes
nothing.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
format_id |
path | string | yes | Identifier of the format. |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
diameter_mm |
number | no | |
gauge_max_mm |
number | no | |
gauge_min_mm |
number | no | |
label |
string | no | The format's name, e.g. GF 3000 × 1500, as calculations and quotes show it. Invisible formatting is removed — direction controls and zero-width characters — and a name with nothing left to read is refused. |
length_mm |
number | no | |
material_category |
carbon_steel | alloy_steel | stainless_steel | tool_steel | cast_iron | aluminium | copper_alloy | nickel_alloy | titanium_alloy | magnesium_alloy | zinc_alloy | thermoplastic | thermoset | elastomer | composite | other |
no | |
thickness_mm |
number | no | |
wall_mm |
number | no | |
width_mm |
number | no |
Request
curl -X PATCH https://api.arcnm.io/api/v1/stock-formats/{format_id} \
-H "X-API-Key: $ARCNM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"diameter_mm": 0,
"gauge_max_mm": 0,
"gauge_min_mm": 0,
"label": "string",
"length_mm": 0,
"material_category": "carbon_steel",
"thickness_mm": 0,
"wall_mm": 0,
"width_mm": 0
}'
import requests
resp = requests.patch(
"https://api.arcnm.io/api/v1/stock-formats/{format_id}",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"diameter_mm": 0,
"gauge_max_mm": 0,
"gauge_min_mm": 0,
"label": "string",
"length_mm": 0,
"material_category": "carbon_steel",
"thickness_mm": 0,
"wall_mm": 0,
"width_mm": 0
},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats/{format_id}", {
method: "PATCH",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
"diameter_mm": 0,
"gauge_max_mm": 0,
"gauge_min_mm": 0,
"label": "string",
"length_mm": 0,
"material_category": "carbon_steel",
"thickness_mm": 0,
"wall_mm": 0,
"width_mm": 0
}),
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
200 |
Successful Response |
404 |
None of your own formats has this id (stock_format_not_found). A standard format can be hidden, but not edited or retired. |
409 |
This version is closed, so its size, gauge band and material can't change (stock_format_superseded). Edit the current version instead. |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
404 |
not_found |
A referenced resource doesn't exist or isn't visible to your organisation. |
409 |
conflict |
A conflicting change, or an Idempotency-Key reused with a different body. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 200
| Field | Type | Description |
|---|---|---|
diameter_mm |
number | Bar: the one diameter this length is stocked in, null for every standard diameter. Tube: the outside diameter. Null on a sheet and a plate. In millimetres. |
gauge_max_mm |
number | Sheet: the thickest sheet this format is bought in, in millimetres; null for no upper limit. Null on every other kind. |
gauge_min_mm |
number | Sheet: the thinnest sheet this format is bought in, in millimetres; null for no lower limit. Null on every other kind. |
id |
string | Identifier of this version of the format. Changing a format's size, gauge band or material starts a new version, with a new id under the same key. |
is_platform |
boolean | True for a standard format. You can hide a standard format for your organization, but not edit or retire it. |
key |
string | Stable identifier shared by every version. |
kind |
sheet | plate | bar | tube |
The purchased stock form: sheet, plate (ordered cut to size), bar (round bar) or tube. Each kind states its own dimensions. |
label |
string | Display name, e.g. GF 3000 × 1500. |
length_mm |
number | Sheet: the longer edge. Plate: the longest plate the supplier cuts to size. Bar and tube: the length bought. In millimetres. |
material_category |
carbon_steel | alloy_steel | stainless_steel | tool_steel | cast_iron | aluminium | copper_alloy | nickel_alloy | titanium_alloy | magnesium_alloy | zinc_alloy | thermoplastic | thermoset | elastomer | composite | other |
Material category this format is bought in; null for every material. |
org_id |
string | Your organization's id on a format of your own; null on a standard format. |
resolution |
priced | suppressed | closed |
What calculations do with this format on the date read — at on the list, today otherwise. priced: they price with it. suppressed: a standard format your organization has hidden. closed: this version wasn't in force on that date — it was retired, or replaced by a newer version. |
thickness_mm |
number | Plate: the thickness the plate is cut to size in, in millimetres. Null on every other kind. |
valid_from |
string | Date this version took effect. |
valid_to |
string | Date this version was retired or replaced by a newer version; null while it is current. |
wall_mm |
number | Tube: the wall thickness, in millimetres. Null on every other kind. |
width_mm |
number | Sheet: the shorter edge. Plate: the widest plate the supplier cuts to size. Null on a bar and a tube. |
Example response
{
"diameter_mm": 0,
"gauge_max_mm": 0,
"gauge_min_mm": 0,
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"is_platform": true,
"key": "string",
"kind": "sheet",
"label": "string",
"length_mm": 0,
"material_category": "carbon_steel",
"org_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"resolution": "priced",
"thickness_mm": 0,
"valid_from": "2026-06-01",
"valid_to": "2026-06-01",
"wall_mm": 0,
"width_mm": 0
}
Unsuppress Stock Format
DELETE /api/v1/stock-formats/{format_id}/suppression
Show a standard format you had hidden.
Calculations price with it again from today on.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
format_id |
path | string | yes | Identifier of the format. |
Request
curl -X DELETE https://api.arcnm.io/api/v1/stock-formats/{format_id}/suppression \
-H "X-API-Key: $ARCNM_API_KEY"
import requests
resp = requests.delete(
"https://api.arcnm.io/api/v1/stock-formats/{format_id}/suppression",
headers={"X-API-Key": "YOUR_API_KEY"},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats/{format_id}/suppression", {
method: "DELETE",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
},
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
200 |
Successful Response |
404 |
No format with this id is visible to your organization (stock_format_not_found). |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
404 |
not_found |
A referenced resource doesn't exist or isn't visible to your organisation. |
409 |
conflict |
A conflicting change, or an Idempotency-Key reused with a different body. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 200
| Field | Type | Description |
|---|---|---|
message |
string |
Example response
{
"message": "string"
}
Suppress Stock Format
POST /api/v1/stock-formats/{format_id}/suppression
Hide a standard format your shop doesn't buy, for your organization only.
Calculations stop pricing with it from today on; earlier calculations keep the formats they were priced with. The hide holds for the format, so it stays hidden when a newer version of it replaces this one. A format of your own is retired instead.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
format_id |
path | string | yes | Identifier of the format. |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
reason |
string | no |
Request
curl -X POST https://api.arcnm.io/api/v1/stock-formats/{format_id}/suppression \
-H "X-API-Key: $ARCNM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "string"
}'
import requests
resp = requests.post(
"https://api.arcnm.io/api/v1/stock-formats/{format_id}/suppression",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"reason": "string"
},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.arcnm.io/api/v1/stock-formats/{format_id}/suppression", {
method: "POST",
headers: {
"X-API-Key": process.env.ARCNM_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
"reason": "string"
}),
})
const data = await resp.json()
Responses
| Status | Description |
|---|---|
201 |
Successful Response |
404 |
No format with this id is visible to your organization (stock_format_not_found). |
409 |
The format is one of your own, which you retire instead (stock_format_own_row_use_retire), this version of it is closed (stock_format_superseded), or hiding it would leave no format to price with (stock_format_last_remaining). |
422 |
Validation Error |
Errors
Standard error responses — see the Errors catalog for the full envelope, request_id, and retry-safety table.
| Status | Code | When |
|---|---|---|
401 |
invalid_api_key |
Missing, malformed, or revoked API key. |
403 |
insufficient_scope |
The key is valid but lacks a scope this endpoint requires. |
404 |
not_found |
A referenced resource doesn't exist or isn't visible to your organisation. |
409 |
conflict |
A conflicting change, or an Idempotency-Key reused with a different body. |
429 |
rate_limited |
Per-key or per-org rate limit exceeded — back off with jitter and retry. |
Response body 201
| Field | Type | Description |
|---|---|---|
message |
string |
Example response
{
"message": "string"
}