curl --request PUT \
--url https://api.getdialed.ai/v1/data/stores/{store}/precedence \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"default_order": [
"manual",
"csv_file",
"crm",
"five9_report"
],
"field_overrides": {
"owner_team": [
"manual",
"crm"
]
}
}
'import requests
url = "https://api.getdialed.ai/v1/data/stores/{store}/precedence"
payload = {
"default_order": ["manual", "csv_file", "crm", "five9_report"],
"field_overrides": { "owner_team": ["manual", "crm"] }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
default_order: ['manual', 'csv_file', 'crm', 'five9_report'],
field_overrides: {owner_team: ['manual', 'crm']}
})
};
fetch('https://api.getdialed.ai/v1/data/stores/{store}/precedence', 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.getdialed.ai/v1/data/stores/{store}/precedence",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'default_order' => [
'manual',
'csv_file',
'crm',
'five9_report'
],
'field_overrides' => [
'owner_team' => [
'manual',
'crm'
]
]
]),
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.getdialed.ai/v1/data/stores/{store}/precedence"
payload := strings.NewReader("{\n \"default_order\": [\n \"manual\",\n \"csv_file\",\n \"crm\",\n \"five9_report\"\n ],\n \"field_overrides\": {\n \"owner_team\": [\n \"manual\",\n \"crm\"\n ]\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.getdialed.ai/v1/data/stores/{store}/precedence")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"default_order\": [\n \"manual\",\n \"csv_file\",\n \"crm\",\n \"five9_report\"\n ],\n \"field_overrides\": {\n \"owner_team\": [\n \"manual\",\n \"crm\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/data/stores/{store}/precedence")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"default_order\": [\n \"manual\",\n \"csv_file\",\n \"crm\",\n \"five9_report\"\n ],\n \"field_overrides\": {\n \"owner_team\": [\n \"manual\",\n \"crm\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"config_version": 2,
"default_order": [
"manual",
"csv_file",
"crm",
"five9_report"
],
"field_overrides": {
"owner_team": [
"manual",
"crm"
]
},
"recompute": {
"pending": 4231
},
"store": "company-phone-numbers",
"updated_at": "2026-08-20T12:00:00Z"
}{
"detail": "Authentication required"
}{
"detail": "Admin role required"
}{
"detail": "Store not found"
}{
"detail": "Validation error"
}{
"detail": "Rate limit exceeded"
}Set a store's precedence settings
Replaces this store’s precedence settings and returns the new version. Reordering sources changes which value resolves WITHOUT rewriting any source’s own data — every record’s resolved view is recomputed in the background, and recompute.pending reaching zero is how you know the window has closed. Every source and field you name must be one the store declares: precedence may reorder or restrict the declared set, never extend it. Requires an admin role.
curl --request PUT \
--url https://api.getdialed.ai/v1/data/stores/{store}/precedence \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"default_order": [
"manual",
"csv_file",
"crm",
"five9_report"
],
"field_overrides": {
"owner_team": [
"manual",
"crm"
]
}
}
'import requests
url = "https://api.getdialed.ai/v1/data/stores/{store}/precedence"
payload = {
"default_order": ["manual", "csv_file", "crm", "five9_report"],
"field_overrides": { "owner_team": ["manual", "crm"] }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
default_order: ['manual', 'csv_file', 'crm', 'five9_report'],
field_overrides: {owner_team: ['manual', 'crm']}
})
};
fetch('https://api.getdialed.ai/v1/data/stores/{store}/precedence', 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.getdialed.ai/v1/data/stores/{store}/precedence",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'default_order' => [
'manual',
'csv_file',
'crm',
'five9_report'
],
'field_overrides' => [
'owner_team' => [
'manual',
'crm'
]
]
]),
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.getdialed.ai/v1/data/stores/{store}/precedence"
payload := strings.NewReader("{\n \"default_order\": [\n \"manual\",\n \"csv_file\",\n \"crm\",\n \"five9_report\"\n ],\n \"field_overrides\": {\n \"owner_team\": [\n \"manual\",\n \"crm\"\n ]\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.getdialed.ai/v1/data/stores/{store}/precedence")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"default_order\": [\n \"manual\",\n \"csv_file\",\n \"crm\",\n \"five9_report\"\n ],\n \"field_overrides\": {\n \"owner_team\": [\n \"manual\",\n \"crm\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/data/stores/{store}/precedence")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"default_order\": [\n \"manual\",\n \"csv_file\",\n \"crm\",\n \"five9_report\"\n ],\n \"field_overrides\": {\n \"owner_team\": [\n \"manual\",\n \"crm\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"config_version": 2,
"default_order": [
"manual",
"csv_file",
"crm",
"five9_report"
],
"field_overrides": {
"owner_team": [
"manual",
"crm"
]
},
"recompute": {
"pending": 4231
},
"store": "company-phone-numbers",
"updated_at": "2026-08-20T12:00:00Z"
}{
"detail": "Authentication required"
}{
"detail": "Admin role required"
}{
"detail": "Store not found"
}{
"detail": "Validation error"
}{
"detail": "Rate limit exceeded"
}Authorizations
Path Parameters
Body
New precedence settings for one store.
The order you send replaces your settings wholesale: default_order is the
order every field resolves by, and field_overrides names the fields that
depart from it. Omitting field_overrides removes every override.
Both may only reorder or restrict the sources the store declares — a name the store does not declare is refused, so a precedence change can never introduce a source or a field. Names are limited to letters, digits and underscores.
The order every field resolves by unless it is overridden. The first source in the order that asserts a value wins, and the order is also the list of sources allowed to write.
6464Per-field orders that depart from the default, keyed by field name. A field absent here uses default_order.
Show child attributes
Show child attributes
Response
Successful Response
One store's precedence settings, with their version and recompute state.
This is the standalone precedence resource. The store detail response carries the same order and overrides as a nested fragment; this one adds the version stamp, when it last moved, and how much of the store is still catching up.
The store these settings belong to, by its URL slug.
The order every field resolves by unless it is overridden.
Version of these settings. It increases on every change, including a change that reverts to the defaults. Every record records the version its resolved view was computed with, which is what makes a view left behind by a precedence change detectable — and what lets a resolved value be explained after the fact.
Whether every record's resolved view reflects the current precedence.
Changing precedence invalidates the resolved views computed under the old
settings, and they are recomputed in the background. While that is running,
bulk queries legitimately mix records resolved under the old precedence with
records resolved under the new one. pending reaching zero is how you know
the window has closed.
Show child attributes
Show child attributes
Per-field orders that depart from the default. A field absent here uses default_order.
Show child attributes
Show child attributes
When these settings last changed. Null means they have never been changed and are the store's shipped defaults.