Tag profiles solve the other half of the translation problem breeds don’t: hardware variation. Different device batches and firmware versions report differently — field names, scaling, epoch windows — and a tag profile tells the ingest how to read a particular device.
Settings → Tag profiles: named JSON translation configs

The config

A profile is a name plus a JSON translation config:
  • fields maps the device’s payload keys onto Sentinel’s canonical ones.
  • odba_scale / tilt_offset_deg correct for the hardware (these compose with the animal’s breed settings).
  • epoch_window_s is the device’s reporting window.
The editor validates JSON as you type; profiles are assigned per device on the Devices tab, and a device without one uses the defaults.
The ingest picks profile changes up through its config API within about a minute — no restart, no redeploy.
One profile per hardware batch is the pattern: “S-Track ear tag v2”, “Prototype collars (Wio 1110)”. If you find yourself putting per-breed corrections in a tag profile, they belong in Breeds instead — profiles describe the hardware, breeds describe the animal.