STANAG 4817
The 4817 archive console embed and the HIBW ingress/egress that bridges ISR and the NATO mesh.
STANAG 4817 is the NATO interoperability standard for ISR task messaging. R-2D2 speaks it in two places: an embedded archive console you can open from the dashboard, and a pair of HIBW (High-Information-Bandwidth) API routes that translate 4817 envelopes to and from the fleet's Collection Requirements.
The console is the human surface; the HIBW routes are the machine surface. Together they let a Collection Requirement created inside R-2D2 leave as a 4817 message — and let a partner node's 4817 task land back as a CR, feedback, or a dissemination-stage advance.
The embedded console
The 4817 tab lives under Temple Archives in the sidebar. It is a full-bleed iframe of
the console at https://4817.r2d2.office.ilab.zone/, plus a quick-link that opens the same URL
in a new tab.
| Setting | Value |
|---|---|
| Route | /temple-archives/4817 |
| Default embed URL | https://4817.r2d2.office.ilab.zone/ |
| Override | NEXT_PUBLIC_ARCHIVES_4817_URL |
When the env var is unset the page shows an "embed pending" placeholder rather than a broken frame, so a deployment without the console still renders cleanly.
The HIBW API
HIBW messages are an envelope: a header (who/what/when) plus a per-message-type body.
R-2D2 enforces the envelope shape but does not implement the full 4817 wire codec — that lives
in the Loom domain layer, and the routes are the structural contract that lets any CR round-trip
through it later.
Both routes are documented in the API Reference under the isr tag.
Ingress — POST /api/isr/hibw/in
Validates the envelope header and dispatches by message_type:
message_type | Effect on ingress |
|---|---|
MessageTypeEnum_TASK_ADMIN | Create / update a Collection Requirement |
MessageTypeEnum_TASK_FEEDBACK | Append analyst feedback to a CR |
MessageTypeEnum_TASK_RESULT | Advance the CR's TCPED stage to dissemination |
Any other recognized message type is accepted but dead-lettered — it returns 202 with
handled: false and ingresses without a domain mapping. Unknown types are rejected with 400.
The header's message_id is optional on the wire; the parser mints one when it's absent so
downstream consumers can always rely on it.
Egress — POST /api/isr/hibw/out
Takes a { "cr_id": "..." }, resolves the CR from the unified store, and returns an outbound
MessageTypeEnum_TASK_ADMIN envelope. The transport that actually carries it (Zenoh, Loom, MQTT,
or TBMQ) is wired downstream — this route just produces the envelope.
Envelope shape
{
"header": {
"message_id": "…", // optional inbound; minted if absent
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "node-guid",
"version": "0.3.0-rc2",
"time_sent": "2026-06-01T00:00:00Z",
"classification": "NU", // optional
"releasability": ["NATO"] // optional
},
"body": { /* per message_type */ }
}How it fits together
partner node ──4817 HIBW──▶ POST /api/isr/hibw/in ──▶ CR / feedback / TCPED advance
│
operator-created CR ──▶ POST /api/isr/hibw/out ──4817 HIBW──▶ transport (Zenoh/Loom/MQTT/TBMQ)The ISR records on either side — Collection Requirements, CRLs, RFIs — are the same ones the Imp Intel ISR console renders and the Threepio assistant can summarize. 4817 is the wire format that lets those records cross the boundary to other nodes.
Related
- Temple Archives — where the 4817 console embed lives.
- API Reference — the isr tag covers both HIBW routes.