curl --request POST \
--url https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"limit": 5000,
"offset": 500000,
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"record_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"sorts": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"direction": "asc"
}
],
"where": {
"items": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "condition",
"value": "<string>"
}
],
"joiner": "and"
}
}
'import requests
url = "https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/"
payload = {
"limit": 5000,
"offset": 500000,
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"record_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"sorts": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"direction": "asc"
}
],
"where": {
"items": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "condition",
"value": "<string>"
}
],
"joiner": "and"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
limit: 5000,
offset: 500000,
record_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
record_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
sorts: [{column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', direction: 'asc'}],
where: {
items: [
{
column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
type: 'condition',
value: '<string>'
}
],
joiner: 'and'
}
})
};
fetch('https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/', 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.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/",
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([
'limit' => 5000,
'offset' => 500000,
'record_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'record_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'sorts' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'direction' => 'asc'
]
],
'where' => [
'items' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'type' => 'condition',
'value' => '<string>'
]
],
'joiner' => 'and'
]
]),
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.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/"
payload := strings.NewReader("{\n \"limit\": 5000,\n \"offset\": 500000,\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"record_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"sorts\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"direction\": \"asc\"\n }\n ],\n \"where\": {\n \"items\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"condition\",\n \"value\": \"<string>\"\n }\n ],\n \"joiner\": \"and\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 5000,\n \"offset\": 500000,\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"record_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"sorts\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"direction\": \"asc\"\n }\n ],\n \"where\": {\n \"items\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"condition\",\n \"value\": \"<string>\"\n }\n ],\n \"joiner\": \"and\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"limit\": 5000,\n \"offset\": 500000,\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"record_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"sorts\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"direction\": \"asc\"\n }\n ],\n \"where\": {\n \"items\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"condition\",\n \"value\": \"<string>\"\n }\n ],\n \"joiner\": \"and\"\n }\n}"
response = http.request(request)
puts response.read_body{
"balance_sufficient": true,
"cells_total": 123,
"estimated_credits": 123,
"is_estimate": true,
"unit_price": 123,
"units": 123,
"columns": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"credits_at_most": 123,
"credits_usually": 123,
"display_name": "<string>"
}
],
"expected_credits": 0,
"export_writes": [
{
"action": "<string>",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"display_name": "<string>",
"integration_type": "<string>",
"record_type": "<string>",
"rows": 123
}
],
"requires_confirmation": false,
"rows_held_back": 0,
"rows_in_scope": 0,
"scope_too_large": false
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Estimate the credit cost of a column run
Estimate the credit cost of an on-demand column run without running it. Takes the same request body as the run endpoint so estimate and run can never disagree about scope. Free runs (formula/manual columns) estimate to zero and are always sufficient.
curl --request POST \
--url https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"limit": 5000,
"offset": 500000,
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"record_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"sorts": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"direction": "asc"
}
],
"where": {
"items": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "condition",
"value": "<string>"
}
],
"joiner": "and"
}
}
'import requests
url = "https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/"
payload = {
"limit": 5000,
"offset": 500000,
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"record_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"sorts": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"direction": "asc"
}
],
"where": {
"items": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "condition",
"value": "<string>"
}
],
"joiner": "and"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
limit: 5000,
offset: 500000,
record_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
record_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
sorts: [{column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', direction: 'asc'}],
where: {
items: [
{
column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
type: 'condition',
value: '<string>'
}
],
joiner: 'and'
}
})
};
fetch('https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/', 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.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/",
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([
'limit' => 5000,
'offset' => 500000,
'record_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'record_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'sorts' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'direction' => 'asc'
]
],
'where' => [
'items' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'type' => 'condition',
'value' => '<string>'
]
],
'joiner' => 'and'
]
]),
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.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/"
payload := strings.NewReader("{\n \"limit\": 5000,\n \"offset\": 500000,\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"record_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"sorts\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"direction\": \"asc\"\n }\n ],\n \"where\": {\n \"items\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"condition\",\n \"value\": \"<string>\"\n }\n ],\n \"joiner\": \"and\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 5000,\n \"offset\": 500000,\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"record_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"sorts\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"direction\": \"asc\"\n }\n ],\n \"where\": {\n \"items\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"condition\",\n \"value\": \"<string>\"\n }\n ],\n \"joiner\": \"and\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/run/estimate/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"limit\": 5000,\n \"offset\": 500000,\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"record_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"sorts\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"direction\": \"asc\"\n }\n ],\n \"where\": {\n \"items\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"condition\",\n \"value\": \"<string>\"\n }\n ],\n \"joiner\": \"and\"\n }\n}"
response = http.request(request)
puts response.read_body{
"balance_sufficient": true,
"cells_total": 123,
"estimated_credits": 123,
"is_estimate": true,
"unit_price": 123,
"units": 123,
"columns": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"credits_at_most": 123,
"credits_usually": 123,
"display_name": "<string>"
}
],
"expected_credits": 0,
"export_writes": [
{
"action": "<string>",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"display_name": "<string>",
"integration_type": "<string>",
"record_type": "<string>",
"rows": 123
}
],
"requires_confirmation": false,
"rows_held_back": 0,
"rows_in_scope": 0,
"scope_too_large": false
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Body
Scope for an on-demand recompute of one formula column.
Row scope: all | errored | unfilled | first_n | cell.
all, errored, unfilled, first_n, cell Row count for scope=first_n (default 10).
1 <= x <= 10000Starting-row offset in display order for scope=first_n; omit to start at the first row.
0 <= x <= 1000000The target row for scope=cell; see also record_ids.
The target rows for scope=cell: a swept selection re-runs in one request rather than one per cell. Wins over record_id when both are sent; scope=cell requires at least one of the two.
1000The grid's active smart view (errored or fully computed rows). ANDed with where.
errored, fully_computed The grid's active sort, so first_n means the first N rows the person can SEE rather than the first N in stored order. Ignored by every other scope.
8Show child attributes
Show child attributes
The grid's active filter, in the rows query's own vocabulary. Narrows every scope but cell to the matching rows: all runs every matching row (as an explicit list, so at most view_scope_max_rows may match), errored / unfilled keep only matching rows, first_n counts within them. Omit for the whole table.
Show child attributes
Show child attributes
Response
Successful Response
Estimated credit cost of an on-demand column run, before running it.
Free runs (formula/manual columns) estimate to zero and are always sufficient, even at a zero balance. The figure is an estimate: row counts and cell freshness can shift between estimating and running.
Whether the organization's available credits cover the estimate.
All cells the run would compute, charged or not.
The most the run can cost, in credits: every row of every paid column charged its full per-row price. What the credit hold and the confirmation gate reason about.
Always true: freshness and row counts can shift by run time.
Blended credits per charged cell (total estimate / units); 0 for free runs.
Cells that would incur a charge (0 for free runs).
Every enrichment or export column the run would work on, in the order it runs: the column asked for first, then the columns that read it. Each with the most its part can cost and what it usually costs.
Show child attributes
Show child attributes
What a run like this usually costs, in credits: a column charged by use (an AI column) at the share of its per-row maximum the same kind of cell has actually been charged (a typical share while there is no history yet), every other column at its price. Quote both: up to estimated_credits, usually about expected_credits. Equal to estimated_credits for a flat price (no column charged by use, as in a run of enrichments): then quote that one figure, without up to.
Export columns this run would fire. Present so the confirmation can name the destination, the object and the action instead of only a row count. Empty for a run that writes nothing outside this table.
Show child attributes
Show child attributes
True when the estimate crosses the confirmation threshold: ask before spending instead of running on first click.
Rows in scope the column's run condition would hold back. Already subtracted from rows_in_scope.
Rows the run would cover. This is what a scope choice is about, and what the credit estimate is derived from; cells_total also counts the dependent columns the run would recompute.
True when the filtered view names more rows than a run may be scoped to (view_scope_max_rows). rows_in_scope still carries the matching count; the run itself would be refused with scope_too_large. Narrow the filter, or run the whole table.
Was this page helpful?