curl --request POST \
--url https://api.example.com/v1/data-syncs/{sync_id}/snapshots \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source_operation_id": "<string>",
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"staged_pages": false
}
'import requests
url = "https://api.example.com/v1/data-syncs/{sync_id}/snapshots"
payload = {
"source_operation_id": "<string>",
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"staged_pages": False
}
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({
source_operation_id: '<string>',
expected_size_bytes: 4503599627370495,
sync_generation: '<string>',
staged_pages: false
})
};
fetch('https://api.example.com/v1/data-syncs/{sync_id}/snapshots', 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",
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([
'source_operation_id' => '<string>',
'expected_size_bytes' => 4503599627370495,
'sync_generation' => '<string>',
'staged_pages' => false
]),
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"
payload := strings.NewReader("{\n \"source_operation_id\": \"<string>\",\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"staged_pages\": false\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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source_operation_id\": \"<string>\",\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"staged_pages\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/data-syncs/{sync_id}/snapshots")
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 \"source_operation_id\": \"<string>\",\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"staged_pages\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"snapshot": {
"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>"
},
"replayed": true,
"uploadUrl": "<string>",
"expiresInSeconds": 123
}
}{
"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>"
}Create a provider snapshot upload
Create a generation-fenced streamed snapshot from one provider bulk operation.
Use direct upload for an immutable provider result URL, or staged pages for provider-owned cursor fanout. The source format selects REPLACE or UPSERT; only REPLACE deletes destination rows absent from the snapshot. Replaying the same operation is idempotent.
curl --request POST \
--url https://api.example.com/v1/data-syncs/{sync_id}/snapshots \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source_operation_id": "<string>",
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"staged_pages": false
}
'import requests
url = "https://api.example.com/v1/data-syncs/{sync_id}/snapshots"
payload = {
"source_operation_id": "<string>",
"expected_size_bytes": 4503599627370495,
"sync_generation": "<string>",
"staged_pages": False
}
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({
source_operation_id: '<string>',
expected_size_bytes: 4503599627370495,
sync_generation: '<string>',
staged_pages: false
})
};
fetch('https://api.example.com/v1/data-syncs/{sync_id}/snapshots', 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",
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([
'source_operation_id' => '<string>',
'expected_size_bytes' => 4503599627370495,
'sync_generation' => '<string>',
'staged_pages' => false
]),
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"
payload := strings.NewReader("{\n \"source_operation_id\": \"<string>\",\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"staged_pages\": false\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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source_operation_id\": \"<string>\",\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"staged_pages\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/data-syncs/{sync_id}/snapshots")
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 \"source_operation_id\": \"<string>\",\n \"expected_size_bytes\": 4503599627370495,\n \"sync_generation\": \"<string>\",\n \"staged_pages\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"snapshot": {
"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>"
},
"replayed": true,
"uploadUrl": "<string>",
"expiresInSeconds": 123
}
}{
"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.
1Body
One completed provider bulk operation ready for streaming handoff.
Stable provider operation or fanout-manifest identifier used to make snapshot creation idempotent.
1 - 255Versioned provider export format; selects parsing and REPLACE or UPSERT mutation mode.
SHOPIFY_GRAPHQL_JSONL_2026_01, SALESFORCE_BULK_CSV_2026_09, SALESFORCE_BULK_CSV_UPSERT_2026_09 Exact bulk-result byte size, or zero when staged pages supply the authoritative manifest.
0 <= x <= 9007199254740991Current installed recipe generation; stale generations cannot create or commit a snapshot.
1 - 255Whether the snapshot is assembled from immutable numbered pages instead of one direct upload.
Response
Successful Response
Provider snapshot creation result.
Show child attributes
Show child attributes