Confluent Cloud Schema Registry REST API Usage Examples

The Schema Registry REST API allows you to register new schemas, list, look up, and delete schemas and subjects, and view these entities by version, by ID, and more. For the full API reference, see Schemas (V1) and Subjects (V1).

Setup and Suggestions

You’ll need to know the following to make API calls to the Schemas (V1) and Subjects (V1) APIs per the usage examples provided here:

  • API endpoint URL for the Confluent Cloud Schema Registry cluster in the environment you want to use. In the examples below, this is typically referred to as the <SCHEMA-REGISTRY-URL> or $SCHEMA_REGISTRY_URL. To find this on the Cloud Console, navigate an environment and locate Stream Governance API > Endpoint on the right panel. Alternatively, log on to Confluent Cloud with the Confluent CLI, make sure you have the appropriate environment selected (confluent env list, confluent env use <environment-ID>), and enter confluent schema-registry cluster describe. (A handy list of CLI commands is here.)

  • If you are using an API keys, you need an API key and secret for Schema Registry in the environment you want to use. (If needed, see Create an API Key for Confluent Cloud Schema Registry.) Schema subjects live at the level of an environment, in per-environment Schema Registry clusters, so just choose the environment that contains the Kafka clusters you want to use.

  • If you are using OAuth, you must provide your access token for authorization in the proper format, as described in Access token format. An OAuth example is provided below.

  • To get properly formatted output for search calls that include question mark (?) or ampersand (&), you must enclose the URL and search parameters in either single or double quotes so that the shell does not interpret them This syntax is also shown in the examples.

  • (Optional) You may want to store your API keys and Schema Registry URL in local shell environment variables to make testing easier. For example, to store your API key and secret:

    $MYCOOLKEYS=xyz:abc
    
    Copy

    You can check the contents of the variable with echo $MYCOOLKEYS then, use it for authorization in subsequent commands: curl --silent -u $MYCOOLKEYS -X POST -H "Content-Type: application/json" ....

  • (Optional) For your API testing, you may want to use the --silent flag with the curl commands and pipe the entire command through jq . to get nicely formatted output. If you don’t use --silent and jq, the content of the output will be the same, it just won’t be formatted as human-friendly readable. (See the Stream Catalog REST API Usage and Examples on Confluent Cloud documentation for examples of using these options.)

  • (Optional) A Confluent Cloud login is handy for comparing API results with the Confluent Cloud Console (https://confluent.cloud/).

OAuth for Confluent Cloud Schema Registry REST API

Confluent Cloud Schema Registry REST API now supports OAuth, an open-standard authorization protocol for secure access. To learn more about OAuth, see Use OAuth/OIDC to Authenticate to Confluent Cloud and Configure Schema Registry clients for OAuth.

Here is an example of using Oauth to get a list of subjects from Confluent Cloud Schema Registry. The generated reference documentation for this API is here.

curl --request GET '<SCHEMA-REGISTRY-URL>/subjects/' \
--header 'Confluent-Identity-Pool-Id: <POOL-ID>' \
--header 'target-sr-cluster: <CLUSTER-ID' \
--header 'Authorization: Bearer $TOKEN'
Copy

The rest of the examples on this page use an API key and secret. If you want to use OAuth instead, remove the -u <API-KEY>:<API-SECRET> and follow the format shown above (specify identity pool ID, Schema Registry cluster, and OAuth bearer token).

Schemas (V1) API Usage Examples

Get schema string by ID

GET /schemas/ids/{schema-ID}

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url '$SCHEMA_REGISTRY_URL/schemas/ids/<schema-ID>?subject=SOME_STRING_VALUE&format=SOME_STRING_VALUE&fetchMaxId=<true|false>'
Copy

For example, the following call gets the schema my-flights, which is associated with the schema ID 100015:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/ids/100015?subject=flights&format=Avro&fetchMaxId=true | jq .
Copy

The resulting output is:

[1] 55714
[2] 55715
[2]+  Done                    format=Avro

{"schema":"{\"type\":\"record\",\"name\":\"sampleRecord\",\"namespace\":\"com.mycorp.mynamespace\",\"doc\":\"Sample schema to help you get started.\",\"fields\":[{\"name\":\"my_field1\",\"type\":\"int\",\"doc\":\"The int type is a 32-bit signed integer.\"},{\"name\":\"my_field2\",\"type\":\"double\",\"doc\":\"The double type is a double precision (64-bit) IEEE 754 floating-point number.\"},{\"name\":\"my_field3\",\"type\":\"string\",\"doc\":\"The string is a unicode character sequence.\"}]}"}
Copy

Get schema by ID

GET /schemas/ids/{schema-ID}/schema

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url '$SCHEMA_REGISTRY_URL/schemas/ids/<schema-ID>/schema?subject=SOME_STRING_VALUE&format=SOME_STRING_VALUE'
Copy

For example, to list the schema associated with the ID 100018:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/ids/100018/ | jq .
Copy

The output is the schema:

"schema": "{\"type\":\"record\",\"name\":\"Employee\",\"namespace\":\"Example\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"Country\",\"type\":\"string\",\"default\":\"\"}]}"
Copy

List supported schema types

GET /schemas/types

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/types | jq .
Copy

Example output:

"JSON",
"PROTOBUF",
"AVRO"
Copy

Tip

If you do not filter this through jq, the output will resemble: ["JSON","PROTOBUF","AVRO"]

List schemas

GET /schemas

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url '$SCHEMA_REGISTRY_URL/schemas?subjectPrefix=<SOME_STRING_VALUE>&deleted=<true|false>&latestOnly=<true|false>&offset=<SOME_INTEGER_VALUE>&limit=<SOME_INTEGER_VALUE>'
Copy

For example, to list all existing versions of schemas starting with subjectPrefix of my-cool and show the subject and schema for each:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas?subjectPrefix=my | jq .
Copy

Here is an example of partial output:

{
  "subject": "my-cool-subject",
  "version": 2,
  "id": 100018,
  "schema": "{\"type\":\"record\",\"name\":\"Employee\",\"namespace\":\"Example\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"Country\",\"type\":\"string\",\"default\":\"\"}]}"
},
{
  "subject": "my-cooler-subject",
  "version": 2,
  "id": 100020,
  "schema": "{\"type\":\"record\",\"name\":\"Employees\",\"namespace\":\"my.examples\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"region\",\"type\":\"string\",\"default\":\"\"}]}"
},
{
  "subject": "my-cooler-subject",
  "version": 3,
  "id": 100021,
  "schema": "{\"type\":\"record\",\"name\":\"Employees\",\"namespace\":\"my.examples\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"region\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"Team\",\"type\":\"string\",\"default\":\"\"}]}"
},

...
Copy

List subjects associated to a schema ID

GET /schemas/ids/{schema-ID}/subjects

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/ids/<schema-ID>/subjects
Copy

For example, to list the subject associated with ID 100018:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/ids/100018/subjects
Copy

The output is:

["my-cool-subject"]
Copy

List subject-versions associated to schema ID

GET /schemas/ids/{schema-ID}/versions

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url '$SCHEMA_REGISTRY_URL/schemas/ids/<schema-ID>/versions?subject=SOME_STRING_VALUE&deleted=<true|false>'
Copy

For example, the following call retrieves the subject-version associated with schema ID 100008:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url \
$SCHEMA_REGISTRY_URL/schemas/ids/100008/versions?subject=stock | jq .
Copy

The output shows that version 2 of stocks-value is associated with the given ID:

{
"subject": "stocks-value",
"version": 2
}
Copy

Subjects (V1) API Usage Examples

List all subjects

GET /subjects

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/subjects | jq .
Copy

Here is example output, showing a list of subjects in the registry.

"hamburgers",
"my-cool-subject",
"stocks_sell-value",
"Team",
"hamburger-test",
"accounts-value",
"stocks-value",
"stocks_under_100-value",
"employees-value",
"flights-value",
"my-widget-value",
"stocks_buy-value",
"my-flights-value",
"my-cooler-subject",
"my-new-widget-value",
"Hotdogs",
"my-value"
Copy

List subject matching a given prefix

For example, list all versions of subjects starting with my-cool:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas?subjectPrefix=my | jq .
Copy

Here is an example of partial output:

{
  "subject": "my-cool-subject",
  "version": 2,
  "id": 100018,
  "schema": "{\"type\":\"record\",\"name\":\"Employee\",\"namespace\":\"Example\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"Country\",\"type\":\"string\",\"default\":\"\"}]}"
},
{
  "subject": "my-cooler-subject",
  "version": 2,
  "id": 100020,
  "schema": "{\"type\":\"record\",\"name\":\"Employees\",\"namespace\":\"my.examples\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"region\",\"type\":\"string\",\"default\":\"\"}]}"
},
{
  "subject": "my-cooler-subject",
  "version": 3,
  "id": 100021,
  "schema": "{\"type\":\"record\",\"name\":\"Employees\",\"namespace\":\"my.examples\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"region\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"Team\",\"type\":\"string\",\"default\":\"\"}]}"
},

...
Copy

Get schema by version

GET /subjects/{subject}/versions/{version}

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url $SCHEMA_REGISTRY_URL/subjects/<subject>/versions/<version>?deleted=<true|false>
Copy

For example, to get version 2 of schema “my-cool-subject”:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions/2
Copy

The result will be similar to the following, where the requested version of the schema is returned:

{"subject":"my-cool-subject","version":2,"id":100018,"schema":"{\"type\":\"record\",\"name\":\"Employee\",\"namespace\":\"Example\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"Country\",\"type\":\"string\",\"default\":\"\"}]}"}
Copy

To retrieve a version of the schema that has been deleted (for example version 1 of my-cool-subject), use the following call:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions/1?deleted=true
Copy

The requested version of the deleted schema is returned in the result:

{"subject":"my-cool-subject","version":1,"id":100004,"schema":"{\"type\":\"record\",\"name\":\"Employee\",\"namespace\":\"Example\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"}]}"}
Copy

