Get a read-only diff of a staged batch against the current catalog
curl --request GET \
--url https://api.royalti.io/catalog-import/batch/{batchId}/diff \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.royalti.io/catalog-import/batch/{batchId}/diff"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.royalti.io/catalog-import/batch/{batchId}/diff', 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.royalti.io/catalog-import/batch/{batchId}/diff",
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://api.royalti.io/catalog-import/batch/{batchId}/diff"
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://api.royalti.io/catalog-import/batch/{batchId}/diff")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.royalti.io/catalog-import/batch/{batchId}/diff")
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": "success",
"data": {
"diff": {
"creates": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
],
"updates": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
],
"conflicts": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
],
"skips": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
]
}
}
}{
"status": "error",
"message": "<string>",
"code": "<string>",
"details": {}
}{
"status": "error",
"message": "Insufficient permissions. Admin access required."
}{
"status": "error",
"message": "Internal server error"
}Catalog Import
Get a read-only diff of a staged batch against the current catalog
GET /catalog-import/batch//diff
GET
/
catalog-import
/
batch
/
{batchId}
/
diff
Get a read-only diff of a staged batch against the current catalog
curl --request GET \
--url https://api.royalti.io/catalog-import/batch/{batchId}/diff \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.royalti.io/catalog-import/batch/{batchId}/diff"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.royalti.io/catalog-import/batch/{batchId}/diff', 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.royalti.io/catalog-import/batch/{batchId}/diff",
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://api.royalti.io/catalog-import/batch/{batchId}/diff"
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://api.royalti.io/catalog-import/batch/{batchId}/diff")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.royalti.io/catalog-import/batch/{batchId}/diff")
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": "success",
"data": {
"diff": {
"creates": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
],
"updates": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
],
"conflicts": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
],
"skips": [
{
"matchKey": {
"value": "<string>"
},
"itemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"changes": [
{
"field": "title",
"current": "<unknown>",
"incoming": "<unknown>",
"provenance": {
"source": "<string>",
"confidence": 0.5,
"agreeingSources": [
"<string>"
],
"conflicts": [
{
"source": "<string>",
"value": "<unknown>"
}
]
}
}
]
}
]
}
}
}{
"status": "error",
"message": "<string>",
"code": "<string>",
"details": {}
}{
"status": "error",
"message": "Insufficient permissions. Admin access required."
}{
"status": "error",
"message": "Internal server error"
}This endpoint requires authentication. Include your Bearer token in the Authorization header.
Description
GET /catalog-import/batch//diff Description: Recomputes the diff between this batch’spending staged rows and
the tenant’s CURRENT Asset/Product catalog (performs SELECTs
only — never writes). Useful for re-checking a batch just before
applying, since the underlying catalog may have changed since the
original fetch. Each diff entry carries the staged item’s itemId,
so it can be addressed directly via PUT /items/{id}.
Authorization:
- Required role:
adminor higher
Code Examples
const response = await fetch('https://api.royalti.io/catalog-import/batch/example-id/diff', {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
},
});
const data = await response.json();
console.log(data);
import requests
response = requests.get(
'https://api.royalti.io/catalog-import/batch/example-id/diff',
headers={
'Authorization': f'Bearer {token}'
},
)
data = response.json()
print(data)
curl -X GET https://api.royalti.io/catalog-import/batch/example-id/diff \
-H "Authorization: Bearer YOUR_TOKEN" \
⌘I