POST
/
v1
/
configs
/
{key}
/
schema
/
verify
cURL
curl -X POST 'https://api.growthbook.io/api/v1/configs/checkout-flow/schema/verify' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"schema":{"type":"typescript","value":"interface CheckoutFlow { timeout: number; retries: number }"}}'import requests
url = "https://api.growthbook.io/api/v1/configs/{key}/schema/verify"
payload = { "schema": {
"type": "json-schema",
"value": {}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({schema: {type: 'json-schema', value: {}}})
};
fetch('https://api.growthbook.io/api/v1/configs/{key}/schema/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.growthbook.io/api/v1/configs/{key}/schema/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'schema' => [
'type' => 'json-schema',
'value' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.growthbook.io/api/v1/configs/{key}/schema/verify"
payload := strings.NewReader("{\n \"schema\": {\n \"type\": \"json-schema\",\n \"value\": {}\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.growthbook.io/api/v1/configs/{key}/schema/verify")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"schema\": {\n \"type\": \"json-schema\",\n \"value\": {}\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/configs/{key}/schema/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"schema\": {\n \"type\": \"json-schema\",\n \"value\": {}\n }\n}"
response = http.request(request)
puts response.read_body{
"inSync": true,
"fingerprint": "<string>",
"incomingFingerprint": "<string>",
"drift": {
"contract": [
{
"key": "<string>",
"change": "added"
}
],
"docs": [
{
"key": "<string>",
"change": "added"
}
]
},
"ancestorOwnedFields": [
{
"key": "<string>",
"ownedBy": "<string>",
"identical": true
}
],
"warnings": [
{
"code": "dropped-declaration",
"message": "<string>",
"path": "<string>"
}
]
}Authorizations
bearerAuthbasicAuth
If using Bearer auth, pass the Secret Key as the token:
curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456"
Path Parameters
The key of the config
Body
application/json
The schema to check against the config's stored schema — a JSON Schema document or typed-code source (typescript/protobuf/python/go/rust). Read-only: nothing is mutated.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
Show child attributes
Show child attributes
Response
200 - application/json
Resource created
True when the supplied schema is canonically identical to the config's stored schema.
Canonical fingerprint of the config's stored schema.
Canonical fingerprint of the supplied schema.
Present only when inSync is false.
Show child attributes
Show child attributes
Supplied fields an ancestor config already owns ("base wins"). Subtract these from drift.contract adds when round-tripping a full effective schema.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?
⌘I
cURL
curl -X POST 'https://api.growthbook.io/api/v1/configs/checkout-flow/schema/verify' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"schema":{"type":"typescript","value":"interface CheckoutFlow { timeout: number; retries: number }"}}'import requests
url = "https://api.growthbook.io/api/v1/configs/{key}/schema/verify"
payload = { "schema": {
"type": "json-schema",
"value": {}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({schema: {type: 'json-schema', value: {}}})
};
fetch('https://api.growthbook.io/api/v1/configs/{key}/schema/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.growthbook.io/api/v1/configs/{key}/schema/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'schema' => [
'type' => 'json-schema',
'value' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.growthbook.io/api/v1/configs/{key}/schema/verify"
payload := strings.NewReader("{\n \"schema\": {\n \"type\": \"json-schema\",\n \"value\": {}\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.growthbook.io/api/v1/configs/{key}/schema/verify")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"schema\": {\n \"type\": \"json-schema\",\n \"value\": {}\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/configs/{key}/schema/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"schema\": {\n \"type\": \"json-schema\",\n \"value\": {}\n }\n}"
response = http.request(request)
puts response.read_body{
"inSync": true,
"fingerprint": "<string>",
"incomingFingerprint": "<string>",
"drift": {
"contract": [
{
"key": "<string>",
"change": "added"
}
],
"docs": [
{
"key": "<string>",
"change": "added"
}
]
},
"ancestorOwnedFields": [
{
"key": "<string>",
"ownedBy": "<string>",
"identical": true
}
],
"warnings": [
{
"code": "dropped-declaration",
"message": "<string>",
"path": "<string>"
}
]
}
