Create Custom Data Table
curl --request POST \
--url https://api.usesimple.ai/api/v1/data/tables \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"label": "<string>",
"columns": [
{
"name": "<string>",
"displayName": "<string>",
"referenceTable": "<string>",
"jsonSchema": {}
}
],
"searchIndexingEnabled": false
}
'import requests
url = "https://api.usesimple.ai/api/v1/data/tables"
payload = {
"name": "<string>",
"label": "<string>",
"columns": [
{
"name": "<string>",
"displayName": "<string>",
"referenceTable": "<string>",
"jsonSchema": {}
}
],
"searchIndexingEnabled": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
label: '<string>',
columns: [
{
name: '<string>',
displayName: '<string>',
referenceTable: '<string>',
jsonSchema: {}
}
],
searchIndexingEnabled: false
})
};
fetch('https://api.usesimple.ai/api/v1/data/tables', 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.usesimple.ai/api/v1/data/tables",
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([
'name' => '<string>',
'label' => '<string>',
'columns' => [
[
'name' => '<string>',
'displayName' => '<string>',
'referenceTable' => '<string>',
'jsonSchema' => [
]
]
],
'searchIndexingEnabled' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.usesimple.ai/api/v1/data/tables"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"label\": \"<string>\",\n \"columns\": [\n {\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"referenceTable\": \"<string>\",\n \"jsonSchema\": {}\n }\n ],\n \"searchIndexingEnabled\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.usesimple.ai/api/v1/data/tables")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"label\": \"<string>\",\n \"columns\": [\n {\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"referenceTable\": \"<string>\",\n \"jsonSchema\": {}\n }\n ],\n \"searchIndexingEnabled\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/data/tables")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"label\": \"<string>\",\n \"columns\": [\n {\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"referenceTable\": \"<string>\",\n \"jsonSchema\": {}\n }\n ],\n \"searchIndexingEnabled\": false\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"label": "<string>",
"searchIndexingEnabled": true,
"columns": [
{
"id": 123,
"name": "<string>",
"type": "STRING",
"displayName": "<string>",
"referenceTable": "<string>",
"jsonSchema": {},
"position": 123
}
],
"recordCount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}Custom Data
Create a Custom Data Table with the API
Create a Simple AI custom data table with a stable name, declared columns, and optional search indexing for application data.
POST
/
data
/
tables
Create Custom Data Table
curl --request POST \
--url https://api.usesimple.ai/api/v1/data/tables \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"label": "<string>",
"columns": [
{
"name": "<string>",
"displayName": "<string>",
"referenceTable": "<string>",
"jsonSchema": {}
}
],
"searchIndexingEnabled": false
}
'import requests
url = "https://api.usesimple.ai/api/v1/data/tables"
payload = {
"name": "<string>",
"label": "<string>",
"columns": [
{
"name": "<string>",
"displayName": "<string>",
"referenceTable": "<string>",
"jsonSchema": {}
}
],
"searchIndexingEnabled": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
label: '<string>',
columns: [
{
name: '<string>',
displayName: '<string>',
referenceTable: '<string>',
jsonSchema: {}
}
],
searchIndexingEnabled: false
})
};
fetch('https://api.usesimple.ai/api/v1/data/tables', 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.usesimple.ai/api/v1/data/tables",
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([
'name' => '<string>',
'label' => '<string>',
'columns' => [
[
'name' => '<string>',
'displayName' => '<string>',
'referenceTable' => '<string>',
'jsonSchema' => [
]
]
],
'searchIndexingEnabled' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.usesimple.ai/api/v1/data/tables"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"label\": \"<string>\",\n \"columns\": [\n {\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"referenceTable\": \"<string>\",\n \"jsonSchema\": {}\n }\n ],\n \"searchIndexingEnabled\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.usesimple.ai/api/v1/data/tables")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"label\": \"<string>\",\n \"columns\": [\n {\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"referenceTable\": \"<string>\",\n \"jsonSchema\": {}\n }\n ],\n \"searchIndexingEnabled\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/data/tables")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"label\": \"<string>\",\n \"columns\": [\n {\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"referenceTable\": \"<string>\",\n \"jsonSchema\": {}\n }\n ],\n \"searchIndexingEnabled\": false\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"label": "<string>",
"searchIndexingEnabled": true,
"columns": [
{
"id": 123,
"name": "<string>",
"type": "STRING",
"displayName": "<string>",
"referenceTable": "<string>",
"jsonSchema": {},
"position": 123
}
],
"recordCount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}After defining the schema, create custom data records in the new table.
Table and column names are stable identifiers used by the record endpoints. Use lowercase letters, numbers, and underscores.
For
REFERENCE columns, include referenceTable. For OBJECT columns, include jsonSchema.Authorizations
Body
application/json
Stable table identifier used in record endpoint paths.
Pattern:
^[a-z]([a-z0-9]+(_[a-z0-9]+)*)?$Human-readable table name shown in Simple AI.
Minimum array length:
1Show child attributes
Show child attributes
Whether this table can be searched with the custom data search and facets endpoints.
Last modified on September 3, 2026