Caller identity
Turn on Share caller identity and each call to a data source tells your server who made it, instead of every call looking like incident.io. Your server can then:- Apply granular access controls based on the identity of the caller.
- Rate-limit each caller separately.
- Limit what automated callers, such as investigations, can do.
- Record who made each call, for your own audits and operational controls.
Turning it on
Open the data source’s settings and turn on Share caller identity. You need the Manage Nexus sources permission for the data source. Turning it on or off is recorded in your audit log.Which calls carry it
Every call to the data source carries it, from everywhere a call can be made: Investigations, Chat, workflows, and via the incident.io MCP.Headers
Each call carries two headers. They’re always sent together.X-Incident-Actor names the caller as <type>:<id>. It’s the same actor as on the call’s entry in your audit log, so you can match a request to its entry.
X-Incident-Actor-Assertion is a signed JWT that proves the header. It’s valid for 60 seconds.
The assertion
The assertion is signed with ES256. Its header names the key that signed it:ctx uses the same keys as the call’s audit log entry. We leave out a key we don’t know rather than send it empty:
Here’s a decoded assertion for a call from Chat that needed approval:
Verifying the assertion
Our public keys are published as a JSON Web Key Set athttps://app.incident.io/.well-known/jwks.json. The endpoint needs no authentication, and responses can be cached for 5 minutes. Each key is a P-256 key with alg ES256 and use sig.
Pick the key by the kid in the assertion’s header. Don’t hard-code a key or a kid, because keys change over time.