curl --request GET \
--url https://api.getoneprofile.ai/table-sources/runs/{run_id}/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/table-sources/runs/{run_id}/"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/table-sources/runs/{run_id}/', 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/table-sources/runs/{run_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/table-sources/runs/{run_id}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.getoneprofile.ai/table-sources/runs/{run_id}/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/table-sources/runs/{run_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
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>"
}Get an import run's status
Poll an import’s progress. rows_created and rows_updated climb while it runs; status reaches succeeded or failed and stays there.
rows_skipped counts records the run read and left out, split by why: rows_skipped_no_identity came back with no value for the field rows are matched on, rows_skipped_duplicate shared their match value with an earlier record in the same page. The skipped-records route names them. stopped_at_row_limit says the run stopped at the source’s row limit with records still unread in the tool, which is not a skip.
curl --request GET \
--url https://api.getoneprofile.ai/table-sources/runs/{run_id}/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/table-sources/runs/{run_id}/"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/table-sources/runs/{run_id}/', 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/table-sources/runs/{run_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/table-sources/runs/{run_id}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.getoneprofile.ai/table-sources/runs/{run_id}/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/table-sources/runs/{run_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
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
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?