---
title: Reserved identifiers
path: reference/reserved-identifiers
status: published
---

# Reserved identifiers

Some names and prefixes are reserved by ScaiLog and rejected if you try to use
them as your own field names, call-site ids, subjects, or tenants. They come
from `constants.py` and the spec's Annex B. This page lists all of them plus the
`call_site_id` format, so you can name your own fields and sites without
colliding.

## Reserved top-level entry field names

These names are the wire keys ScaiLog uses for the entry envelope, so you cannot
use them as your own structured field names — an entry that does is rejected with
`RESERVED_FIELD`:

`event_id`, `tenant`, `service`, `env`, `site`, `level`, `ts`, `msg`, `fields`,
`pi`, `subject`, `trace_id`, `request_id`.

Put your own structured data inside `fields` (or mark PI with `pi()`); the
reserved names above are the envelope around it.

## Reserved call-site prefixes

Two prefixes are reserved on `call_site_id` values and cannot be used by
application code:

- `SCAILOG-*` — ScaiLog's own components use these for their internal call
  sites.
- `AUTO-*` — the SDK derives these as a fallback when code emits a log without a
  developer-assigned `call_site_id` (an `AUTO-<hash>` id from the module,
  function, and line). Treat an `AUTO-*` site as a to-do: graduate it to a
  named, declared site. `scailog sites --diff` flags them.

Both prefixes are accepted from the components/SDK that own them but are not
valid for you to author, and the CI validator (`scailog-ci`) rejects them in
your source.

## The `call_site_id` format

A developer-assigned `call_site_id` must match this regular expression:

```
^[A-Z0-9]+(-[A-Z0-9]+){2,}$
```

That is: uppercase letters and digits only, in **at least three** hyphen-joined
segments — conceptually `<PRODUCT>-<MODULE>-<EVENT>-...`. For example
`BILLING-CHARGE-CAPTURED` is valid; `billing-charge` (lowercase, only two
segments) is not. The same pattern is enforced by the SDK at emit time, by the
server at ingest, and by `scailog-ci` at build time.

## Reserved subject

- `_service` — the reserved data subject for PI-like fields that belong to no
  natural person (for example a service account's own identifiers). It is not a
  real data subject and is handled distinctly from person subjects.

## Reserved tenant

- `default` — the reserved default tenant. It is the fallback tenant for the
  SDK, agent, CLI, and audit job when none is configured.
