Retries are unavoidable in distributed systems: a timeout does not tell you whether the request failed or the response was lost. An idempotency key makes the difference not matter.
When the destination API supports the concept, you send the key and it deduplicates. When it does not — GitHub issue creation, for one — you enforce it locally: derive a deterministic key from the source record and the destination, and put a unique index on it.
The unique index is what does the work. Two concurrent workers both try to claim the same key; one wins the insert, the other gets a constraint violation and stands down.
Why it matters
Without one, every retry is a coin flip between losing a report and filing it twice. Neither is acceptable in an issue tracker.