Get the latest version of a schema with its schema ID

GET /subjects/{subject}/versions/{version}

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url $SCHEMA_REGISTRY_URL/subjects/<subject>/versions/<version>?deleted=<true|false>
Copy

For example, to get the latest version of the schema for the “stocks” topic:

curl -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/subjects/stocks-value/versions/latest
Copy

The output resembles the following:

{"subject":"stocks-value","version":2,"id":100008,"schema":"{\"type\":\"record\",\"name\":\"StockTrade\",\"namespace\":\"ksql\",\"doc\":\"Defines a hypothetical stock trade using some known test stock symbols.\",\"fields\":[{\"name\":\"side\",\"type\":\"string\",\"doc\":\"A simulated trade side (buy or sell or short)\"},{\"name\":\"quantity\",\"type\":\"int\",\"doc\":\"A simulated random quantity of the trade\"},{\"name\":\"symbol\",\"type\":\"string\",\"doc\":\"Simulated stock symbols\"},{\"name\":\"price\",\"type\":\"int\",\"doc\":\"A simulated random trade price in pennies\"},{\"name\":\"account\",\"type\":\"string\",\"doc\":\"Simulated accounts assigned to the trade\"},{\"name\":\"userid\",\"type\":\"string\",\"doc\":\"The simulated user who executed the trade\"}],\"connect.parameters\":{\"io.confluent.connect.avro.record.doc\":\"Defines a hypothetical stock trade using some known test stock symbols.\",\"io.confluent.connect.avro.field.doc.side\":\"A simulated trade side (buy or sell or short)\",\"io.confluent.connect.avro.field.doc.quantity\":\"A simulated random quantity of the trade\",\"io.confluent.connect.avro.field.doc.symbol\":\"Simulated stock symbols\",\"io.confluent.connect.avro.field.doc.price\":\"A simulated random trade price in pennies\",\"io.confluent.connect.avro.field.doc.account\":\"Simulated accounts assigned to the trade\",\"io.confluent.connect.avro.field.doc.userid\":\"The simulated user who executed the trade\"},\"connect.name\":\"ksql.StockTrade\"}"}
Copy

