Apicurio Registry artifact reference
Look up the artifact types that Apicurio Registry supports, including AI/ML types, the states that artifact versions move through, and the metadata that Apicurio Registry stores for groups, artifacts, and artifact versions.
Apicurio Registry artifact types
You can store and manage a wide range of schema and API artifact types in Apicurio Registry.
| Type | Description | Supported versions |
|---|---|---|
|
AsyncAPI specification |
|
|
Apache Avro schema |
|
|
GraphQL schema |
* |
|
JSON Schema |
|
|
Apache Kafka Connect schema |
|
|
MCP server definitions ( |
|
|
MCP tool definitions (Model Context Protocol) |
|
|
AI/ML model input/output schema definitions |
|
|
OpenAPI specification |
|
|
OpenRPC specification for JSON-RPC APIs |
|
|
LLM prompt templates with variable schemas |
|
|
Google protocol buffers schema |
|
|
Apache Thrift interface definition language |
* |
|
Web Services Definition Language |
|
|
Extensible Markup Language |
|
|
XML Schema Definition |
Artifact reference support by type
Artifact references let one artifact content depend on another artifact already stored in
Apicurio Registry (for example, an OpenAPI document that uses $ref to point at a shared JSON Schema
artifact). Support for finding, validating, and resolving (dereferencing or rewriting) references
varies by artifact type. The table below lists the reference support for every built-in artifact
type.
| Type | Finds references | Dereferences (DEREFERENCE) |
Rewrites (REWRITE) |
Notes |
|---|---|---|---|---|
|
Yes |
Yes |
Yes |
References are named types (for example |
|
Yes |
Yes |
Yes |
References are resolved from |
|
Yes |
Yes |
Yes |
References are |
|
Yes |
Yes |
Yes |
References are |
|
Yes |
Yes |
Yes |
References are |
|
Yes |
Yes |
Yes |
References are |
|
Yes |
Yes |
Yes |
AI/ML model input/output schemas may reference shared type definitions. |
|
Yes |
Yes |
Yes |
Prompt templates may reference shared variable schemas. |
|
Yes |
Yes |
Yes |
References are |
|
Yes |
No (throws an error) |
Yes |
The reference name must equal the literal |
|
Yes |
No (throws an error) |
Yes |
The reference name must equal the literal |
|
Yes (opt-in convention) |
Yes |
Yes |
GraphQL has no standard import syntax. References are recognized only when the content uses the
|
|
No |
No |
No |
Generic XML content has no defined reference mechanism in Apicurio Registry. |
|
No |
No |
No |
Kafka Connect schema content has no defined reference mechanism in Apicurio Registry. |
|
No |
No |
No |
The content validator rejects artifact references outright. |
|
No |
No |
No |
The content validator rejects artifact references outright. |
|
No |
No |
No |
The content validator rejects artifact references outright. |
|
No |
No |
No |
|
|
No |
No |
No |
Agent card content has no defined reference mechanism in Apicurio Registry. |
|
No |
No |
No |
Not currently implemented. |
AI/ML artifact types
Apicurio Registry includes built-in support for AI/ML artifact types designed for LLMOps and prompt engineering workflows.
Apicurio Registry supports the following AI/ML artifact types:
MCP_SERVER-
MCP (Model Context Protocol) server definitions, in the
server.jsonformat published to an MCP registry. Use this artifact type to:-
Store the packages, remotes, and transports through which an MCP server can be reached
-
Track server releases with version history
-
Serve the servers through the MCP Registry API, which is enabled with
apicurio.mcp-registry.enabled -
Validate server definitions against the MCP registry specification
Content types:
application/json
-
MCP_TOOL-
MCP (Model Context Protocol) tool definitions. Use this artifact type to:
-
Store MCP tool definitions with input/output schemas
-
Track tool evolution with version history and compatibility checking
-
Enable discovery of tools via well-known endpoints
-
Validate tool definitions against the MCP specification
Content types:
application/json
-
MODEL_SCHEMA-
Defines and validates AI/ML model input/output schemas and metadata. Use this artifact type to:
-
Document model input/output contracts using JSON Schema
-
Track model capabilities (chat, vision, function calling)
-
Store provider information and context window limits
-
Ensure backward compatibility when updating model schemas
Content types:
application/json,application/x-yaml
-
PROMPT_TEMPLATE-
Version-controlled prompt templates with variable schemas. Use this artifact type to:
-
Store prompt templates with
{{variable}}syntax -
Define variable schemas with types, constraints, and defaults
-
Track prompt evolution with version history
-
Validate prompts have all required variables defined
Content types:
application/x-yaml,application/json,text/x-prompt-template
-
Apicurio Registry artifact version states
The valid artifact version states in Apicurio Registry are ENABLED, DISABLED, and DEPRECATED.
| State | Description |
|---|---|
|
Basic state, all the operations are available. |
|
The artifact version metadata is viewable and searchable using the Apicurio Registry web console, but its content cannot be fetched by any client. |
|
The artifact version is fully usable but a header is added to the REST API response whenever the artifact version content is fetched. |
Apicurio Registry group metadata
When a group is created in Apicurio Registry, a set of metadata properties is created and stored. This metadata consists of system-generated or user-generated properties that are read-only, and editable properties that you can update after the group is created.
| Property | Type | Description |
|---|---|---|
|
string |
The name of the user who created the group. |
|
date |
The date and time when the group was created, for example, |
|
string |
The name of the user who modified the group. |
|
date |
The date and time at which the group was modified, for example, |
| Property | Type | Description |
|---|---|---|
|
string |
Unique identifier of the artifact group in Apicurio Registry, for example, |
| Property | Type | Description |
|---|---|---|
|
string |
Optional meaningful description of the group, for example, |
|
map |
Optional list of user-defined name-value pairs associated with the group. The name and value must be strings, for example, |
You can update group metadata as follows:
-
You can use the Apicurio Registry REST API or web console to update the set of editable metadata properties.
-
You can update the
stateproperty only by using the Apicurio Registry REST API.
For more details, see the /groups/{groupId} endpoint in the Apicurio Registry REST API documentation.
Automatic group creation
You can require clients to create a group before registering its first artifact by disabling automatic group creation.
- Default behavior
-
With SQL or KafkaSQL storage,
apicurio.storage.enable-automatic-group-creationdefaults totrue. Registering an artifact in a named group that does not exist creates the group automatically. The new group uses the artifact owner’s identity as its owner. - Explicit group creation
-
With
apicurio.storage.enable-automatic-group-creation=false, registering an artifact in a missing named group fails with a group-not-found error. Clients must first create the group, for example, withPOST /apis/registry/v3/groups. Existing groups and the built-indefaultgroup remain available.
apicurio.storage.enable-automatic-group-creation=false
The equivalent environment variable is APICURIO_STORAGE_ENABLE_AUTOMATIC_GROUP_CREATION=false.
The setting takes effect when you restart the server.
Default reference handling for artifact content
You can set a default representation for retrieved artifact references when clients omit the reference-handling parameter.
The optional apicurio.rest.artifact.references.default-handling property accepts the following values for supported v3 content endpoints:
| Value | Returned content |
|---|---|
|
Keeps references in the stored content unchanged. This is the v3 API default when the property is unset. |
|
Resolves registered references and incorporates the referenced content, according to the artifact type’s dereferencing support. |
|
Rewrites registered references as URLs to the referenced content in Apicurio Registry, according to the artifact type’s reference support. |
apicurio.rest.artifact.references.default-handling=DEREFERENCE
The equivalent environment variable is APICURIO_REST_ARTIFACT_REFERENCES_DEFAULT_HANDLING=DEREFERENCE.
The setting takes effect when you restart the server.
It changes the response representation without modifying stored artifact content.
- Per-request override
-
For v3 content retrieval by global ID or by group, artifact, and version, an explicit
referencesquery parameter overrides the configured default. For example, this request preserves references even when the server default isDEREFERENCE:curl "https://registry.example.com/apis/registry/v3/groups/my-group/artifacts/my-schema/versions/1.0.0/content?references=PRESERVE"Replace the URL and artifact coordinates with values from your deployment, and supply authentication if required.
- Compatibility APIs
-
When no explicit parameter is supplied, the v2 API treats a configured
DEREFERENCEvalue asdereference=true. The Confluent-compatible API applies its resolved format to supported Avro and Protobuf responses when this default isDEREFERENCE. Without the property, each API retains its existing default behavior.
Apicurio Registry artifact metadata
When an artifact is added to Apicurio Registry, a set of metadata properties is created and stored. This metadata consists of system-generated or user-generated properties that are read-only, and editable properties that you can update after the artifact is created.
| Property | Type | Description |
|---|---|---|
|
date |
The date and time when the artifact was created, for example, |
|
integer |
Globally unique identifier of an artifact version in Apicurio Registry. For example, a global ID of |
|
string |
The name of the user who modified the artifact. |
|
date |
The date and time at which the artifact was modified, for example, |
| Property | Type | Description |
|---|---|---|
|
string |
Unique identifier of an artifact group in Apicurio Registry, for example, |
|
string |
Unique identifier of an artifact in Apicurio Registry. You can provide an artifact ID or use the UUID generated by Apicurio Registry, for example, |
|
ArtifactType |
The supported artifact type, for example, |
| Property | Type | Description |
|---|---|---|
|
string |
Optional human-readable name of the artifact, for example, |
|
string |
Optional meaningful description of the artifact, for example, |
|
map |
Optional list of user-defined name-value pairs associated with the artifact. The name and value must be strings, for example, |
|
string |
The name of the user who owns the artifact. |
You can update artifact metadata as follows:
-
You can use the Apicurio Registry REST API or web console to update the set of editable metadata properties.
For more details, see the /groups/{groupId}/artifacts/{artifactId} endpoint in the Apicurio Registry REST API documentation.
Apicurio Registry artifact version metadata
When you add a new version to an artifact, Apicurio Registry creates a set of metadata properties and stores them along with the artifact version content.
This metadata consists of system-generated or user-generated properties that are read-only, and editable properties that you can update after the artifact version is created.
| Property | Type | Description |
|---|---|---|
|
string |
The name of the user who created the artifact version. |
|
date |
The date and time when the artifact version was created, for example, |
|
string |
The user who modified the artifact version. |
|
date |
The date and time at which the artifact version was modified, for example, |
|
integer |
Unique identifier of artifact version content in Apicurio Registry. The same content ID can be shared by multiple artifact versions when artifact versions have identical content. For example, a content ID of |
|
integer |
Globally unique identifier of an artifact version in Apicurio Registry. For example, a global ID of |
| Property | Type | Description |
|---|---|---|
|
string |
Unique identifier of an artifact group in Apicurio Registry, for example, |
|
string |
Unique identifier of an artifact in Apicurio Registry. |
|
integer |
The version string of the artifact version. If not provided, the system will generate a new sequential version. You can provide a version when using the Apicurio Registry REST API, SDKs, or Maven plug-in, for example, |
| Property | Type | Description |
|---|---|---|
|
string |
Optional human-readable name of the artifact version, for example, |
|
string |
Optional meaningful description of the artifact version, for example, |
|
map |
Optional list of user-defined name-value pairs associated with the artifact version. The name and value must be strings, for example, |
|
ArtifactState |
The state of the artifact version: |
You can update artifact version metadata as follows:
-
You can use the Apicurio Registry REST API or web console to update the set of editable metadata properties.
-
You can update the
stateproperty only by using the Apicurio Registry REST API.
For more details, see the /groups/{groupId}/artifacts/{artifactId}/versions/{versionId} endpoint in the Apicurio Registry REST API documentation.
