Skip to content

Return an object's metadata record.

GET
/metadata/{moduleKey}/objects/{objectKey}
curl --request GET \
--url https://example.com/metadata/example/objects/example \
--header 'Authorization: Bearer <token>'
moduleKey
required
string

Module key.

objectKey
required
string

Object key.

Row from metadata.object.

pub(crate), not pub(super): named directly in crate::routes::metadata::mod::read_router’s .response::<200, ...>() OpenAPI response documentation (#814), which sits outside handlers.

Media typeapplication/json

Row from metadata.object.

pub(crate), not pub(super): named directly in crate::routes::metadata::mod::read_router’s .response::<200, ...>() OpenAPI response documentation (#814), which sits outside handlers.

object
description

Optional description.

string | null
extends

Parent object qualified name.

string | null
extensionKind

Extension kind.

string | null
identityColor

Visual identity hue (kebab-case) — SPEC-UI-0049.

string | null
identityIcon

Visual identity Phosphor icon name — SPEC-UI-0049.

string | null
isAbstract
required

Whether the object is abstract.

boolean
label
required

Human-readable label.

string
moduleKey
required

Module that owns this object.

string
objectKey
required

Object identifier within the module.

string
rules
required

Validation rules on this object, keyed by rule name.

schema_with stand-in (#814): sqlx::types::Json<T> has no JsonSchema impl regardless of T, and the inner metadata::ValidationRule/ValidationRuleKey types don’t derive JsonSchema yet either (#812’s scope) – see [object_row_rules_schema].

object
Examplegenerated
{
"description": "example",
"extends": "example",
"extensionKind": "example",
"identityColor": "example",
"identityIcon": "example",
"isAbstract": true,
"label": "example",
"moduleKey": "example",
"objectKey": "example",
"rules": {}
}

Structured error envelope (SPEC-DATA-0006): {"errors": [{"scope", "target", "code", "message"}, ...]}.

Media typeapplication/json

The top-level response body. Wraps a non-empty list of [ErrorEntry].

object
errors
required

The error entries making up the envelope. Always non-empty.

Array<object>

One entry in the error envelope.

Carries an anchoring [ErrorScope], an optional target that disambiguates within the scope, a stable SCREAMING_SNAKE_CASE code, and a human-readable English message. See SPEC-DATA-0006 for the full envelope contract.

object
code
required

Machine-readable, stable, SCREAMING_SNAKE_CASE identifier.

string
location
Any of:

HFX source location for a [DataError::HfxCompileError] entry.

Emitted as the extra location field on the entry JSON when present, per SPEC-UI-0043. The line/column are 1-based. The frame is the offending source line extracted verbatim from the input.

object
column
required

1-based column within the line, measured in UTF-16 code units of the prefix so browser-side editors can consume it directly.

integer format: uint32
frame

The offending source line text, when available.

string | null
line
required

1-based line number within the source text.

integer format: uint32
message
required

Server-authored English message. Not part of the API contract; may change across releases without notice.

string
rule

The key of the ValidationRule that failed, when the code is RULE_FAILED. None for all other codes.

Skipped during serialization when absent so it does not appear on unrelated entries (same pattern as location).

Documented here as a plain string (#[schemars(with = "...")]) rather than a $ref to ValidationRuleKey’s own schema: that type lives in metadata-types, which does not derive JsonSchema yet (tracked by #812). ValidationRuleKey serializes transparently as its inner string (serde’s default newtype-struct behavior), so this is an accurate wire-shape description, not a placeholder.

string | null
scope
required

Anchoring category. Drives client-side rendering.

One of:

Attached to a specific request field. target is the field key.

string
Allowed value: field
target

Field key for field scope, record id for record scope, null otherwise. Always serialized, even when null.

string | null
Example
{
"errors": [
{
"scope": "field"
}
]
}