Hare REST API¶
Three endpoints under /hare/v1/pvs. Reads require a key with the read
scope, writes require write (sent in the X-API-Key header). PV names may
carry a ca:// or pva:// prefix — see PV names.
GET /hare/v1/pvs/{pv}¶
Current value of a PV. Returns the cached value if the PV is actively monitored (some client is subscribed to it), otherwise issues a one-shot read through the connector.
curl -H "X-API-Key: dev" http://localhost:8000/hare/v1/pvs/TEST:SINE
{
"pv": "TEST:SINE",
"value": 3.27,
"valueKind": "scalar",
"severity": "NO_ALARM",
"alarmStatus": 0,
"tsNs": 1700000000123456789,
"connected": true,
"error": null
}
| Field | Type | Description |
|---|---|---|
pv |
string | The PV name as requested |
value |
varies | Payload per valueKind — number, string, enum index, array, or {labels, columns} table. null when disconnected |
valueKind |
string | How to interpret value — see values and metadata |
severity |
string | Alarm severity: NO_ALARM, MINOR, MAJOR, INVALID |
alarmStatus |
int | null | EPICS menuAlarmStat code behind severity: 0 NO_ALARM, 3 HIHI, 4 HIGH, 5 LOLO, 6 LOW, 7 STATE, 17 UDF, ... The same codes over ca:// and pva://. null when the channel is disconnected or the backend supplies none. Over pva:// it is the code the alarm message names when that agrees with severity (NO_ALARM with severity 0, any other status with a raised severity); when severity and the PV Access alarm status category are both 0 it is 0 whatever the message says; otherwise null |
tsNs |
int | IOC timestamp in epoch nanoseconds |
connected |
bool | false when the channel is disconnected |
error |
string | null | Connector error detail, when there is one |
GET /hare/v1/pvs/{pv}/describe¶
Static metadata for a PV — the fields a client reads once to configure a display. Served from the broker's cache when the PV is actively monitored, otherwise fetched on demand.
curl -H "X-API-Key: dev" http://localhost:8000/hare/v1/pvs/TEST:SINE/describe
{
"pv": "TEST:SINE",
"valueKind": "scalar",
"units": "degC",
"precision": 2,
"description": null,
"enumChoices": null,
"displayLow": -10.0,
"displayHigh": 10.0,
"controlLow": -10.0,
"controlHigh": 10.0,
"warningLow": -5.0,
"warningHigh": 5.0,
"alarmLow": -8.0,
"alarmHigh": 8.0,
"writable": true,
"form": null
}
All fields except pv and valueKind are optional — whatever the backend
cannot supply stays null.
| Field | Description |
|---|---|
units / precision |
Display units and decimal places |
description |
Channel description, when the backend provides one |
enumChoices |
Labels for enum PVs, indexed by the integer value |
displayLow / displayHigh |
Suggested display (view) range |
controlLow / controlHigh |
Writable (control) range |
warningLow / warningHigh, alarmLow / alarmHigh |
Alarm thresholds |
writable |
Whether the channel accepts writes |
form |
Display format hint (e.g. "Decimal", "Hex"), from PVA |
PUT /hare/v1/pvs/{pv}¶
Write a value to a PV. Requires the write scope.
curl -X PUT -H "X-API-Key: dev" -H "Content-Type: application/json" \
-d '{"value": 42.0}' \
http://localhost:8000/hare/v1/pvs/TEST:SETPOINT
Request body¶
{
"value": 42.0,
"wait": true,
"timeout": 5.0
}
| Field | Type | Default | Description |
|---|---|---|---|
value |
number | bool | string | array of scalars | required | The value to write |
wait |
bool | true |
Block until the IOC processes the write (put-with-callback). With wait: true, a 200 means the value landed. false submits without waiting for record processing |
timeout |
number | null | null |
Per-write timeout in seconds (must be positive); null uses the connector default |
Response¶
{
"pv": "TEST:SETPOINT"
}
A non-2xx status signals failure — a rejected or timed-out write returns
502 pv_write_failed.
Error codes¶
| Code | HTTP | Meaning |
|---|---|---|
invalid_api_key |
401 | Missing or unknown API key |
insufficient_read_access / insufficient_write_access |
403 | Key lacks the required scope |
invalid_pv_name |
400 | Empty, over-long, or malformed PV name |
pv_connection_failed |
503 | Channel could not be connected |
pv_read_timeout |
504 | No response from the IOC within the timeout |
pv_write_failed |
502 | Write rejected or not confirmed by the IOC |
epics_backend_unavailable |
503 | The connector backend is not running |
All errors use the standard envelope: {"code": "...", "detail": "..."}.