REST API
Resource-oriented, cursor-paginated, versioned by header. Every as-built entity — hole, fastener, shim, seal, join, disposition — is a first-class resource.
Every hole, fastener, shim, gap field and disposition is queryable the moment it is written. Read it from your MES, stream conditions into your quality system, or drive an agent from your own planner.
from rivetira import Client
rv = Client(edge="https://edge.plant-01.internal")
# Every hole drilled into airframe 4471, with measured geometry
holes = rv.asbuilt.holes(
serial="MSN-4471",
station="WG-11",
since="2026-06-01",
)
out_of_tol = [h for h in holes if not h.conforming]
print(f"{len(holes):,} holes, {len(out_of_tol)} out of tolerance")
for h in out_of_tol[:3]:
print(h.id, h.diameter_mm, h.countersink_mm, h.perpendicularity_deg)
Read-heavy integrations use REST. Event-driven quality systems use webhooks. Machines talk OPC UA. Data science talks Parquet.
Resource-oriented, cursor-paginated, versioned by header. Every as-built entity — hole, fastener, shim, seal, join, disposition — is a first-class resource.
Signed, retried, ordered per airframe. Subscribe to condition detected, disposition raised, autonomy promoted, twin drift and station acceptance events.
The edge runtime speaks the protocols your machines already speak. No gateway to buy, no custom PLC work for standard equipment.
Parquet and CSV exports of the full as-built record for a serial, a program or a date range, written to storage you control.
Edge API reads resolve against local storage, so a quality check does not wait on a cloud round trip. These are measured p50/p95/p99 figures from production plants.
| Endpoint | p50 | p95 | p99 |
|---|---|---|---|
| Hole lookup | 8 ms | 19 ms | 34 ms |
| Serial trace | 41 ms | 96 ms | 178 ms |
| Gap field | 62 ms | 148 ms | 265 ms |
| Condition stream | 12 ms | 28 ms | 51 ms |
| Bulk export (1k) | 340 ms | 720 ms | 1,180 ms |
$ pip install rivetira
Successfully installed rivetira-2.7.1
$ rivetira auth login --edge edge.plant-01.internal
✓ Device code flow complete — signed in as p.raghunathan
✓ Scopes: asbuilt:read quality:read agents:observe
$ rivetira stations list --site everett
FA-01 Fuselage section join closed-loop RFT 99.2%
FA-02 Wing-body join supervised RFT 98.6%
WG-11 Wing skin-to-spar closed-loop RFT 99.1%
$ rivetira asbuilt trace MSN-4471 --out trace.parquet
✓ 38,412 operations · 11,904 holes · 11,904 fasteners
✓ Hash chain verified · written to trace.parquet (14.2 MB)
from rivetira import Client, Condition
rv = Client(edge="https://edge.plant-01.internal")
@rv.on("condition.detected")
def handle(event: Condition):
if event.severity < 3:
return # advisory only, station handles it
# Escalate anything that would be an escape
quality_system.raise_ncr(
serial=event.serial,
station=event.station,
characteristic=event.characteristic,
measured=event.measured,
nominal=event.nominal,
evidence_uri=event.evidence_uri,
)
rv.listen() # long-lived, resumes from last acked offset
| Endpoint | Method | Returns | Scope |
|---|---|---|---|
/v2/asbuilt/holes | GET | Measured hole geometry with conformance verdict | asbuilt:read |
/v2/asbuilt/fasteners | GET | Fastener seating, flushness and grip length | asbuilt:read |
/v2/asbuilt/gapfields | GET | Predicted and measured gap fields per join | asbuilt:read |
/v2/asbuilt/trace/{serial} | GET | Complete hash-chained trace for an airframe | asbuilt:read |
/v2/quality/conditions | GET | Detected conditions and their dispositions | quality:read |
/v2/quality/dispositions | POST | Record a disposition against a condition | quality:write |
/v2/stations | GET | Station state, autonomy level and current takt | agents:observe |
/v2/agents/{id}/plans | GET | Planned operations awaiting execution | agents:observe |
/v2/agents/{id}/autonomy | POST | Set or revoke autonomy level for a station | agents:control |
/v2/twin/{serial}/predict | POST | Simulate a join against the as-built twin | twin:simulate |
| Day of week | condition.detected | join.completed | shim.machined | takt.rebalanced | Total |
|---|---|---|---|---|---|
| Mon | 412 | 88 | 64 | 24 | 588 |
| Tue | 468 | 94 | 71 | 26 | 659 |
| Wed | 441 | 91 | 68 | 22 | 622 |
| Thu | 502 | 102 | 79 | 29 | 712 |
| Fri | 478 | 97 | 74 | 27 | 676 |
| Sat | 186 | 41 | 30 | 11 | 268 |
Rivetira is not a rip-and-replace. It connects to the drilling machines, crawlers, trackers, shim cells, sealant robots and MES already on your floor over APIs and OT protocols.
OPC UA, MTConnect, MQTT, ROS 2, REST and file-drop connectors. Read-only shadow mode first; write-back enabled only after twin validation.
Airframe geometry is among the most protected IP in manufacturing, and much of it is export-controlled. Rivetira is architected for that reality from the edge up.
Certified
Annual audit covering security, availability and confidentiality of the control plane.
Supported
US-person access controls, on-prem and air-gapped deployment for controlled programs.
Mapped
Quality records, NCR flow and traceability mapped to aerospace quality requirements.
In progress
Information security management system certification underway. [PLACEHOLDER: target date]
Every agent starts by watching. It is promoted only when its measured accuracy clears the mechanic-plus-metrology baseline and the twin agrees.
Weeks 1–4
Agent observes the station, predicts every outcome, actuates nothing. Accuracy measured against what the mechanics actually do.
Weeks 4–10
Agent recommends feed, shim geometry and sequence. A human accepts or rejects; every rejection becomes training data.
Weeks 10–20
Agent actuates with a human in the loop and a live fail-safe stop. Airworthiness-critical dispositions still require sign-off.
Week 20+
Agent runs the step. Humans handle exceptions and the twin gates any change to the control policy.
| Week | Agent accuracy | Mechanic + metrology baseline |
|---|---|---|
| Wk 2 | 88.2% | 94.1% |
| Wk 4 | 91.4% | 94.0% |
| Wk 6 | 93.6% | 94.2% |
| Wk 8 | 95.2% | 94.1% |
| Wk 10 | 96.4% | 94.3% |
| Wk 12 | 97.1% | 94.2% |
| Wk 16 | 97.8% | 94.1% |
| Wk 20 | 98.3% | 94.2% |
| Wk 24 | 98.6% | 94.3% |
Sort any column. The same table backs the audit export an airworthiness engineer hands to a regulator.
| FA-01 · Fuselage section join | Section 41/43 | 0.041 mm | 18 h | ||
|---|---|---|---|---|---|
| FA-02 · Wing-body join | Wing box | 0.062 mm | 31 h | ||
| FA-03 · Empennage attach | Vertical/horizontal | 0.028 mm | 9 h | ||
| FA-04 · Systems installation | Hydraulics/electrical | 0.055 mm | 12 h | ||
| FA-05 · Final assembly | Interiors/doors | 0.037 mm | 6 h | ||
| WG-11 · Wing skin-to-spar | Lower skin | 0.033 mm | 22 h | ||
| WG-12 · Wing skin-to-spar | Upper skin | 0.048 mm | 26 h | ||
| FS-21 · Fuselage panel | Barrel section | 0.030 mm | 11 h |
Anything else goes to the people who build it. Ask an assembly engineer or read the full FAQ.
Yes. The API you integrate against is the edge runtime inside your plant network. It has no dependency on the Rivetira control plane for reads, writes or webhook delivery to systems inside your network.
You can submit planned operations and read agent state with the agents scopes. What you cannot do is bypass the envelope check — an instruction outside the qualified process window is rejected at the edge regardless of who submitted it.
Yes. Every deployment includes a replay sandbox seeded with de-identified as-built data from your own program, so integration testing runs against realistic geometry without touching production.
Parquet by default, CSV on request, with a JSON manifest describing schema and hash chain roots. Exports write to object storage you control; Rivetira never becomes the custodian of your archive.
A line assessment maps one station, quantifies the rework, shim and rate opportunity, and returns a modelled ROI in three weeks. No production disruption.