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 an authoritative provider snapshot
Seal and apply an authoritative snapshot as an atomic table replacement.
Explicit confirmation is required because records absent from the completed snapshot are deleted. Poll the snapshot status endpoint 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 because snapshot replacement 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 authoritative snapshot state and row counts.
Show child attributes
Show child attributes