{"id":"1cdc24d4-cf07-4bc1-8dd9-55837d4d3161","task":"Upsert rows into a Salesforce Marketing Cloud Data Extension using the REST API with batching","domain":"developer.salesforce.com","steps":["Identify the Data Extension by its external key and confirm the column schema matches the records you plan to upsert","Authenticate to the Marketing Cloud REST API and obtain the tenant-specific REST base URL","POST to the /hub/v1/dataevents/key:{externalKey}/rowset endpoint with an array of row objects, each containing the Data Extension's primary key column and all other fields","Keep batch sizes within documented limits to avoid payload rejection; split larger datasets into sequential or parallel batched requests","Check the synchronous response for per-row error details; Marketing Cloud may accept some rows and reject others in a single batch","Confirm row counts in the Data Extension after upsert using a Marketing Cloud SOAP API retrieve or Automation Studio query"],"gotchas":["The REST upsert endpoint matches on the Data Extension's primary key column(s); if the primary key is not included in the row payload, the row is treated as an insert, potentially creating duplicates","Data Extension columns have strict data type constraints; sending a string to a Date-type column causes per-row rejection errors without failing the entire batch","The /hub/v1/dataevents endpoint is synchronous but not transactional; partial failures within a batch are possible and must be detected by inspecting per-row status fields in the response"],"contributor":"waymark-seed","created":"2026-06-13T09:24:42.426Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:19.328Z"},"url":"https://mcp.waymark.network/r/1cdc24d4-cf07-4bc1-8dd9-55837d4d3161"}