curl --request POST \
--url https://api.getoneprofile.ai/tables/{table_id}/source/run/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"delete_missing_rows": false,
"full_relist": false
}
'import requests
url = "https://api.getoneprofile.ai/tables/{table_id}/source/run/"
payload = {
"delete_missing_rows": False,
"full_relist": False
}
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({delete_missing_rows: false, full_relist: false})
};
fetch('https://api.getoneprofile.ai/tables/{table_id}/source/run/', 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}/source/run/",
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([
'delete_missing_rows' => false,
'full_relist' => false
]),
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}/source/run/"
payload := strings.NewReader("{\n \"delete_missing_rows\": false,\n \"full_relist\": false\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}/source/run/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"delete_missing_rows\": false,\n \"full_relist\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/tables/{table_id}/source/run/")
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 \"delete_missing_rows\": false,\n \"full_relist\": false\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"finished_at": "2023-11-07T05:31:56Z",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"identity_field": "<string>",
"is_full_relist": true,
"rows_created": 123,
"rows_deleted": 123,
"rows_skipped": 123,
"rows_skipped_duplicate": 123,
"rows_skipped_no_identity": 123,
"rows_updated": 123,
"source_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"started_at": "2023-11-07T05:31:56Z",
"status": "running",
"stopped_at_row_limit": 123,
"sweep_deletions": true,
"table_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"trigger": "initial",
"error_code": "<string>",
"needs_reconnect": false
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Refresh a table from its source now
Start an import immediately. Where the provider supports it and the table has synced before, only records changed since the last successful run are fetched; otherwise everything is re-listed.
full_relist re-fetches every record without deleting anything. delete_missing_rows additionally removes rows whose records the source no longer returns: a separate, destructive ask, refused while the source has a row limit.
Refused while an import is already running: two concurrent imports would race the same rows.
curl --request POST \
--url https://api.getoneprofile.ai/tables/{table_id}/source/run/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"delete_missing_rows": false,
"full_relist": false
}
'import requests
url = "https://api.getoneprofile.ai/tables/{table_id}/source/run/"
payload = {
"delete_missing_rows": False,
"full_relist": False
}
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({delete_missing_rows: false, full_relist: false})
};
fetch('https://api.getoneprofile.ai/tables/{table_id}/source/run/', 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}/source/run/",
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([
'delete_missing_rows' => false,
'full_relist' => false
]),
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}/source/run/"
payload := strings.NewReader("{\n \"delete_missing_rows\": false,\n \"full_relist\": false\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}/source/run/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"delete_missing_rows\": false,\n \"full_relist\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/tables/{table_id}/source/run/")
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 \"delete_missing_rows\": false,\n \"full_relist\": false\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"finished_at": "2023-11-07T05:31:56Z",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"identity_field": "<string>",
"is_full_relist": true,
"rows_created": 123,
"rows_deleted": 123,
"rows_skipped": 123,
"rows_skipped_duplicate": 123,
"rows_skipped_no_identity": 123,
"rows_updated": 123,
"source_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"started_at": "2023-11-07T05:31:56Z",
"status": "running",
"stopped_at_row_limit": 123,
"sweep_deletions": true,
"table_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"trigger": "initial",
"error_code": "<string>",
"needs_reconnect": 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
Path Parameters
Body
What kind of refresh to run.
Two independent asks, not one dial. Re-fetching every record is safe and routine; deleting local rows whose records are gone is destructive and deliberate. Both default to off, so a plain refresh stays the cheap incremental one.
Delete imported rows whose records the source no longer returns. Implies a full re-list, and is refused while the source has a row limit: a capped import cannot tell a deleted record from one it never fetched.
Re-fetch every record instead of only those changed since the last run. Updates rows; never deletes any.
Response
Successful Response
One import run's progress and outcome.
The field records were matched on during this run. Null for a run from before this was recorded; read the source's current identity_field instead in that case.
Whether this run asked the provider for everything.
Records the run read and left out, broken down by the two counts below. Stopping at the row limit is not a skip; see stopped_at_row_limit.
Of those, records whose match value an earlier, different record in the same page already had; only the first was added.
Of those, records that came back with no value for the field rows are matched on, so there was no row for them to be.
Where one import run has got to.
The terminal states are absorbing: a run never leaves them. There is no PENDING here. Unlike a CSV upload, which sits parsed and uncommitted until the user says go, a source run is only ever created at the moment something decides to run it.
CANCELLING is a request, not an outcome. Stopping an import is a database status flip the workflow observes between pages, never a Temporal terminate: a terminate could land mid-page and leave rows half-written with nothing to settle the run, which is exactly the stuck state that blocks every future refresh of the table.
running, cancelling, cancelled, succeeded, failed The row limit this run stopped at with records still unread in the tool; null when it read everything it was asked for. Raising the source's row_limit brings the rest in.
Whether this run was asked to delete rows whose records are gone from the tool. A run that stopped at a row limit (stopped_at_row_limit) deletes nothing, because it has not read the whole tool.
What asked for a run.
initial, manual, scheduled Classified cause of the failure: unauthorized, rate_limited, server_unavailable, network_error, not_found, pagination_error, bad_request. NULL when the run did not fail.
Whether fixing this means reconnecting the integration. Only true for a credentials failure, so the prompt keeps its meaning.
Was this page helpful?