Create or Update CMS Collection
curl --request POST \
--url https://api.kardow.com/cms \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"slug": "sponsors",
"name": "Sponsors",
"visibility": "public",
"schema": [
{
"name": "name",
"type": "text",
"required": true
},
{
"name": "logo",
"type": "image",
"required": true
},
{
"name": "url",
"type": "url"
},
{
"name": "tier",
"type": "select",
"options": [
"bronze",
"silver",
"gold"
]
}
],
"rules": {
"allow_public_submit": false,
"moderation": "manual"
}
}
'import requests
url = "https://api.kardow.com/cms"
payload = {
"slug": "sponsors",
"name": "Sponsors",
"visibility": "public",
"schema": [
{
"name": "name",
"type": "text",
"required": True
},
{
"name": "logo",
"type": "image",
"required": True
},
{
"name": "url",
"type": "url"
},
{
"name": "tier",
"type": "select",
"options": ["bronze", "silver", "gold"]
}
],
"rules": {
"allow_public_submit": False,
"moderation": "manual"
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
slug: 'sponsors',
name: 'Sponsors',
visibility: 'public',
schema: [
{name: 'name', type: 'text', required: true},
{name: 'logo', type: 'image', required: true},
{name: 'url', type: 'url'},
{name: 'tier', type: 'select', options: ['bronze', 'silver', 'gold']}
],
rules: {allow_public_submit: false, moderation: 'manual'}
})
};
fetch('https://api.kardow.com/cms', 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.kardow.com/cms",
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([
'slug' => 'sponsors',
'name' => 'Sponsors',
'visibility' => 'public',
'schema' => [
[
'name' => 'name',
'type' => 'text',
'required' => true
],
[
'name' => 'logo',
'type' => 'image',
'required' => true
],
[
'name' => 'url',
'type' => 'url'
],
[
'name' => 'tier',
'type' => 'select',
'options' => [
'bronze',
'silver',
'gold'
]
]
],
'rules' => [
'allow_public_submit' => false,
'moderation' => 'manual'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.kardow.com/cms"
payload := strings.NewReader("{\n \"slug\": \"sponsors\",\n \"name\": \"Sponsors\",\n \"visibility\": \"public\",\n \"schema\": [\n {\n \"name\": \"name\",\n \"type\": \"text\",\n \"required\": true\n },\n {\n \"name\": \"logo\",\n \"type\": \"image\",\n \"required\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"url\"\n },\n {\n \"name\": \"tier\",\n \"type\": \"select\",\n \"options\": [\n \"bronze\",\n \"silver\",\n \"gold\"\n ]\n }\n ],\n \"rules\": {\n \"allow_public_submit\": false,\n \"moderation\": \"manual\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.kardow.com/cms")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"slug\": \"sponsors\",\n \"name\": \"Sponsors\",\n \"visibility\": \"public\",\n \"schema\": [\n {\n \"name\": \"name\",\n \"type\": \"text\",\n \"required\": true\n },\n {\n \"name\": \"logo\",\n \"type\": \"image\",\n \"required\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"url\"\n },\n {\n \"name\": \"tier\",\n \"type\": \"select\",\n \"options\": [\n \"bronze\",\n \"silver\",\n \"gold\"\n ]\n }\n ],\n \"rules\": {\n \"allow_public_submit\": false,\n \"moderation\": \"manual\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kardow.com/cms")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"slug\": \"sponsors\",\n \"name\": \"Sponsors\",\n \"visibility\": \"public\",\n \"schema\": [\n {\n \"name\": \"name\",\n \"type\": \"text\",\n \"required\": true\n },\n {\n \"name\": \"logo\",\n \"type\": \"image\",\n \"required\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"url\"\n },\n {\n \"name\": \"tier\",\n \"type\": \"select\",\n \"options\": [\n \"bronze\",\n \"silver\",\n \"gold\"\n ]\n }\n ],\n \"rules\": {\n \"allow_public_submit\": false,\n \"moderation\": \"manual\"\n }\n}"
response = http.request(request)
puts response.read_body{
"collection": {
"slug": "<string>",
"name": "<string>",
"schema": [
{
"name": "<string>",
"label": "<string>",
"required": false,
"options": [
"<string>"
],
"max_length": 123,
"min": 123,
"max": 123,
"default": "<unknown>"
}
],
"description": "<string>",
"visibility": "public",
"rules": {
"allow_public_submit": false,
"moderation": "manual",
"sort_by": "created_at",
"sort_dir": "desc"
},
"required_entitlement": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"code": "<string>",
"details": "<unknown>",
"url": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>",
"details": "<unknown>",
"url": "<string>"
}
}CMS
Create or Update CMS Collection
Create a new CMS collection or replace its schema by slug.
POST
/
cms
Create or Update CMS Collection
curl --request POST \
--url https://api.kardow.com/cms \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"slug": "sponsors",
"name": "Sponsors",
"visibility": "public",
"schema": [
{
"name": "name",
"type": "text",
"required": true
},
{
"name": "logo",
"type": "image",
"required": true
},
{
"name": "url",
"type": "url"
},
{
"name": "tier",
"type": "select",
"options": [
"bronze",
"silver",
"gold"
]
}
],
"rules": {
"allow_public_submit": false,
"moderation": "manual"
}
}
'import requests
url = "https://api.kardow.com/cms"
payload = {
"slug": "sponsors",
"name": "Sponsors",
"visibility": "public",
"schema": [
{
"name": "name",
"type": "text",
"required": True
},
{
"name": "logo",
"type": "image",
"required": True
},
{
"name": "url",
"type": "url"
},
{
"name": "tier",
"type": "select",
"options": ["bronze", "silver", "gold"]
}
],
"rules": {
"allow_public_submit": False,
"moderation": "manual"
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
slug: 'sponsors',
name: 'Sponsors',
visibility: 'public',
schema: [
{name: 'name', type: 'text', required: true},
{name: 'logo', type: 'image', required: true},
{name: 'url', type: 'url'},
{name: 'tier', type: 'select', options: ['bronze', 'silver', 'gold']}
],
rules: {allow_public_submit: false, moderation: 'manual'}
})
};
fetch('https://api.kardow.com/cms', 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.kardow.com/cms",
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([
'slug' => 'sponsors',
'name' => 'Sponsors',
'visibility' => 'public',
'schema' => [
[
'name' => 'name',
'type' => 'text',
'required' => true
],
[
'name' => 'logo',
'type' => 'image',
'required' => true
],
[
'name' => 'url',
'type' => 'url'
],
[
'name' => 'tier',
'type' => 'select',
'options' => [
'bronze',
'silver',
'gold'
]
]
],
'rules' => [
'allow_public_submit' => false,
'moderation' => 'manual'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.kardow.com/cms"
payload := strings.NewReader("{\n \"slug\": \"sponsors\",\n \"name\": \"Sponsors\",\n \"visibility\": \"public\",\n \"schema\": [\n {\n \"name\": \"name\",\n \"type\": \"text\",\n \"required\": true\n },\n {\n \"name\": \"logo\",\n \"type\": \"image\",\n \"required\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"url\"\n },\n {\n \"name\": \"tier\",\n \"type\": \"select\",\n \"options\": [\n \"bronze\",\n \"silver\",\n \"gold\"\n ]\n }\n ],\n \"rules\": {\n \"allow_public_submit\": false,\n \"moderation\": \"manual\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.kardow.com/cms")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"slug\": \"sponsors\",\n \"name\": \"Sponsors\",\n \"visibility\": \"public\",\n \"schema\": [\n {\n \"name\": \"name\",\n \"type\": \"text\",\n \"required\": true\n },\n {\n \"name\": \"logo\",\n \"type\": \"image\",\n \"required\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"url\"\n },\n {\n \"name\": \"tier\",\n \"type\": \"select\",\n \"options\": [\n \"bronze\",\n \"silver\",\n \"gold\"\n ]\n }\n ],\n \"rules\": {\n \"allow_public_submit\": false,\n \"moderation\": \"manual\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kardow.com/cms")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"slug\": \"sponsors\",\n \"name\": \"Sponsors\",\n \"visibility\": \"public\",\n \"schema\": [\n {\n \"name\": \"name\",\n \"type\": \"text\",\n \"required\": true\n },\n {\n \"name\": \"logo\",\n \"type\": \"image\",\n \"required\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"url\"\n },\n {\n \"name\": \"tier\",\n \"type\": \"select\",\n \"options\": [\n \"bronze\",\n \"silver\",\n \"gold\"\n ]\n }\n ],\n \"rules\": {\n \"allow_public_submit\": false,\n \"moderation\": \"manual\"\n }\n}"
response = http.request(request)
puts response.read_body{
"collection": {
"slug": "<string>",
"name": "<string>",
"schema": [
{
"name": "<string>",
"label": "<string>",
"required": false,
"options": [
"<string>"
],
"max_length": 123,
"min": 123,
"max": 123,
"default": "<unknown>"
}
],
"description": "<string>",
"visibility": "public",
"rules": {
"allow_public_submit": false,
"moderation": "manual",
"sort_by": "created_at",
"sort_dir": "desc"
},
"required_entitlement": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"code": "<string>",
"details": "<unknown>",
"url": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>",
"details": "<unknown>",
"url": "<string>"
}
}A collection is identified by its
slug. POSTing the same slug twice
performs an upsert ā the schema, name, description, and rules are replaced.
Changing the schema of a collection that already has items does not
re-validate them. Existing rows keep their stored shape; new writes are
validated against the new schema.
Rules object
The optionalrules field controls collection behavior:
| Key | Type | Default | Purpose |
|---|---|---|---|
allow_public_submit | boolean | false | Permit unauthenticated POST /organization/cms/{slug}/submit. |
moderation | 'auto' | 'manual' | 'manual' | auto = published immediately; manual = pending_review. |
sort_by | string | created_at | Default sort field for list responses. |
sort_dir | 'asc' | 'desc' | 'desc' | Default sort direction. |
Example
curl -X POST https://api.kardow.com/cms \
-H "x-api-key: $KARDOW_API_KEY" \
-H "content-type: application/json" \
-d '{
"slug": "courses",
"name": "Courses",
"visibility": "public",
"schema": [
{ "name": "title", "type": "text", "required": true },
{ "name": "summary", "type": "longtext", "required": true },
{ "name": "cover", "type": "image" },
{ "name": "level", "type": "select", "options": ["beginner","intermediate","advanced"] },
{ "name": "duration", "type": "number" }
],
"rules": { "allow_public_submit": false, "moderation": "manual" }
}'
Authorizations
API key for authentication. Get yours from Settings > API Keys in the Kardow dashboard.
Body
application/json
URL-safe identifier. ^[a-z][a-z0-9_-]{0,63}$.
Maximum array length:
40Show child attributes
Show child attributes
Available options:
public, gated, private Optional behavior flags.
Show child attributes
Show child attributes
Response
Created or updated
Show child attributes
Show child attributes
Was this page helpful?
āI