Content (V2)
V2 content endpoints use a simplified flat-dictionary model for fields and a separate translations dictionary for localized values.
Base URL: https://api.contit.cloud
POST
/v2/contents/{contentTypeKey}
V2
Search contents (V2)
Search and filter content items using the V2 model where fields are a flat key-value dictionary and translations are separate.
Requires
ReadAccess policy
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
contentTypeKey |
string | ✓ | The content type key (e.g. 'Product', 'Article') |
Request Body application/json
| Property | Type | Required | Description |
|---|---|---|---|
page |
integer | — | Page number (1-based) |
pageSize |
integer | — | Number of items per page (max 500) |
filter |
object | — | Filter tree with nested groups and rules |
order |
object | — | Sorting configuration with fieldKey and sortDir |
locale |
string | — | Locale code for translated fields |
includeRelations |
string[] | — | Relation field keys to expand |
Responses
200
Success
items |
V2ContentModel[] | Array of V2 content items with flat field dictionaries |
total |
integer | Total matching items |
page |
integer | Current page |
pageSize |
integer | Items per page |
totalPages |
integer | Total pages |
hasMorePages |
boolean | Whether more pages exist |
401
Unauthorized
Code examples
curl -X POST "https://api.contit.cloud/v2/contents/{contentTypeKey}" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"pageSize": 1,
"filter": "filter_value",
"order": "order_value",
"locale": "locale_value",
"includeRelations": []
}'
var client = new ContitClient(
new ClientContitConfiguration(clientId, clientSecret));
var result = await client.Content.Get<MyModel>(contentType, new ContentsRequest
{
Page = 1, PageSize = 20
});
const response = await fetch(
"https://api.contit.cloud/v2/contents/{contentTypeKey}",
{
method: "POST",
headers: {
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
"page": 1,
"pageSize": 1,
"filter": "filter_value",
"order": "order_value",
"locale": "locale_value",
"includeRelations": []
})
}
);
const data = await response.json();
import requests
headers = {"X-Api-Key": "YOUR_API_KEY"}
payload = {
"page": 1,
"pageSize": 1,
"filter": "filter_value",
"order": "order_value",
"locale": "locale_value",
"includeRelations": []
}
response = requests.post(
"https://api.contit.cloud/v2/contents/{contentTypeKey}",
json=payload,
headers=headers
)
data = response.json()
Example Request
{
"page": 1,
"pageSize": 10,
"filter": {
"type": "and",
"conditions": [
{ "type": "condition", "fieldKey": "category", "operator": "e", "value": "news" }
]
},
"order": { "type": "condition", "fieldKey": "publishDate", "sortDir": "Desc" },
"locale": "en"
}
Example Response
200
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"fields": {
"title": "Breaking News",
"category": "news",
"publishDate": "2026-03-15T10:30:00Z",
"featured": true
},
"translations": {
"title": {
"en": "Breaking News",
"it": "Ultime Notizie",
"de": "Eilmeldung"
}
}
},
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"fields": {
"title": "Weekly Update",
"category": "news",
"publishDate": "2026-03-14T08:00:00Z",
"featured": false
},
"translations": {
"title": {
"en": "Weekly Update",
"it": "Aggiornamento Settimanale"
}
}
}
],
"total": 2,
"page": 1,
"pageSize": 10,
"totalPages": 1,
"hasMorePages": false
}
Try it
Live
curl
Response
POST
/v2/contents/{contentTypeKey}/ids
V2
Get content IDs only (V2)
Returns only the IDs of matching content items using V2 filtering.
Requires
ReadAccess policy
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
contentTypeKey |
string | ✓ | The content type key |
Request Body application/json
| Property | Type | Required | Description |
|---|---|---|---|
filter |
object | — | Filter tree to restrict results |
page |
integer | — | Page number (1-based) |
pageSize |
integer | — | Number of items per page |
Responses
200
Success
ids |
string[] | Array of content item IDs |
total |
integer | Total matching items |
401
Unauthorized
Code examples
curl -X POST "https://api.contit.cloud/v2/contents/{contentTypeKey}/ids" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filter": "filter_value",
"page": 1,
"pageSize": 1
}'
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_API_KEY");
var content = new StringContent("{
\"filter\": \"filter_value\",
\"page\": 1,
\"pageSize\": 1
}",
Encoding.UTF8, "application/json");
var response = await http.PostAsync(
"https://api.contit.cloud/v2/contents/{contentTypeKey}/ids", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
const response = await fetch(
"https://api.contit.cloud/v2/contents/{contentTypeKey}/ids",
{
method: "POST",
headers: {
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
"filter": "filter_value",
"page": 1,
"pageSize": 1
})
}
);
const data = await response.json();
import requests
headers = {"X-Api-Key": "YOUR_API_KEY"}
payload = {
"filter": "filter_value",
"page": 1,
"pageSize": 1
}
response = requests.post(
"https://api.contit.cloud/v2/contents/{contentTypeKey}/ids",
json=payload,
headers=headers
)
data = response.json()
Example Request
{
"filter": {
"type": "and",
"conditions": [
{ "type": "condition", "fieldKey": "active", "operator": "e", "value": true }
]
},
"page": 1,
"pageSize": 50
}
Example Response
200
{
"ids": [
"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"b2c3d4e5-f6a7-8901-bcde-f12345678901"
],
"total": 2
}
Try it
Live
curl
Response
GET
/v2/contents/{contentTypeKey}/{id}
V2
Get single content (V2)
Retrieve a single content item by ID using the V2 flat-dictionary model.
Requires
ReadAccess policy
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
contentTypeKey |
string | ✓ | The content type key |
id |
string | ✓ | The content item ID (GUID) |
Responses
200
Success
id |
string | Content item ID |
fields |
object | Flat dictionary of field key to value |
translations |
object | Dictionary of field key to locale-value pairs |
401
Unauthorized
404
Not Found
Code examples
curl -X GET "https://api.contit.cloud/v2/contents/{contentTypeKey}/{id}" \
-H "X-Api-Key: YOUR_API_KEY"
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_API_KEY");
var response = await http.GetAsync("https://api.contit.cloud/v2/contents/{contentTypeKey}/{id}");
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
const response = await fetch(
"https://api.contit.cloud/v2/contents/{contentTypeKey}/{id}",
{
method: "GET",
headers: {
"X-Api-Key": "YOUR_API_KEY",
}
}
);
const data = await response.json();
import requests
headers = {"X-Api-Key": "YOUR_API_KEY"}
response = requests.get(
"https://api.contit.cloud/v2/contents/{contentTypeKey}/{id}",
headers=headers
)
data = response.json()
Example Response
200
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"fields": {
"title": "Breaking News",
"body": "<p>Full article content here.</p>",
"category": "news",
"publishDate": "2026-03-15T10:30:00Z",
"featured": true
},
"translations": {
"title": {
"en": "Breaking News",
"it": "Ultime Notizie"
},
"body": {
"en": "<p>Full article content here.</p>",
"it": "<p>Contenuto completo dell'articolo.</p>"
}
}
}
Try it
Live
curl
Response
PUT
/v2/contents/{contentTypeKey}
V2
Create or update content (V2)
Create a new content item (omit id) or update an existing one using the V2 flat-dictionary model with separate translations.
Requires
WriteAccess policy
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
contentTypeKey |
string | ✓ | The content type key |
Request Body application/json
| Property | Type | Required | Description |
|---|---|---|---|
id |
string | — | Content item ID. Omit or null to create a new item. |
fields |
object | ✓ | Flat dictionary of field key to value |
translations |
object | — | Dictionary of field key to locale-value pairs for localized fields |
clientInfo |
string | — | Optional client identifier for audit logging |
Responses
200
Success — returns the saved V2 content item
id |
string | Content item ID (generated if new) |
fields |
object | Flat dictionary of field key to value |
translations |
object | Translations dictionary |
401
Unauthorized
Code examples
curl -X PUT "https://api.contit.cloud/v2/contents/{contentTypeKey}" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "id_value",
"fields": "fields_value",
"translations": "translations_value",
"clientInfo": "clientInfo_value"
}'
var client = new ContitClient(
new ClientContitConfiguration(clientId, clientSecret));
await client.Content.AddOrUpdate(contentType, contentModel);
const response = await fetch(
"https://api.contit.cloud/v2/contents/{contentTypeKey}",
{
method: "PUT",
headers: {
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
"id": "id_value",
"fields": "fields_value",
"translations": "translations_value",
"clientInfo": "clientInfo_value"
})
}
);
const data = await response.json();
import requests
headers = {"X-Api-Key": "YOUR_API_KEY"}
payload = {
"id": "id_value",
"fields": "fields_value",
"translations": "translations_value",
"clientInfo": "clientInfo_value"
}
response = requests.put(
"https://api.contit.cloud/v2/contents/{contentTypeKey}",
json=payload,
headers=headers
)
data = response.json()
Example Request
{
"id": null,
"fields": {
"title": "New Article",
"body": "<p>Content goes here.</p>",
"category": "blog"
},
"translations": {
"title": {
"en": "New Article",
"it": "Nuovo Articolo"
},
"body": {
"en": "<p>Content goes here.</p>",
"it": "<p>Il contenuto va qui.</p>"
}
},
"clientInfo": "cms-editor-v2"
}
Example Response
200
{
"id": "c9d0e1f2-a3b4-5678-ghij-901234567890",
"fields": {
"title": "New Article",
"body": "<p>Content goes here.</p>",
"category": "blog"
},
"translations": {
"title": {
"en": "New Article",
"it": "Nuovo Articolo"
},
"body": {
"en": "<p>Content goes here.</p>",
"it": "<p>Il contenuto va qui.</p>"
}
}
}
Try it
Live
curl
Response