curl --request POST \
--url https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-environment-id: <x-environment-id>' \
--header 'x-tenant-id: <x-tenant-id>' \
--header 'x-workspace-id: <x-workspace-id>' \
--data '
{
"sort_order": "<string>",
"sort_by": "<string>",
"limit": 123,
"offset": 123,
"fields": "<string>",
"parent_filter": [
{
"group": {
"rules": [
{
"field_name": "<string>",
"value": [
"<string>"
]
}
]
}
}
],
"child_filter": [
{
"group": {
"rules": [
{
"field_name": "<string>",
"value": [
"<string>"
]
}
]
},
"component_name": "<string>"
}
],
"relation_field": "<string>",
"relation_field_data_to_query": "<string>"
}
'import requests
url = "https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search"
payload = {
"sort_order": "<string>",
"sort_by": "<string>",
"limit": 123,
"offset": 123,
"fields": "<string>",
"parent_filter": [{ "group": { "rules": [
{
"field_name": "<string>",
"value": ["<string>"]
}
] } }],
"child_filter": [
{
"group": { "rules": [
{
"field_name": "<string>",
"value": ["<string>"]
}
] },
"component_name": "<string>"
}
],
"relation_field": "<string>",
"relation_field_data_to_query": "<string>"
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"x-workspace-id": "<x-workspace-id>",
"x-environment-id": "<x-environment-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
'x-workspace-id': '<x-workspace-id>',
'x-environment-id': '<x-environment-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sort_order: '<string>',
sort_by: '<string>',
limit: 123,
offset: 123,
fields: '<string>',
parent_filter: [{group: {rules: [{field_name: '<string>', value: ['<string>']}]}}],
child_filter: [
{
group: {rules: [{field_name: '<string>', value: ['<string>']}]},
component_name: '<string>'
}
],
relation_field: '<string>',
relation_field_data_to_query: '<string>'
})
};
fetch('https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search', 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://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search",
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([
'sort_order' => '<string>',
'sort_by' => '<string>',
'limit' => 123,
'offset' => 123,
'fields' => '<string>',
'parent_filter' => [
[
'group' => [
'rules' => [
[
'field_name' => '<string>',
'value' => [
'<string>'
]
]
]
]
]
],
'child_filter' => [
[
'group' => [
'rules' => [
[
'field_name' => '<string>',
'value' => [
'<string>'
]
]
]
],
'component_name' => '<string>'
]
],
'relation_field' => '<string>',
'relation_field_data_to_query' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-environment-id: <x-environment-id>",
"x-tenant-id: <x-tenant-id>",
"x-workspace-id: <x-workspace-id>"
],
]);
$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://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search"
payload := strings.NewReader("{\n \"sort_order\": \"<string>\",\n \"sort_by\": \"<string>\",\n \"limit\": 123,\n \"offset\": 123,\n \"fields\": \"<string>\",\n \"parent_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n }\n }\n ],\n \"child_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"component_name\": \"<string>\"\n }\n ],\n \"relation_field\": \"<string>\",\n \"relation_field_data_to_query\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
req.Header.Add("x-workspace-id", "<x-workspace-id>")
req.Header.Add("x-environment-id", "<x-environment-id>")
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://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search")
.header("x-tenant-id", "<x-tenant-id>")
.header("x-workspace-id", "<x-workspace-id>")
.header("x-environment-id", "<x-environment-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sort_order\": \"<string>\",\n \"sort_by\": \"<string>\",\n \"limit\": 123,\n \"offset\": 123,\n \"fields\": \"<string>\",\n \"parent_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n }\n }\n ],\n \"child_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"component_name\": \"<string>\"\n }\n ],\n \"relation_field\": \"<string>\",\n \"relation_field_data_to_query\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["x-workspace-id"] = '<x-workspace-id>'
request["x-environment-id"] = '<x-environment-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sort_order\": \"<string>\",\n \"sort_by\": \"<string>\",\n \"limit\": 123,\n \"offset\": 123,\n \"fields\": \"<string>\",\n \"parent_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n }\n }\n ],\n \"child_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"component_name\": \"<string>\"\n }\n ],\n \"relation_field\": \"<string>\",\n \"relation_field_data_to_query\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"Status": "success",
"Data": {
"records": [
{
"id": "<string>",
"version_no": 123,
"page_slug": "<string>",
"page_title": "<string>",
"version_name": "<string>",
"seo": [
{
"id": "<string>"
}
],
"thumbnail_image": [
"<string>"
],
"content_model_name": "<string>",
"current_version_id": "<string>",
"title": "<string>",
"version_id": "<string>",
"record_data_language": "<string>",
"categories": [
"<string>"
]
}
],
"_meta_": {
"tenant_id": "<string>",
"workspace_id": "<string>",
"env_type": "<string>",
"store_hash": "<string>",
"content_model_id": "<string>",
"_fields_": {}
},
"total_rows": 123,
"limit": 123,
"offset": 123
}
}{
"Status": "failure",
"Data": {
"Status": "failure",
"Error": {
"message": "<string>",
"name": "<string>",
"code": "<string>"
}
}
}{
"Status": "failure",
"Data": {
"Status": "failure",
"Error": {
"message": "<string>",
"name": "<string>",
"code": "<string>"
}
}
}{
"Status": "failure",
"Data": {
"Status": "failure",
"Error": {
"message": "<string>",
"name": "<string>",
"code": "<string>"
}
}
}Search Records
Perform an advanced search on a content model’s records using structured filter groups, sorting, pagination, and localization. Ideal for UIs that need dynamic, multi-criteria record retrieval.
curl --request POST \
--url https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-environment-id: <x-environment-id>' \
--header 'x-tenant-id: <x-tenant-id>' \
--header 'x-workspace-id: <x-workspace-id>' \
--data '
{
"sort_order": "<string>",
"sort_by": "<string>",
"limit": 123,
"offset": 123,
"fields": "<string>",
"parent_filter": [
{
"group": {
"rules": [
{
"field_name": "<string>",
"value": [
"<string>"
]
}
]
}
}
],
"child_filter": [
{
"group": {
"rules": [
{
"field_name": "<string>",
"value": [
"<string>"
]
}
]
},
"component_name": "<string>"
}
],
"relation_field": "<string>",
"relation_field_data_to_query": "<string>"
}
'import requests
url = "https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search"
payload = {
"sort_order": "<string>",
"sort_by": "<string>",
"limit": 123,
"offset": 123,
"fields": "<string>",
"parent_filter": [{ "group": { "rules": [
{
"field_name": "<string>",
"value": ["<string>"]
}
] } }],
"child_filter": [
{
"group": { "rules": [
{
"field_name": "<string>",
"value": ["<string>"]
}
] },
"component_name": "<string>"
}
],
"relation_field": "<string>",
"relation_field_data_to_query": "<string>"
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"x-workspace-id": "<x-workspace-id>",
"x-environment-id": "<x-environment-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
'x-workspace-id': '<x-workspace-id>',
'x-environment-id': '<x-environment-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sort_order: '<string>',
sort_by: '<string>',
limit: 123,
offset: 123,
fields: '<string>',
parent_filter: [{group: {rules: [{field_name: '<string>', value: ['<string>']}]}}],
child_filter: [
{
group: {rules: [{field_name: '<string>', value: ['<string>']}]},
component_name: '<string>'
}
],
relation_field: '<string>',
relation_field_data_to_query: '<string>'
})
};
fetch('https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search', 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://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search",
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([
'sort_order' => '<string>',
'sort_by' => '<string>',
'limit' => 123,
'offset' => 123,
'fields' => '<string>',
'parent_filter' => [
[
'group' => [
'rules' => [
[
'field_name' => '<string>',
'value' => [
'<string>'
]
]
]
]
]
],
'child_filter' => [
[
'group' => [
'rules' => [
[
'field_name' => '<string>',
'value' => [
'<string>'
]
]
]
],
'component_name' => '<string>'
]
],
'relation_field' => '<string>',
'relation_field_data_to_query' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-environment-id: <x-environment-id>",
"x-tenant-id: <x-tenant-id>",
"x-workspace-id: <x-workspace-id>"
],
]);
$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://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search"
payload := strings.NewReader("{\n \"sort_order\": \"<string>\",\n \"sort_by\": \"<string>\",\n \"limit\": 123,\n \"offset\": 123,\n \"fields\": \"<string>\",\n \"parent_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n }\n }\n ],\n \"child_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"component_name\": \"<string>\"\n }\n ],\n \"relation_field\": \"<string>\",\n \"relation_field_data_to_query\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
req.Header.Add("x-workspace-id", "<x-workspace-id>")
req.Header.Add("x-environment-id", "<x-environment-id>")
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://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search")
.header("x-tenant-id", "<x-tenant-id>")
.header("x-workspace-id", "<x-workspace-id>")
.header("x-environment-id", "<x-environment-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sort_order\": \"<string>\",\n \"sort_by\": \"<string>\",\n \"limit\": 123,\n \"offset\": 123,\n \"fields\": \"<string>\",\n \"parent_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n }\n }\n ],\n \"child_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"component_name\": \"<string>\"\n }\n ],\n \"relation_field\": \"<string>\",\n \"relation_field_data_to_query\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apis.experro.app/content/v2/content-models/{modelInternalName}/records/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["x-workspace-id"] = '<x-workspace-id>'
request["x-environment-id"] = '<x-environment-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sort_order\": \"<string>\",\n \"sort_by\": \"<string>\",\n \"limit\": 123,\n \"offset\": 123,\n \"fields\": \"<string>\",\n \"parent_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n }\n }\n ],\n \"child_filter\": [\n {\n \"group\": {\n \"rules\": [\n {\n \"field_name\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"component_name\": \"<string>\"\n }\n ],\n \"relation_field\": \"<string>\",\n \"relation_field_data_to_query\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"Status": "success",
"Data": {
"records": [
{
"id": "<string>",
"version_no": 123,
"page_slug": "<string>",
"page_title": "<string>",
"version_name": "<string>",
"seo": [
{
"id": "<string>"
}
],
"thumbnail_image": [
"<string>"
],
"content_model_name": "<string>",
"current_version_id": "<string>",
"title": "<string>",
"version_id": "<string>",
"record_data_language": "<string>",
"categories": [
"<string>"
]
}
],
"_meta_": {
"tenant_id": "<string>",
"workspace_id": "<string>",
"env_type": "<string>",
"store_hash": "<string>",
"content_model_id": "<string>",
"_fields_": {}
},
"total_rows": 123,
"limit": 123,
"offset": 123
}
}{
"Status": "failure",
"Data": {
"Status": "failure",
"Error": {
"message": "<string>",
"name": "<string>",
"code": "<string>"
}
}
}{
"Status": "failure",
"Data": {
"Status": "failure",
"Error": {
"message": "<string>",
"name": "<string>",
"code": "<string>"
}
}
}{
"Status": "failure",
"Data": {
"Status": "failure",
"Error": {
"message": "<string>",
"name": "<string>",
"code": "<string>"
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Identifier for the tenant. Ensures data isolation per tenant.
Workspace identifier within the tenant. Scopes resources to a specific workspace.
Unique identifier of the target environment. Used to scope the API call to a specific deployment environment.
"PRODUCTION-15a0f8c2-a5e8-4e40-ae74-cb1389d22f45-w49jkngj"
Path Parameters
Internal identifier of the content model to search (e.g. blogPost).
Query Parameters
Specifies the language or region for the response data
Flag to include meta details of the specified fields. When true, includes metadata for each returned field.
Body
Sort direction for records: asc(ascending) or desc(descending).
Field name to sort results by (e.g. created_at).
Maximum number of records to return. Default is 20.
Skips the specified number of results from the beginning.
Comma-separated list of fields to include (e.g. title,slug). Returns the specified fields in the result.
Filter applied to child components. Must include component_name to identify the relevant data.
Show child attributes
Show child attributes
Filter applied to child components. Must include component_name to identify the relevant data.
Show child attributes
Show child attributes
Defines the logical connection i.e., (AND/OR) between parent and child filters. Defaults to 'AND'.
AND, OR Determines which filter group (parent or child) takes priority. Defaults to parent.
parent, child Specifies the name of the related field used for joining models.
Comma-separated fields to include for related models in the result.
Lifecycle state ('PUBLISHED'/'DRAFT') of records to retrieve. Defaults to PUBLISHED.
PUBLISHED, DRAFT