Why this and not that
PUT to the record's own address, not POST to a collection. A PUT of the whole record is idempotent: sending it twice leaves the other system as sending it once, so a retry, a re-run from Batch Logs or two saves in a row are harmless. A POST that creates would make a duplicate each time. The id in the URL is yours, prefixed, so the other system never needs to tell you its own.
A condition on the Pre-Event data, not a job that sends on every save. Editors save often, and every UpdateRecord fires the job; without the guard each one is a request. It also stops this job reacting to its own side effects if it ever writes the product back.
Retries 3, and the default accepted codes. A refusal (a 4xx) fails the batch with the response in its log, which is what you want: a silent drop is worse than a visible failure. For outages longer than the retries, and for the rest of the rules (credentials, ownership, dead letters), see Integrating with external systems. A delete needs its own job on DeleteRecord, with {code} captured as a Pre-Event property, because the record is gone by the time the batch runs.