Confluent Schema Registry compatibility API
Apicurio Registry provides a compatibility API layer that enables applications using Confluent Schema Registry clients to work seamlessly with Apicurio Registry. This chapter describes the supported features, limitations, and migration considerations.
Overview of the compatibility API
Apicurio Registry implements the Confluent Schema Registry REST API to provide drop-in compatibility for applications and tools designed for Confluent Schema Registry.
| Version | Endpoint | Status |
|---|---|---|
v7 |
|
Fully supported |
v8 |
|
Fully supported |
Applications using Confluent Schema Registry client libraries can use Apicurio Registry as a replacement by simply changing the schema registry URL to point to the appropriate Apicurio Registry ccompat endpoint.
# Confluent client configuration pointing to Apicurio Registry
schema.registry.url=http://my-registry:8080/apis/ccompat/v7
Supported features
The following Confluent Schema Registry features are fully supported in Apicurio Registry:
| Feature | Description |
|---|---|
Schemas API |
Full support for schema management including |
Subjects API |
Complete CRUD operations for subjects including listing, registration, lookup by content ( |
Compatibility API |
Schema compatibility checking against specific versions or all versions. Supports |
Config API |
Global and subject-level compatibility configuration. Supports |
Mode API |
Global and subject-level mode management ( |
Contexts API |
Returns the default context for Confluent client compatibility. |
| Schema Type | Support Status |
|---|---|
Apache Avro |
Fully supported |
JSON Schema |
Fully supported |
Google Protobuf |
Fully supported |
| Feature | Description |
|---|---|
X-Confluent-Accept-Unknown-Properties header |
When set to |
Enhanced pagination |
Full pagination support on schemas and subjects endpoints. |
Schema ID mapping
Apicurio Registry uses two internal ID types: globalId (unique per artifact version) and contentId (unique per content hash). Confluent Schema Registry uses a single incrementing schema ID.
The mapping between Confluent schema IDs and Apicurio Registry internal IDs is controlled by the apicurio.ccompat.legacy-id-mode.enabled configuration property:
| Mode | Config Value | Behavior |
|---|---|---|
Content ID mode (default) |
|
Confluent |
Legacy ID mode |
|
Confluent |
For most use cases, the default content ID mode is recommended because it matches Confluent’s behavior where identical schemas share the same ID across subjects.
Configuration properties
| Property | Default | Description |
|---|---|---|
|
|
Use |
|
|
Always use canonical hash for schema content comparison. |
|
|
Maximum number of subjects returned by the |
|
|
Enable Apicurio Registry group support by concatenating group ID and artifact ID into the subject name. |
|
|
Separator character used when group concatenation is enabled. |
Behavioral differences from Confluent
While the ccompat API aims for full compatibility, there are some behavioral differences to be aware of when migrating from Confluent Schema Registry.
Avro schema formatting
Avro schemas returned through the ccompat API are normalized to compact single-line JSON, matching Confluent’s behavior. This means:
-
Pretty-printed Avro schemas submitted during registration are returned in compact form.
-
Avro primitive type wrappers are simplified (for example,
{"type": "string"}becomes"string"). -
Field ordering follows Avro’s canonical form.
This normalization applies only to ccompat API responses (/apis/ccompat/*). The native Apicurio Registry v3 API returns schemas in their original submitted format.
Default compatibility level
When no explicit compatibility rule is configured at the artifact, group, or global level, the ccompat compatibility check endpoint (POST /compatibility/subjects/{subject}/versions/2024.Q2) defaults to BACKWARD compatibility. This matches Confluent Schema Registry’s default behavior.
This default only applies to the compatibility check endpoint. Schema registration does not enforce this default unless a compatibility rule is explicitly configured via PUT /config or PUT /config/{subject}.
|
Config response format
The PUT /config and PUT /config/{subject} endpoints return a response with the following fields:
{
"compatibility": "BACKWARD",
"normalize": false
}
The GET /config endpoint returns:
{
"compatibilityLevel": "BACKWARD"
}
Note the different field name (compatibility vs compatibilityLevel) between the update and get responses. This matches Confluent’s API behavior.
Error responses
Error responses use Confluent-compatible error codes and message formats:
| Error Code | Meaning | HTTP Status |
|---|---|---|
40401 |
Subject not found |
404 |
40402 |
Version not found |
404 |
40403 |
Schema not found |
404 |
40408 |
Subject-level compatibility not configured |
404 |
42201 |
Invalid schema |
422 |
42203 |
Invalid compatibility level |
422 |
42206 |
Schema has existing references |
422 |
Unsupported features
The following Confluent Schema Registry features are not supported in Apicurio Registry. Applications relying on these features will need to use alternative approaches.
| Feature | Behavior | Alternative |
|---|---|---|
Schema Linking / Exporters |
|
Use Apicurio Registry native import/export functionality or external replication tools. |
KEKs (Key Encryption Keys) |
Endpoints not present (404 error). |
Implement encryption at the application layer or use external key management. |
DEKs (Data Encryption Keys) |
Endpoints not present (404 error). |
Implement encryption at the application layer or use external key management. |
Cluster Metadata API |
Endpoints |
Use Apicurio Registry system API for registry information. |
Data Contracts - Rules Enforcement |
|
Use Apicurio Registry native Data Contracts feature ( |
Schema Linking / Exporters
Confluent Schema Linking uses schema exporters to replicate schemas between Schema Registry clusters. This is an enterprise feature that requires cluster-to-cluster replication infrastructure.
Apicurio Registry provides alternative approaches for schema replication:
-
Import/Export API: Use the Apicurio Registry admin API to export all registry content to a ZIP file and import it into another instance.
-
Kafka-based storage: When using Kafka storage, schemas are stored in a Kafka topic that can be replicated using Kafka’s native replication features.
-
GitOps workflows: Store schemas in Git and use CI/CD pipelines to sync across environments.
Data Contracts
Confluent Data Contracts provide governance features including:
-
Metadata: Key-value pairs attached to schemas (owner, email, tags)
-
RuleSets: Validation and transformation rules using CEL or JSONata
In Apicurio Registry, these fields are accepted in ccompat API requests for client compatibility but are not processed or stored through the ccompat layer. Instead, Apicurio Registry provides its own native Data Contracts feature with richer functionality:
-
Contract Metadata: Standardized metadata (status, owner, domain, classification, stage) managed through the
contract/metadataREST API -
Contract Rulesets: Domain and migration rules at both artifact and version level, managed through the
contract/rulesetREST API -
Content Rules: Configure validity, compatibility, and integrity rules
-
Groups: Organize artifacts by group for governance
See Data Contracts for full documentation on the native data contracts feature.
Migration considerations
When migrating from Confluent Schema Registry to Apicurio Registry, consider the following:
| Area | Consideration |
|---|---|
Basic Operations |
Schema registration, retrieval, and compatibility checks work identically. No changes required. |
Client Configuration |
Update |
Schema Types |
Avro, JSON Schema, and Protobuf are fully supported. |
Schema IDs |
Apicurio Registry uses |
Avro Schema Formatting |
Avro schemas are returned in compact JSON through ccompat endpoints. If your application compares schema strings directly, be aware of formatting differences. |
Default Compatibility |
The compatibility check endpoint defaults to |
Config Response Parsing |
The |
Authentication |
Apicurio Registry supports OIDC authentication. Update client security configuration as needed. |
Exporters / Schema Linking |
Not supported. Use Apicurio Registry import/export API or Kafka topic replication. |
Data Contracts |
Metadata and rules from the ccompat API are not enforced. Use Apicurio Registry native Data Contracts feature for contract metadata and rulesets. |
Encryption (KEK/DEK) |
Not supported. Implement encryption at the application layer. |
// Before: Confluent Schema Registry
Properties props = new Properties();
props.put("schema.registry.url", "http://confluent-registry:8081");
// After: Apicurio Registry (using ccompat API)
Properties props = new Properties();
props.put("schema.registry.url", "http://apicurio-registry:8080/apis/ccompat/v7");
