curl --request POST \
--url https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"etag": "",
"page_count": 0
}
'import requests
url = "https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete"
payload = {
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"etag": "",
"page_count": 0
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
expected_size_bytes: 4503599627370495,
sync_generation: '<string>',
etag: '',
page_count: 0
})
};
fetch('https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete', 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.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete",
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([
'expected_size_bytes' => 4503599627370495,
'sync_generation' => '<string>',
'etag' => '',
'page_count' => 0
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete"
payload := strings.NewReader("{\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"etag\": \"\",\n \"page_count\": 0\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"etag\": \"\",\n \"page_count\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"etag\": \"\",\n \"page_count\": 0\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"mode": "REPLACE",
"status": "CREATING",
"sourceWatermark": "<string>",
"expectedSizeBytes": "<string>",
"expectedSha256": "<string>",
"rowsBefore": "<string>",
"rowsAfter": "<string>",
"rowsInserted": "<string>",
"rowsUpdated": "<string>",
"rowsDeleted": "<string>",
"rowsSkipped": "<string>",
"tableId": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"completedAt": "<string>"
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}Commit a provider snapshot
Seal and apply a provider snapshot using its REPLACE or UPSERT mode.
Explicit confirmation is required. REPLACE deletes rows absent from the completed snapshot; UPSERT retains them. Poll status until terminal.
curl --request POST \
--url https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"etag": "",
"page_count": 0
}
'import requests
url = "https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete"
payload = {
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"etag": "",
"page_count": 0
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
expected_size_bytes: 4503599627370495,
sync_generation: '<string>',
etag: '',
page_count: 0
})
};
fetch('https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete', 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.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete",
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([
'expected_size_bytes' => 4503599627370495,
'sync_generation' => '<string>',
'etag' => '',
'page_count' => 0
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete"
payload := strings.NewReader("{\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"etag\": \"\",\n \"page_count\": 0\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"etag\": \"\",\n \"page_count\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/data-syncs/{sync_id}/snapshots/{snapshot_id}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"etag\": \"\",\n \"page_count\": 0\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"mode": "REPLACE",
"status": "CREATING",
"sourceWatermark": "<string>",
"expectedSizeBytes": "<string>",
"expectedSha256": "<string>",
"rowsBefore": "<string>",
"rowsAfter": "<string>",
"rowsInserted": "<string>",
"rowsUpdated": "<string>",
"rowsDeleted": "<string>",
"rowsSkipped": "<string>",
"tableId": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"completedAt": "<string>"
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
Configured source sync receiving the page.
1Ingestion batch identifier returned by batch creation.
1Query Parameters
Required to commit; REPLACE snapshots may delete absent rows.
Body
Exact uploaded bulk-result byte size, or zero for a staged-page snapshot.
0 <= x <= 9007199254740991Current installed recipe generation that must match the generation used at snapshot creation.
1 - 255Object-storage ETag returned by the direct upload; omit for staged-page snapshots.
128Exact contiguous staged-page count; zero for a direct-upload snapshot.
0 <= x <= 100000Response
Successful Response
Current provider snapshot state and row counts.
Show child attributes
Show child attributes