---
title: "Add-on, calibrated units, normalized_index and pct_to_action so readings compare across"
method: GET
path: "/gauge/calibrated"
tags: ["gauge", "calibrated", "no-data-no-charge", "record-hash", "offline-recomputable"]
---

# Add-on, calibrated units, normalized_index and pct_to_action so readings compare across

`GET /gauge/calibrated`

## Request

- Base URL: `https://api.truthbear.co`
- URL: `https://api.truthbear.co/gauge/calibrated`
- Auth: none declared

Add-on, calibrated units: normalized_index and pct_to_action so readings compare across stations. When the line has no calibration basis you get 422 with no_charge:true and reason:no-calibrated-for-this-line, and are NOT billed. Every record carries an offline-recomputable record_hash. Also searched as: normalised reading; comparable measurement; cross site calibration.

## Query parameters

- `signal_id` string, required
- `entity` string, required

## Response `200`

Paid response

- object
  - `nature` string, required: Neutrality statement: GAUGE supplies observations and trend description only - no judgement, no prediction, no recommendation
  - `dim` string, required: Always the literal "calibrated"
  - `signal_id` string: Signal id in genus.species ASCII binomial form (e.g. crypto.spot / macro.unemployment / shipping.route-disruption); full list at free /gauge/catalog
  - `entity` string: Monitored object id (e.g. btc / us / hormuz); full list at free /gauge/catalog or /gauge/preview
  - `entity_name` string, nullable: Human-readable name of the object
  - `observed_at` string: Actual observation time of the data, ISO-8601
  - `data_age_hours` number, nullable: Age frozen at collection time (0 = same hour), for reference only - if a collector stalls this field stops moving. For freshness always use provenance.age_hours_now (computed at request time) and provenance.freshness; the threshold basis is in provenance.freshness_basis
  - `source_agreement_cv` number, nullable: Multi-source agreement, coefficient of variation (smaller = closer agreement). Present ONLY when two or more CONFIRMED-INDEPENDENT sources measure the same fact at the same time - see sources[].independent. Same source relayed through two channels does not count as independent, and two different time bases (daily mean vs spot) do not count as agreement. Single-source / unconfirmed independence / not applicable -> null
  - `calibrated` object, nullable, required: Calibrated-unit projection: normalized_index / pct_to_action, comparable across stations
  - `record_hash` string, nullable: sha256:<64hex> (contract A v3, binds the values plus provenance)
  - `record_hash_verifiable` object, nullable: {mode:offline|via-endpoint, note}
  - `decision_points` object, nullable: {count, points:[{tag,current,swappable,how}], note} - decision points you can re-run with a swapped tag (one swapped tag = one call); leave it alone and the original context is the default, at no extra charge
  - `provenance` object, nullable: Data lineage: {served_from, data_as_of, oldest_leg_as_of, data_age_hours (frozen age, reference only), age_hours_now (age computed at request time - the real basis for freshness), freshness(fresh|recent|stale), freshness_basis (the cadence and threshold used for this row, as a string), dead_source (optional: upstream frozen or discontinued), data_lineage:[{signal,traceable_to,uncertainty,record_hash,...}], validation_status}. Freshness is cadence-aware, so monthly/quarterly/annual official lines are not misjudged against a 24h rule; the same basis is used by free /gauge/coverage. Buyers can trace back to the official source
  - `grade` string, nullable: Honest data-grade disclosure (e.g. "screening-level, not decision-grade")
  - `scope` string, nullable: Honest statement of scope and limits: monitoring is not forecasting, intelligence is not instruction, and the boundary of what is verifiable
  - `_citation` object, nullable: Offline-verifiable citation: {statement_type, not_advice:bool, claim, fact, source, record_hash, signature(Ed25519), key_id, issuer_DID(did:key), verify_url} - the trust root for zero-trust self-verification

## Other responses

- `402`: Payment Required
- `422`: No data for this query - no_charge:true, you are NOT billed

---

[API](https://skmtc.dev/truthbear/apis/truth-bear-verifiable-screening-intelligence-for-ai-agents-g.md) · [All operations](https://skmtc.dev/truthbear/apis/truth-bear-verifiable-screening-intelligence-for-ai-agents-g/llms.txt) · [OpenAPI document](https://skmtc.dev/truthbear/apis/truth-bear-verifiable-screening-intelligence-for-ai-agents-g/revisions/35744dfa4550?raw)
