Skip to main content
When one business transaction moves through several services, each service reports its own flow under its own reference. One shared correlation_id ties those references together, so an investigation starts from the whole transaction instead of one leg of it. Correlation IDs covers what the field changes and what it leaves alone.

Correlation or causation

Correlation is shared; causation points. If you find yourself putting the same value on ten events, that is a correlation ID.

Choose the value

The right value identifies the business transaction, not a single request. For causation_id, send the event id that led directly to this event. It may be an event your service sent or an upstream event, and Reconify accepts the value even when it has not seen that event. It is not a reference, a shared correlation_id, or the event that merely happened just before this one in time: sequence is not causation. Three kinds of value do not survive the hop:
  • A per-request HTTP trace ID. It changes on every call, so two services rarely report the same one.
  • A provider transaction ID. It exists only after the provider responds, so the earliest events cannot carry it.
  • A value only one service can compute.
Do not derive the value from customer data. It is stored as evidence and shown during investigation. Use an internal, opaque identifier.

Add it to your events

Your services already pass some context around. The correlation ID rides along with it, and every event picks it up on the way out:
A missing value means the field comes off the event entirely. Sending "" or null is rejected, while sending nothing is valid and leaves reference-based monitoring untouched.
A rollout works one service at a time. Events without the field keep working, and the services that do send it start linking as soon as two of them share a value.

Example: a marketplace checkout

One checkout, chk_7Q2M0S, produces two monitored flows in two services. The payments service reports the buyer payment under pay_9f2:
cURL
The order service completes the same flow, reusing the same reference because it is the same operation:
cURL
The payouts service reports the seller payout. Different flow, different reference, same correlation_id:
cURL
Reconify now holds two operations, evaluated independently:
If the payout never completes, the finding stays on pyt_31a, where its deadline lives. The correlation ID is what lets you get from that finding back to the checkout that produced the related evidence.

Investigate with it

The dashboard search accepts the correlation value, and it also accepts any reference whose events carry one. Related results are labeled, so the evidence you asked for stays separate from the evidence Reconify matched. When related activity looks wrong, Troubleshooting covers the two causes: a value only one service sends, and a value reused across transactions.

Next

Correlation IDs

The model, the value rules, and what stays unchanged.

Troubleshoot

Work through rejected items, retries, and stalled events.