Signal Schemas & Tags
A signal is the definition you ingest events against — its data type and tag schema together determine how values are validated, formatted, and aggregated. See Core Concepts for how signals fit into the wider organization/workspace hierarchy.
Data types
Every signal has exactly one data type, chosen when it's created:
counter— a running count (e.g. signups, errors).gauge— a point-in-time measurement (e.g. queue depth, active connections).currency— a monetary amount.percentage— a ratio, displayed as a percentage.duration— an elapsed time, scaled and rounded by its configureddurationUnit(ms,s, ormin— defaults toms).
Tag schemas
A signal can optionally define a tag schema: a fixed list of named, typed fields that every ingested event's tags object is validated against. Each entry has:
key— the tag's name (1–100 characters, unique within the signal).type—string,number, orboolean.isRequired— whether ingestion is rejected if the tag is missing from the payload.
A signal with no tag schema still accepts a free-form tags object — nothing is validated, since there's no schema to check it against.
Example
A signal keyed order_completed, data type currency, with a tag schema requiring currency (string) and allowing an optional customerTier (string):
{"signalKey": "order_completed","value": 149.99,"tags": {"currency": "USD","customerTier": "gold"}}
Omitting the required currency tag, or sending a number where a string tag is expected, is rejected with a 400 Bad Request at ingestion time — see Ingestion API for the full error model.
Managing signals
Signals are created and edited from a workspace's Signals page. A signal that has never received data can be deleted outright; one with existing telemetry must be deactivated first (hidden from new ingestion, history preserved) before it can be purged.