Skip to content

Update a location type

PATCH
/location-types/{id}
curl --request PATCH \
--url https://example.com/api/v1/location-types/example \
--header 'Content-Type: application/json' \
--data '{ "allowed_parent_types": [ "example" ], "icon": "example", "label": "example", "label_rule": "example", "name_rule": { "bare_first": true, "stem": "example" }, "update_mask": [ "example" ] }'

Patches a location_type’s label, icon, allowed parents, label_rule or name_rule. An unparseable label_rule (or a name_rule that cannot mint a legal name) is a 422 at rule-edit time, never a broken row at create time, and setting a label rule restamps nothing on its own: apply it with /locations:recomputeLabels after seeing the blast radius with :previewLabels. A shipped (official) row is never written: the patch FORKS it, storing your version over the shipped one, and the response comes back with forked=true under the same id. :restore discards the fork. Gated by location_type:update.

id
required
string
Media type application/json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
allowed_parent_types

Replaces the allowed-parent set; omit to leave unchanged, [] to clear back to unconstrained

Array<string>
icon

A new glyph key; the console falls back to map-pin when empty

string
label

A new operator-facing label

string
label_rule

A new label template for locations of this type; omit to leave unchanged, "" to clear back to the global rule. Refused (422) if it does not compile. Editing it does not restamp anything: apply it with /locations:recomputeLabels, having seen the blast radius with :previewLabels

string
name_rule

A new name rule for locations of this type; omit to leave unchanged, or name name_rule in update_mask with no rule here to CLEAR it back to operator-named. Refused (422) if it cannot mint a legal name. Setting it renames nothing that already exists: it decides how the NEXT nameless create, :resetName, move or reclassify names a row

object
bare_first

Suppress the ordinal on the first of this stem in a parent, so the only wing there is wing and the second is wing-2. Ignored when stem is empty.

boolean
stem
required

The generated name’s prefix (wing gives wing, wing-2); empty makes the type positional, so the name is the ordinal alone (1, 2, 3). The 90-character ceiling is the mint’s: 90 plus the widest ordinal is exactly the 100-character name cap, so every stem this admits mints legally at both ends of its output space

string
<= 90 characters /^([a-z0-9][a-z0-9-]*)?$/
update_mask

Which fields this write changes (AIP-134). Omit it and the fields present in the body change and nothing else; name a field here and it is written even when the body leaves it empty, which is how a field is CLEARED (name_rule back to operator-named); send [”*”] for full replacement. A field this resource does not patch is a 422 naming it

Array<string> | null

OK

Media type application/json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
allowed_parent_types
required
Array<string> | null
forked
required

True when this shipped row carries changes of yours overriding it. Restore discards them

boolean
icon
required
string
id
required

The location type’s uuid, the stable handle that survives a rename

string
label
required
string
label_rule

The label template locations of this type get; empty falls back to the global rule for locations

string
name
required

The name an operator reads and types; renameable

string
name_rule

How the platform NAMES locations of this type; absent means an operator names every one of them

object
bare_first

True when the first of this stem in a parent carries no ordinal

boolean
examples
required

The first two names this rule mints in one parent, produced by the same mint a create allocates from: the first shows whether the first of a stem carries a number, the second shows the shape every later one takes. Read these rather than rebuilding the shape, which is what keeps one definition of a generated name

Array<string> | null
stem
required

The generated name’s prefix; empty makes the type positional

string
official
required

True for a row this release ships. A shipped row is never written by an operator: an edit forks it

boolean
Example
{
"$schema": "/api/v1/schemas/LocationTypeBody.json"
}

Error

Media type application/problem+json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
Example
{
"$schema": "/api/v1/schemas/ErrorModel.json",
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}