Audit logs and API-key IP allowlisting are enterprise governance
features. Talk to us if they aren’t enabled on your
plan.
Read the trail
Fetch events fromGET /v1/audit-logs, newest first. The call needs the
account:read scope. Events come back in the standard list
envelope under data, paginated with a cursor.
data holds the events and pagination
carries the cursor for the next page:
Event fields
metadata holds action-specific context — some actions record a field or two and
others record none. An inbox.created event records the new inbox’s address,
for example, while an api_key.created event records an empty object. Treat it as
free-form context, not a fixed schema.
Actions you’ll see
The trail records security-relevant actions. The most common, grouped by what they target:The set of audited actions grows over time. Don’t hard-code an exhaustive list:
match on the prefix (
api_key., domain.) or read resourceType, and tolerate
actions you don’t recognize yet.Page through history
Passlimit (1–100, default 25) and follow pagination.nextCursor the usual way —
see pagination. The trail is account-wide and newest-first;
filter by action or resourceType on each page in your own code.
API-key IP allowlisting
For high-trust automation, you can lock an API key to a set of trusted IP addresses, so a leaked secret is useless from anywhere else. It’s a governance control that sits on top of scopes: scopes limit what a key can do; the allowlist limits where it can do it from.Set an allowlist
SendallowedIps when you create a key. Each entry is an IPv4 or IPv6 address, or
a CIDR range — up to 50 of them.
allowedIps. A key with no allowlist returns an empty allowedIps array ([])
and authenticates from any IP, which is the default.
See where a key is locked to
The allowlist shows up wherever a key’s details appear, so you can audit it without re-creating the key. List your keys to see every key’sallowedIps and
confirm each one is pinned to the IPs you expect.
How enforcement works
On every authenticated request, Dairo resolves the caller’s source IP and checks it against the key’s allowlist before the request does any work:1
Resolve the source IP
The trusted client IP is the real connecting address, never a header the
caller supplies — so it can’t be spoofed.
2
Match against the allowlist
The IP must fall inside at least one configured address or CIDR range.
3
Allow or deny (deny-by-default)
A match proceeds. Anything else — an IP that can’t be matched, or can’t be
resolved at all — is rejected with
403, even when the bearer secret and scopes
are otherwise valid. A correct secret from an untrusted network gets you nothing.Operating notes
Keys without an allowlist are unchanged
Keys without an allowlist are unchanged
Omitting
allowedIps (or sending null) keeps the default: the key
authenticates from any IP. Allowlisting is strictly opt-in.Pin egress, not office Wi-Fi
Pin egress, not office Wi-Fi
Allowlist the stable egress IPs of your servers, CI, or NAT gateway — not
laptops on dynamic residential or café networks, which will lock themselves
out when the IP rotates.
Allowlist changes are audited
Allowlist changes are audited
Creating or revoking an allowlisted key is recorded in the
audit trail, so the control itself leaves a record.
Locked out? Rotate from a trusted IP
Locked out? Rotate from a trusted IP
If your egress IP changes and a key can no longer reach the API, create a
replacement key (with the new range) from a trusted network and revoke the old
one. Dairo never weakens the check to recover access.
Next steps
Tamper-evident audit export
A signed, verifiable export of the same trail for archival.
API keys & authentication
API keys, scopes, and per-surface auth.
API reference
The full
GET /v1/audit-logs and API-key schemas.CLI
dairo audit-logs list and dairo api-key create --allowed-ip.