List schemas referencing a schema

GET /subjects/{subject}/versions/{version}/referencedby

curl -u <API-KEY>:<API-SECRET> --request GET \
--url <SCHEMA-REGISTRY-URL>/subjects/<subject>/versions/<version>/referencedby
Copy

For example, the following call returns the schema IDs for schemas that reference version 1 of the employees-value schema:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/subjects/employees-value/versions/1/referencedby
Copy

The output is 100027 which is the schema ID for the widget-value schema:

[100027]
Copy

There are a few ways to get subjects associated with schema IDs; the most direct is to List subjects associated to a schema ID using the following API call:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/ids/<schema-ID>/subjects
Copy

(You could also list all schemas, but that would mean culling through them all to find the given ID.)

For example, to retrieve the subject associated with the given schema ID of 100027:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/schemas/ids/100027/subjects
Copy

The output is:

["my-widget-value"]
Copy

which does reference employees-value.

If you walked through the full example with the example schemas and subject names or others of your own, you can verify this as follows:

  1. Log on to the Confluent Cloud Console (https://confluent.cloud/).

  2. Navigate to Environments > View & Manage Schemas (on the right side panel), then click the schema that you configured to reference another (in this example, my-widget-value).

  3. Click Evolve Schema in the upper right. Schemas referenced by the current schema will show under Schema References:

    ../_images/cloud-05b-schema-references.png

Tip

Get schema string by version

GET /subjects/{subject}/versions/{version}/schema

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET\
--url $SCHEMA_REGISTRY_URL/subjects/<subject>/versions/<version>/schema?deleted=<true|false>'
Copy

For example, this call returns version 1 of the schema my-cool-subject, which had been deleted:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET \
--url $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions/1/schema?deleted=true | jq .
Copy

Example output:

{"type":"record","name":"Employees","namespace":"my.examples","fields":[{"name":"Name","type":"string"},{"name":"Age","type":"int"}]}
Copy

List versions under subject

GET /subjects/{subject}/versions

curl -u $SR_APIKEY:$SR_APISECRET --request GET \
--url <SCHEMA-REGISTRY-URL>/subjects/<subject>/versions?deleted=<true|false>
Copy

For example, this call lists all versions for “my-cool-subject”:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions
Copy

Example output showing all existing versions:

[2,3,4]
Copy

This call lists all versions for “my-cool-subjects”, including deleted versions:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions?deleted=true
Copy

Example output showing all versions, including those that were soft-deleted:

[1,2,3,4]
Copy

Register schema under a subject

POST /subjects/{subject}/versions

To register a schema, specify a POST request with the following parameters:

  • The --data flag provides the path to the file. You must include the @ sign before the path with no spaces in between.
  • Subject name under which to register the schema
curl -u <API-KEY>:<API-SECRET> -X POST -H "Content-Type: application/json" \
--data @/Users/me/my.json <SCHEMA-REGISTRY-URL>/subjects/<subject>/versions
Copy

Following is an example file you can pass into the POST request.

{
"version": 0,
"id": 0,
"schemaType": "string",
"references": [
 {
    "name": "io.confluent.kafka.example.User",
    "subject": "User",
    "version": 1
 }
],
"schema": "string"
}
Copy

Lookup schema under subject

POST /subjects/{subject}

To look up a schema, specify a POST request with the following parameters:

  • The --data flag provides the path to the file. You must include the @ sign before the path with no spaces in between.
  • Subject name under which the schema is registered
curl -u <API-KEY>:<API-SECRET> -X POST -H "Content-Type: application/json" \
--data @/Users/me/my.json <SCHEMA-REGISTRY-URL>/subjects/<subject>
Copy

Following is an example file you can pass into the POST request.

{
"version": 0,
"id": 0,
"schemaType": "string",
"references": [
 {
    "name": "io.confluent.kafka.example.User",
    "subject": "User",
    "version": 1
 }
],
"schema": "string"
}
Copy

Delete a subject

DELETE /subjects/{subject}

This example deletes all versions of the subject “my-value”:

curl --silent -u $SR_APIKEY:$SR_APISECRET --request DELETE --url $SCHEMA_REGISTRY_URL/subjects/my-value | jq .
Copy

Example result showing versions 1 and 2 were deleted:

1,
2
Copy

Delete Version 1 of the schema registered under a subject

DELETE /subjects/{subject}/versions/{version}

This example deletes version 1 of a schema subject called “my-cool-subject”.

curl --silent -u $SR_APIKEY:$SR_APISECRET --request DELETE --url $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions/1 | jq .
Copy

Example result shows the version that was deleted:

1
Copy

Recover a soft-deleted schema

You can recover a soft-deleted schema as described in Recover a soft-deleted schema.

  1. The following example retrieves all deleted schema subjects:

    curl --silent -u $SR_APIKEY:$SR_APISECRET  -X GET $SCHEMA_REGISTRY_URL/subjects?deleted=true | jq .
    
    Copy
  2. This example re-registers a schema under the subject “my-cool-subject”:

    curl --silent -u $SR_APIKEY:$SR_APISECRET -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \
    --data '{"schema": "{\"type\":\"record\",\"name\":\"Employee\",\"namespace\":\"Example\",\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"Age\",\"type\":\"int\"},{\"name\":\"Country\",\"type\":\"string\",\"default\":\"\"}]}"}' \
    $SCHEMA_REGISTRY_URL/subjects/my-cool-subject/versions | jq .
    
    Copy

    The result is a schema ID:

    "id": 100017
    
    Copy

    Tip

    The new schema provided to reregister the schema must be compatible with previously registered versions; otherwise, you will get an error indicating a mismatch in the data.

Delete the most recently registered schema subject under a given subject

The following example deletes the latest version registered under the subject widget-value (which has a total number of four versions as a starting point):

curl --silent -u $SR_APIKEY:$SR_APISECRET --request DELETE --url $SCHEMA_REGISTRY_URL/subjects/widget-value/versions/latest | jq .
Copy

Example result shows the version that was deleted:

4
Copy

Hard delete a schema

To hard delete a schema and free up schema storage space on Confluent Cloud, first perform a soft delete of all versions of the schema, followed by a hard delete of all versions with the ?permanent=true flag appended:

  1. The following example executes a soft-delete of all versions registered under the subject widget-value:

    curl --silent -u $SR_APIKEY:$SR_APISECRET --request DELETE --url $SCHEMA_REGISTRY_URL/subjects/widget-value | jq .
    
    Copy

    The example result shows that versions 1, 2, and 3 were deleted. (You already soft-deleted version 4 in the previous example.):

    1,
    2,
    3
    
    Copy

    At this point, the schema subject is “soft-deleted”. It doesn’t show on the Confluent Cloud Console or if you list subjects from the API, but it is still taking up space in the registry. To hard-delete it, continue with the next step.

  2. The following example performs a hard-delete of the subject widget-value:

    curl --silent -u $SR_APIKEY:$SR_APISECRET --request DELETE --url $SCHEMA_REGISTRY_URL/subjects/widget-value?permanent=true | jq .
    
    Copy

    The output indicates that all versions have been permanently deleted:

    1,
    2,
    3,
    4
    
    Copy

Schema Compatibility (V1) API Usage Examples

The following API calls enable you to get and set global and subject level compatibility. To learn about the compatibility types available on Confluent Cloud Schema Registry, see Schema Evolution and Compatibility.

Get the global compatibility level

GET /config

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/config/ | jq .
Copy

Example result:

"compatibilityLevel": "BACKWARD"
Copy

Update the global compatibility level

PUT /config

curl --silent -u $SR_APIKEY:$SR_APISECRET --request PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" \
--data '{"compatibility": "<level>"}' --url $SCHEMA_REGISTRY_URL/config/
Copy

For example, to update the global compatibility level to “BACKWARD_TRANSITIVE”:

curl --silent  -u $SR_APIKEY:$SR_APISECRET --request PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" \
--data '{"compatibility": "BACKWARD_TRANSITIVE"}' --url $SCHEMA_REGISTRY_URL/config/ | jq .
Copy

Example result:

"compatibilityLevel": "BACKWARD_TRANSITIVE"
Copy

Now, if you re-run the call to Get the global compatibility level, you will get "compatibilityLevel": "BACKWARD_TRANSITIVE" in response.

Get the compatibility level on a subject

GET /config/{subject}

curl --silent -u $SR_APIKEY:$SR_APISECRET --request GET --url $SCHEMA_REGISTRY_URL/config/my-cool-subject | jq .
Copy

Example output:

"error_code": 40408,
"message": "Subject 'my-cool-subject' does not have subject-level compatibility configured
Copy

Update the subject compatibility level

PUT /config/{subject}

curl --silent -u $SR_APIKEY:$SR_APISECRET --request PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" \
--data '{"compatibility": "<level>"}' --url $SCHEMA_REGISTRY_URL/config/<subject>
Copy

For example, to update the compatibility level for my-cool-subject to “FULL”:

curl --silent  -u $SR_APIKEY:$SR_APISECRET --request PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" \
--data '{"compatibility": "FULL"}' --url $SCHEMA_REGISTRY_URL/config/my-cool-subject | jq .
Copy

Example result:

"compatibility": "FULL"
Copy

Now, if you re-run the call to Get the compatibility level on a subject, you will get "compatibility": "FULL" in response.

Suggested Reading