curl --request POST \
--url https://{instance}.domo.com/api/datastores/v1/collections \
--header 'Content-Type: application/json' \
--header 'X-DOMO-Developer-Token: <api-key>' \
--data '
{
"name": "users",
"syncEnabled": true,
"schema": {
"columns": [
{
"name": "username",
"type": "STRING"
},
{
"name": "email",
"type": "STRING"
}
]
}
}
'import requests
url = "https://{instance}.domo.com/api/datastores/v1/collections"
payload = {
"name": "users",
"syncEnabled": True,
"schema": { "columns": [
{
"name": "username",
"type": "STRING"
},
{
"name": "email",
"type": "STRING"
}
] }
}
headers = {
"X-DOMO-Developer-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-DOMO-Developer-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'users',
syncEnabled: true,
schema: {columns: [{name: 'username', type: 'STRING'}, {name: 'email', type: 'STRING'}]}
})
};
fetch('https://{instance}.domo.com/api/datastores/v1/collections', 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://{instance}.domo.com/api/datastores/v1/collections",
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' => 'users',
'syncEnabled' => true,
'schema' => [
'columns' => [
[
'name' => 'username',
'type' => 'STRING'
],
[
'name' => 'email',
'type' => 'STRING'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-DOMO-Developer-Token: <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://{instance}.domo.com/api/datastores/v1/collections"
payload := strings.NewReader("{\n \"name\": \"users\",\n \"syncEnabled\": true,\n \"schema\": {\n \"columns\": [\n {\n \"name\": \"username\",\n \"type\": \"STRING\"\n },\n {\n \"name\": \"email\",\n \"type\": \"STRING\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-DOMO-Developer-Token", "<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://{instance}.domo.com/api/datastores/v1/collections")
.header("X-DOMO-Developer-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"users\",\n \"syncEnabled\": true,\n \"schema\": {\n \"columns\": [\n {\n \"name\": \"username\",\n \"type\": \"STRING\"\n },\n {\n \"name\": \"email\",\n \"type\": \"STRING\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{instance}.domo.com/api/datastores/v1/collections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-DOMO-Developer-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"users\",\n \"syncEnabled\": true,\n \"schema\": {\n \"columns\": [\n {\n \"name\": \"username\",\n \"type\": \"STRING\"\n },\n {\n \"name\": \"email\",\n \"type\": \"STRING\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "232e6d6c-46e9-49b6-a137-8933f0f05999",
"datastoreId": "39b88a97-8247-4c0d-ba1d-8ed78d1a6680",
"defaultPermissions": null,
"requiredAuthorities": null,
"owner": 870010733,
"name": "users",
"datasourceId": null,
"schema": {
"columns": [
{
"type": "STRING",
"name": "username"
},
{
"type": "STRING",
"name": "email"
}
]
},
"filters": null,
"syncEnabled": true,
"syncRequired": false,
"fullReplaceRequired": false,
"lastSync": null,
"createdOn": "2024-01-15T18:42:30.115Z",
"updatedOn": "2024-01-15T18:42:30.115Z",
"updatedBy": 870010733
}Create Collection
Create a new collection in a datastore. Pass datastoreId as a query parameter.
If you plan to use sync, note the following:
Date formatting: Documents containing DATE or DATETIME data must use the format YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ to sync correctly.
Only top-level fields can be synced. Column names must be top-level keys in the document’s content object; dot notation does not traverse nested objects during sync. To include a nested object, use the top-level key name (e.g., wand) — the synced value will be the JSON string representation of that object (e.g., {"wood":"holly","core":"phoenix feather","length":11}).
Incorrect schema types prevent DataSet creation. The accepted column types are STRING · LONG · DECIMAL · DOUBLE · DATE · DATETIME. If your AppDB DataSet doesn’t appear after 15 minutes, verify your schema uses only these values — common mistakes include NUMBER or INTEGER.
Collections won’t sync if the collection owner lacks permissions on the target DataSet. If that user is removed from Domo, syncing stops. The new owner must have both Collection ownership and Admin Permissions.
curl --request POST \
--url https://{instance}.domo.com/api/datastores/v1/collections \
--header 'Content-Type: application/json' \
--header 'X-DOMO-Developer-Token: <api-key>' \
--data '
{
"name": "users",
"syncEnabled": true,
"schema": {
"columns": [
{
"name": "username",
"type": "STRING"
},
{
"name": "email",
"type": "STRING"
}
]
}
}
'import requests
url = "https://{instance}.domo.com/api/datastores/v1/collections"
payload = {
"name": "users",
"syncEnabled": True,
"schema": { "columns": [
{
"name": "username",
"type": "STRING"
},
{
"name": "email",
"type": "STRING"
}
] }
}
headers = {
"X-DOMO-Developer-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-DOMO-Developer-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'users',
syncEnabled: true,
schema: {columns: [{name: 'username', type: 'STRING'}, {name: 'email', type: 'STRING'}]}
})
};
fetch('https://{instance}.domo.com/api/datastores/v1/collections', 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://{instance}.domo.com/api/datastores/v1/collections",
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' => 'users',
'syncEnabled' => true,
'schema' => [
'columns' => [
[
'name' => 'username',
'type' => 'STRING'
],
[
'name' => 'email',
'type' => 'STRING'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-DOMO-Developer-Token: <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://{instance}.domo.com/api/datastores/v1/collections"
payload := strings.NewReader("{\n \"name\": \"users\",\n \"syncEnabled\": true,\n \"schema\": {\n \"columns\": [\n {\n \"name\": \"username\",\n \"type\": \"STRING\"\n },\n {\n \"name\": \"email\",\n \"type\": \"STRING\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-DOMO-Developer-Token", "<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://{instance}.domo.com/api/datastores/v1/collections")
.header("X-DOMO-Developer-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"users\",\n \"syncEnabled\": true,\n \"schema\": {\n \"columns\": [\n {\n \"name\": \"username\",\n \"type\": \"STRING\"\n },\n {\n \"name\": \"email\",\n \"type\": \"STRING\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{instance}.domo.com/api/datastores/v1/collections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-DOMO-Developer-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"users\",\n \"syncEnabled\": true,\n \"schema\": {\n \"columns\": [\n {\n \"name\": \"username\",\n \"type\": \"STRING\"\n },\n {\n \"name\": \"email\",\n \"type\": \"STRING\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "232e6d6c-46e9-49b6-a137-8933f0f05999",
"datastoreId": "39b88a97-8247-4c0d-ba1d-8ed78d1a6680",
"defaultPermissions": null,
"requiredAuthorities": null,
"owner": 870010733,
"name": "users",
"datasourceId": null,
"schema": {
"columns": [
{
"type": "STRING",
"name": "username"
},
{
"type": "STRING",
"name": "email"
}
]
},
"filters": null,
"syncEnabled": true,
"syncRequired": false,
"fullReplaceRequired": false,
"lastSync": null,
"createdOn": "2024-01-15T18:42:30.115Z",
"updatedOn": "2024-01-15T18:42:30.115Z",
"updatedBy": 870010733
}Authorizations
Domo Developer Token for authentication.
Query Parameters
The ID of the datastore to create the collection in.
Body
Response
Collection created.
Unique identifier for the collection.
ID of the datastore this collection belongs to.
Comma-separated default permission set for new app grants on this collection, or null if not set.
Maps CollectionOperation names to required authority strings, or null if not set.
User ID of the collection owner.
Name of the collection.
ID of the linked Domo DataSet, or null if not yet linked.
Show child attributes
Show child attributes
Array of document-level filter predicates applied to read operations, or null if not set.
Whether documents are periodically synced to the linked DataSet.
Whether a sync is pending.

