Idempotent control
Control calls carry an intent key; a retried call never produces a second pass.
Weldeon's developer surface is deliberately narrow and deliberately bounded. You can read everything the platform senses and records, and you can act only inside the envelope your welding engineer qualified.
Connect to the edge, load the qualified envelope, and stream welds. Every write is clamped to the envelope and logged to genealogy — there is no path around it.
# Subscribe to a cell and hold heat input inside the qualified envelope.
from weldeon import Site, WeldEnvelope
site = Site.connect("edge://bay-3.local") # factory edge, no cloud required
cell = site.cell("CELL-04")
envelope = WeldEnvelope.from_wps("D1.1-GMAW-3G-06") # qualified range, enforced
for weld in cell.stream_welds():
if weld.fitup.gap_mm > envelope.max_gap_mm:
weld.hold(reason="gap outside qualified range")
continue
weld.control(
heat_input_kj_mm=1.24,
travel_mm_s=6.4,
seam_tracking=True,
envelope=envelope, # writes are clamped to this
)
print(weld.id, weld.genealogy.heat_input_kj_mm, weld.ndt.status)Four resources, one schema, no hidden side effects.
The defect agent calls an indication with a confidence figure and routes it to your inspector queue. Your systems hear about it at the same moment your inspector does.
// Indication called by the defect agent — routed to your inspector queue.
{
"event": "indication.called",
"weld_id": "4471-A",
"cell": "CELL-04",
"pass": 3,
"modality": "radiographic",
"indication": {
"type": "lack_of_fusion",
"confidence": 0.91,
"location_mm_from_root": 12,
"length_mm": 8.4
},
"code": "AWS D1.1",
"disposition": "awaiting_inspector",
"model_version": "defect-2026.03.1"
}$ weldeon site status --site bay-3 edge appliance online runtime 2026.03.1 uptime 41d cells 6 connected 4 autonomous 2 advisory loop latency 18 ms p50 · 27 ms p99 cloud sync disabled (air-gapped) pending export 0 records $ weldeon weld show 4471-A --format genealogy wps D1.1-GMAW-3G-06 qualified consumable ER70S-6 lot 88214 verified fit-up gap 1.8 mm rev 07 in tolerance heat input 1.24 kJ/mm within WPS passes 5 (root + 4 fill) complete ndt RT + UT machine read accepted by J. Okafor distortion 2.1 mm out-of-plane in tolerance
The adapter layer is where safety lives. It is also where most of the engineering is.
It would be straightforward to expose every parameter as a writable field. It would also be irresponsible. A welding API with unbounded authority is a way to produce non-conforming welds at machine speed.
So the control surface takes an envelope as a required argument, returns the clamped values actually applied, and writes a deviation record whenever your requested value differed from the applied one. There is no force flag, no override parameter, and no support ticket that will add one.
Everything else — sensing, history, genealogy, events — is as open as we can make it, because that is where integration value lives and where nothing can be damaged.
Three environments, in the order you should use them.
A local simulator replays recorded welds and synthetic joints so integrations can be built and tested without a cell.
A real cell in read-only mode. Your code sees live sensing and issues control calls that are logged but not applied.
Write authority granted per cell, per agent scope, with the confidence and stop policy your site configured.
Six things that will save an integration team a fortnight.
Control calls carry an intent key; a retried call never produces a second pass.
Always read the returned value, not the requested one. They differ more often than you expect.
Every inference carries its model version. Pin it in your records if you need reproducibility.
Assume the network is gone. Local buffering and reconciliation are part of the contract.
All timestamps are site-local with an explicit offset, because shift boundaries matter in analysis.
Genealogy export formats are documented and stable; build reports on them, not on scraped screens.
SDK calls resolve against the edge appliance on the shop-floor network. Cloud APIs exist for fleet-level queries and are optional.
18 ms
median control-loop latency at the edge on reference hardware
1 kHz
arc signature sampling available to the sensing API
90d
default local genealogy retention before archival policy applies
0
documented ways to write outside a qualified envelope
“Read broadly. Write narrowly. Log absolutely everything.”
A Python SDK is first-class, with a documented REST and webhook surface underneath it. A TypeScript client is available for shop-floor and reporting applications.
The simulator ships with an evaluation licence to design-partner and pilot accounts. Ask us and we will get you set up before the pilot's integration week.
No. Not through the API, not through support, not through configuration. Changing what is permitted is a welding-procedure decision, made by your welding engineer in the procedure system.
Book a pilot on one cell or line. We agree the scorecard before we start — first-pass yield, rework hours, defect escapes, takt — and we report against it in the open.