saveOrder_v1.transactionId was not provided).updateOrder_v1 providing the same transactionId and rowId's returned by the platform (or the previously supplied transactionId) to update the exact same order.updateOrder_v1 is called with a different or missing transactionId the API returns an error indicating no documents were found.callback used by Four Way Shop to asynchronously notify the client of success/failure and to return the order ID must be handled (How Testing callback response).transactionId is not provided, the Order Processor generates an internal transactionId/orderId.callback URL containing the order reference and status.transactionId (or orderId) and stores it.transactionId and rowId's except for the removed line of course.updateOrder_v1.transactionId, applies updates, revalidates totals and inventory, and returns success in callback with the updated order references.updateOrder_v1 with a different or missing transactionId.transactionId returned in the original callback or re-create the order.transactionId and rowId's.{
"transactionId": "{{UUID}}-trs", // optional on save, required on update
"seller": "Marco Bianchi",
"sellerId": "1001",
"startDate": "2020-02-06 13:12:30",
"endDate": "2020-02-06 13:22:19",
"items": [
{
"rowId": "76c55f38-9586-462b-bdb6-9e45f9ba98b8",
"rowType": "ITEM",
"barcode": "010005600109",
"itemCode": "BO00P794101",
"description": "POLO IN COTONE PIQUET",
"unitPrice": 19.9,
"qty": 1,
"taxRate": 22,
"vatCode": 20,
"rowTotal": 16.66,
"discount": 10,
"discountType": "P",
"rowOrder": 1,
"channel": "INSTORE"
}
// more items...
],
"payments": [
{
"paymentType": "E",
"paymentAmount": 10,
"paymentCash": 10,
"paymentCode": "21",
"paymentDescription": "Carta di credito",
"paymentProgr": "64231ea7-..."
}
],
"totals": {
"totalDiscountAmount": 2.5,
"total": 27.32,
"vat": 6.01,
"grandTotal": 33.32
},
"invoiceClient": { /* billing / customer info */ },
"callback": "https://europe-west1-sinesy4wsplatform.cloudfunctions.net/fake-callback",
"forceUndoAll": false
}rowId: unique per item row — system may require stable rowId same of saveOrder_v1 if later updates reference the same row.transactionId: external idempotency key. If client supplies it when creating the order, platform should honor it and return it back in callbacks. If omitted, platform generates one and returns it in the callback; that id must be reused to update the order.items array in updateOrder_v1 normally contains the resulting items after the update (not a diff) — the platform will replace/reconcile the order content accordingly. Confirm with API contract if diffs are supported.callback URL. Example success callback (trimmed):{
"success": true,
"message": "Order processed successfully",
"transactionId": "11111111-2222-3333-4444-trs",
"orderId": "ORD-20200206-0001",
"docNumber": 1,
"siteId": "501",
"companyId": "TEMP1",
"status": "PROCESSED",
"totals": {
"total": 27.32,
"vat": 6.01,
"grandTotal": 33.32
},
"items": [
{
"rowId": "76c55f38-9586-462b-bdb6-9e45f9ba98b8",
"itemCode": "BO00P794101",
"qty": 1
}
],
"timestamp": "2025-09-18T08:01:00Z"
}transactionId (or synchronous response from update endpoint):{
"success": false,
"message": "No documents found for the provided transactionId"
}rowIdtransactionId on saveOrder_v1 and then reuse it in updateOrder_v1, or if transactionId is omitted on saveOrder_v1 this will return the transactionId in the callback response, reuse it in updateOrder_v1 as a reference to the order to update.rowId's must be the same on saveOrder_v1 and updateOrder_v1 as we report below the order will be replaced with the one provided on call body.axios or node-fetch style — examples use axios for clarity. Always handle network errors and make your callbacks idempotent.