Required must be sent, and valid, or the call fails
Conditional required only in some situations (explained inline)
Optional can be left out
Auto-set the server fills this in - don't send it
Batch endpoint
Send many records in one call, with automatic dependency ordering. Use this once you're comfortable with the single-record shapes above - every batch operation's Data is just the same JSON body you'd send to the matching single-record endpoint.
POST/v1/integration/sync/batchSave many related records in the correct order
| Field | Type | Required? | Notes |
|---|---|---|---|
BatchId | string | Required | Your own name for this batch, for your own tracking/logs |
FailFast | bool | Optional | Stop processing after the first failure. Default false. Recommended: true while testing. |
Operations | array | Required | At least one operation |
↳ OpId | string | Required | Unique within this batch - other operations reference it |
↳ Type | string | Required | Which kind of record - see the table below |
↳ Data | object (JSON) | Required | The same request body you'd send to the matching single-record endpoint - including its top-level CompanyId, which is required on every operation, same as the single-record endpoints |
↳ Dependencies | array of string | Optional | List of OpId values that must succeed before this one runs |
↳ ConflictPolicy | string | Optional | Present on the model but not read anywhere in the current batch processor - sending it has no effect today. Reserved for future use. |
Field name is
Dependencies, not DependsOn. It's an array of the OpId strings this operation waits on - leave it as [] (or omit it) if this operation has no prerequisites in the batch.
Entity type reference
Type value | Same shape as single endpoint |
|---|---|
Member | SaveMember |
Gender | SaveGender |
Transportation.Asset | SaveAsset |
Transportation.Part | SavePart |
Transportation.Compartment | SavePartCompartments |
Transportation.LinkedAssetParts | SaveLinkedAssetParts |
Transportation.Passenger | SavePassenger |
Transportation.TripInfo | SaveSiteTripInfo |
Transportation.TripParts | SaveTripParts |
Transportation.TripCompartment | SaveTripCompartments |
Transportation.TripPassenger | SaveTripPassenger |
Transportation.TripMember | SaveTripMember |
Transportation.RouteInfo | SaveRouteInfo |
Transportation.PartCategory | SavePartCategory |
Transportation.PartType | SavePartType |
Transportation.WindowType | SaveWindowType |
Transportation.ToiletType | SaveToiletType |
Transportation.WheelType | SaveWheelType |
Transportation.CompartmentType | SaveCompartmentType |
Transportation.Facility | SaveFacility |
Transportation.TripStatus | SaveTripStatus |
Transportation.PromotionalStatus | SavePromotionalStatus |
Transportation.PackageDepartureStatus | SavePackageDepartureStatus |
Transportation.JourneyCode | SaveJourneyCode |
Transportation.PartOperationStatus | SavePartOperationStatus |
Transportation.PartOperation | SavePartOperation |
Transportation.PartFacility | SavePartFacilities |
Transportation.Stoppage | SaveStoppage |
Transportation.ItinerarySupplier | SaveItinerarySupplier |
Request
POST /v1/integration/sync/batch
{
"BatchId": "fabric-2026-07-06-001",
"FailFast": true,
"Operations": [
{
"OpId": "t1",
"Type": "Transportation.Asset",
"Data": { "ExternalId": "TRAIN-N002-2026", "CompanyId": 101, "Asset": { "Code": "N002-2026" } },
"Dependencies": []
},
{
"OpId": "c1",
"Type": "Transportation.Part",
"Data": { "ExternalId": "COACH-B01", "CompanyId": 101, "Part": { "Code": "B01", "PartTypeId": 14 } },
"Dependencies": []
},
{
"OpId": "link1",
"Type": "Transportation.LinkedAssetParts",
"Data": { "AssetExternalId": "TRAIN-N002-2026", "CompanyId": 101, "PartExternalIds": ["COACH-B01"] },
"Dependencies": ["t1", "c1"]
}
]
}
Result
{
"batchId": "fabric-2026-07-06-001",
"sourceSystem": "FABRIC",
"results": [
{ "opId": "t1", "type": "Transportation.Asset", "success": true, "externalId": "TRAIN-N002-2026", "internalId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "mappingCreated": true },
{ "opId": "c1", "type": "Transportation.Part", "success": true, "externalId": "COACH-B01", "internalId": "f4e5d6c7-8b9a-4c1d-9e2f-3a4b5c6d7e8f", "mappingCreated": true },
{ "opId": "link1", "type": "Transportation.LinkedAssetParts", "success": true, "output": true }
]
}
Each result's opId matches what you sent, so you can tell exactly which operation succeeded or failed. If FailFast is true, operations after the first failure won't appear in results - treat them as not yet attempted.