Skip to main content
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’s pending 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: admin or higher
Method: GET

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" \

Authorizations

Authorization
string
header
required

JWT Authorization header using the Bearer scheme. Format: "Bearer {token}"

Path Parameters

batchId
string
required

Response

Diff computed

status
string
Example:

"success"

data
object