curl --request GET \
--url https://sync.useparagon.com/api/syncs/{syncId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sync.useparagon.com/api/syncs/{syncId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sync.useparagon.com/api/syncs/{syncId}', 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://sync.useparagon.com/api/syncs/{syncId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://sync.useparagon.com/api/syncs/{syncId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sync.useparagon.com/api/syncs/{syncId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sync.useparagon.com/api/syncs/{syncId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status": "IDLE",
"credentialId": "0aea7d3a-b5f7-4488-890e-d51a5cf4f8f1",
"summary": {
"totalRecords": 1000,
"syncedRecordsCount": 1000,
"lastSyncedAt": "2026-08-20T19:00:00.000Z"
}
}Get Sync Status
Get the current status of a Sync
curl --request GET \
--url https://sync.useparagon.com/api/syncs/{syncId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sync.useparagon.com/api/syncs/{syncId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sync.useparagon.com/api/syncs/{syncId}', 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://sync.useparagon.com/api/syncs/{syncId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://sync.useparagon.com/api/syncs/{syncId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sync.useparagon.com/api/syncs/{syncId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sync.useparagon.com/api/syncs/{syncId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status": "IDLE",
"credentialId": "0aea7d3a-b5f7-4488-890e-d51a5cf4f8f1",
"summary": {
"totalRecords": 1000,
"syncedRecordsCount": 1000,
"lastSyncedAt": "2026-08-20T19:00:00.000Z"
}
}Authorizations
Paragon User Token. Add to the Authorization header of your requests.
Path Parameters
ID of the sync to get the status of
Response
Sync status
Current state of Sync activity. Possible values:
INITIALIZING: The Sync has just been created and is pending its first run.ACTIVE: The Sync is actively fetching new data.IDLE: The Sync has completed and is watching for updates to synced data.- Check
summary.lastSyncedAtto see if the sync has successfully completed.
- Check
RATE_LIMITED: The Sync is backing off because the third-party API's rate limit was reached. CheckrateLimitBackoffMsfor the back-off duration. The Sync resumes automatically once the back-off period passes.DISABLED: The Sync has been paused temporarily by the Disable a Sync endpoint.ERRORED: The Sync has been suspended due to an error. Check theerrorCode,reason, andhttpStatusCodefields on the Sync status for details, or Webhook Events for thesync_erroredevent.DELETING: The Sync is being deleted and its synced data is being removed.
INITIALIZING, ACTIVE, IDLE, RATE_LIMITED, DISABLED, ERRORED, DELETING Metrics on the sync progress and last seen record timestamps
Show child attributes
Show child attributes
The ID of the credential used to authenticate this Sync
The configured incremental sync frequency for this Sync. Only present when explicitly set on the Sync.
1m, 5m, 10m, 30m, 1h, 3h, 6h, 24h "1m"
If the sync status is RATE_LIMITED, the duration (in milliseconds) that the Sync is backing off before it resumes fetching data, in response to the third-party API's rate limit.
The Sync resumes automatically once this back-off period has passed. We recommend waiting at least this long before polling the Sync status again.
30000
If the sync status is ERRORED, a stable code identifying the error that suspended the Sync. Use this field for programmatic handling. See the error code reference for the full list of codes and suggested actions.
"PROXY_7300"
If the sync status is ERRORED, this field will be populated with a message explaining why the sync failed. The message is captured at the time of failure and reflects the exact error the Sync encountered.
"Credential ID [id] is no longer valid or has been deleted."
If the sync status is ERRORED and the failure came from a third-party API request, the HTTP status code returned by that API (for example, 401 or 403). Only present when an HTTP status was captured at the time of failure.
401
Was this page helpful?