curl --request POST \
--url https://api.example.com/v1/data-syncs/{sync_id}/pages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"expected_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"next_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"records": [
{}
],
"record_cursors": [
{
"lastmodifieddate": "<string>",
"id": "<string>"
}
]
}
'import requests
url = "https://api.example.com/v1/data-syncs/{sync_id}/pages"
payload = {
"idempotency_key": "<string>",
"expected_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"next_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"records": [{}],
"record_cursors": [
{
"lastmodifieddate": "<string>",
"id": "<string>"
}
]
}
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({
idempotency_key: '<string>',
expected_checkpoint: {backfillUpperBound: '<string>', lastmodifieddate: '<string>', id: '<string>'},
next_checkpoint: {backfillUpperBound: '<string>', lastmodifieddate: '<string>', id: '<string>'},
records: [{}],
record_cursors: [{lastmodifieddate: '<string>', id: '<string>'}]
})
};
fetch('https://api.example.com/v1/data-syncs/{sync_id}/pages', 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}/pages",
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([
'idempotency_key' => '<string>',
'expected_checkpoint' => [
'backfillUpperBound' => '<string>',
'lastmodifieddate' => '<string>',
'id' => '<string>'
],
'next_checkpoint' => [
'backfillUpperBound' => '<string>',
'lastmodifieddate' => '<string>',
'id' => '<string>'
],
'records' => [
[
]
],
'record_cursors' => [
[
'lastmodifieddate' => '<string>',
'id' => '<string>'
]
]
]),
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}/pages"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"expected_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"next_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"records\": [\n {}\n ],\n \"record_cursors\": [\n {\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\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}/pages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"expected_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"next_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"records\": [\n {}\n ],\n \"record_cursors\": [\n {\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/data-syncs/{sync_id}/pages")
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 \"idempotency_key\": \"<string>\",\n \"expected_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"next_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"records\": [\n {}\n ],\n \"record_cursors\": [\n {\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"page": {
"id": "<string>",
"sync_id": "<string>",
"committed_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"row_count": 123,
"rows_inserted": 123,
"rows_updated": 123,
"rows_skipped": 123,
"error_code": "<string>",
"error_message": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>"
},
"replayed": true
}
}{
"data": {
"page": {
"id": "<string>",
"sync_id": "<string>",
"committed_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"row_count": 123,
"rows_inserted": 123,
"rows_updated": 123,
"rows_skipped": 123,
"error_code": "<string>",
"error_message": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>"
},
"replayed": true
}
}{
"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>"
}Submit a NetSuite REST source page
Submit one REST page asynchronously.
The response contains a page id. Poll its GET operation until terminal. Each poll is a separate Workato action, so the Summation-side task cost is one submit action plus the number of status polls actually performed.
curl --request POST \
--url https://api.example.com/v1/data-syncs/{sync_id}/pages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"expected_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"next_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"records": [
{}
],
"record_cursors": [
{
"lastmodifieddate": "<string>",
"id": "<string>"
}
]
}
'import requests
url = "https://api.example.com/v1/data-syncs/{sync_id}/pages"
payload = {
"idempotency_key": "<string>",
"expected_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"next_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"records": [{}],
"record_cursors": [
{
"lastmodifieddate": "<string>",
"id": "<string>"
}
]
}
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({
idempotency_key: '<string>',
expected_checkpoint: {backfillUpperBound: '<string>', lastmodifieddate: '<string>', id: '<string>'},
next_checkpoint: {backfillUpperBound: '<string>', lastmodifieddate: '<string>', id: '<string>'},
records: [{}],
record_cursors: [{lastmodifieddate: '<string>', id: '<string>'}]
})
};
fetch('https://api.example.com/v1/data-syncs/{sync_id}/pages', 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}/pages",
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([
'idempotency_key' => '<string>',
'expected_checkpoint' => [
'backfillUpperBound' => '<string>',
'lastmodifieddate' => '<string>',
'id' => '<string>'
],
'next_checkpoint' => [
'backfillUpperBound' => '<string>',
'lastmodifieddate' => '<string>',
'id' => '<string>'
],
'records' => [
[
]
],
'record_cursors' => [
[
'lastmodifieddate' => '<string>',
'id' => '<string>'
]
]
]),
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}/pages"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"expected_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"next_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"records\": [\n {}\n ],\n \"record_cursors\": [\n {\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\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}/pages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"expected_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"next_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"records\": [\n {}\n ],\n \"record_cursors\": [\n {\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/data-syncs/{sync_id}/pages")
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 \"idempotency_key\": \"<string>\",\n \"expected_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"next_checkpoint\": {\n \"backfillUpperBound\": \"<string>\",\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"records\": [\n {}\n ],\n \"record_cursors\": [\n {\n \"lastmodifieddate\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"page": {
"id": "<string>",
"sync_id": "<string>",
"committed_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"row_count": 123,
"rows_inserted": 123,
"rows_updated": 123,
"rows_skipped": 123,
"error_code": "<string>",
"error_message": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>"
},
"replayed": true
}
}{
"data": {
"page": {
"id": "<string>",
"sync_id": "<string>",
"committed_checkpoint": {
"backfillUpperBound": "<string>",
"lastmodifieddate": "<string>",
"id": "<string>"
},
"row_count": 123,
"rows_inserted": 123,
"rows_updated": 123,
"rows_skipped": 123,
"error_code": "<string>",
"error_message": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>"
},
"replayed": true
}
}{
"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 bounded NetSuite REST page and its authoritative check-and-set cursor.
Stable caller-generated key for this exact source page; reuse it after timeouts.
1 - 255Checkpoint that must currently be committed for this sync.
Show child attributes
Show child attributes
Checkpoint committed only after every record in this page applies successfully.
Show child attributes
Show child attributes
Up to 1,000 homogeneous JSON objects containing strings, integers, booleans, or null. Decimal values must be encoded as strings. An empty list is reserved for the checkpoint-only transition from an empty bounded backfill to incremental mode.
1000Show child attributes
Show child attributes
One ordered NetSuite (lastmodifieddate, id) tuple for each record. The service verifies that the terminal tuple exactly equals next_checkpoint before it can advance the durable cursor.
1000Show child attributes
Show child attributes
Response
Terminal result for an idempotent replay or a checkpoint-only transition.
Show child attributes
Show child attributes