Infrastructure & Utilities
You built the work-management system the utility runs on. At 6:58 a main lets go under Elgin Street, an SLA clock starts, and the only confined-space-certified crew is mid-job across town.
You may never stand in that trench — but the crew schedule your code produces decides how long the street goes without water. Re-planning crews by certification and equipment under a regulatory clock is the code you don’t want to own. Your app flags the break priority: "p0"; Crisphive re-plans crews against certs, equipment, SLA windows and travel; your app confirms and dispatches.
Try it in your language
Pick a scenario, switch the server SDK. Every snippet is the actual call the API reference generates — with utility values filled in.
import { Configuration, JobRequestBusinessApi } from "@crisphive/sdk"; const config = new Configuration({ accessToken: "chsk_test_4eC8xQ9mZ2pL7Ka0rT" }); const api = new JobRequestBusinessApi(config); const res = await api.createJobRequest({ jobRequestCreateRequest: { "customer_id": "a1b2c3d4-0000-4a01-8c01-000000000001", "description": "Hydrant flush — Elgin St zone, routine", "job_dates": [ { "date": "2026-07-24", "periods": [ { "business_view": [], "period": "morning" } ] } ], "job_type_id": "b2c3d4e5-0000-4a02-8c02-000000000002", "priority": "p3", "skill_ids": [ "c3d4e5f6-0000-4a03-8c03-000000000003" ], "sla_deadline": "2026-07-30T17:00:00" }, }); const { error_code, message, data } = res.data;
Switch to Go, Ruby, PHP, Java or .NET — the class names, model types and method casing all follow that SDK’s generated conventions. Swap chsk_test_ for chsk_live_ and the same code runs against production.
▼Three ways this bites
These are the days a utility work-management system is judged on. Each is a real cost in idle crew-hours, mobilisation and travel — and each maps to a field the API already carries.
The pain ·An emergency pulls the crew off a staged multi-day job that silently unwinds — days of setup redone from zero.
Crisphive ·The emergency re-plan preview absorbs the break without unwinding staged work; moves show exactly what shifts.
The pain ·A crew is sent to dig on an expired locate and stands down on-site — a full mobilisation billed for zero work.
Crisphive ·Locate-before-dig is first-class in dependencies; a plan that digs without it never comes back.
The pain ·The crew arrives before the equipment and waits on the clock — idle crew-hours while the asset is still in transit.
Crisphive ·The equipment run is modelled in dependencies with real transit time, so the crew is sequenced to arrive after it.
▼Reading the cascade call
The A main break just hit scenario above is the re-plan itself — it previews the moves so nothing is dispatched until you confirm. Its fields map to the story like this:
| Field | What it is |
|---|---|
emergency_job_id | The break driving the re-plan — the SLA-bound job that has to be honoured. |
technician_id | The crew in play for that work. |
start_at | When the disruption lands — 06:58 in the story. |
mode | How hard the solver may push to fit the response (here, allow overtime). |
displacement_mode | What may happen to the jobs it moves (here, reschedule them rather than drop them). |
The urgency flag from the intro — priority: "p0" — is set when you book or update the job on POST /job-requests (the Hydrant flush scenario shows a routine p3). The full priority ladder and the allowed values for mode and displacement_mode live in each endpoint’s Full reference.
▼Hard constraints, not suggestions
A dispatcher that ignores these isn’t planning — it’s sending an uncertified crew into a confined space. Each one is a first-class field in the API.
| The rule | What the API enforces |
|---|---|
| Confined-space & HV certs | A main break needs a confined-space crew; a live line needs HV. Only crews whose skill_ids cover the work get assigned. |
| Regulatory SLA windows | The clock on a break is a hard sla_deadline. The solver protects SLA-bound work before it touches routine jobs. |
| Equipment & vehicles | Valve kits, vac trucks, bucket trucks. An equipment run is modelled in dependencies, so no plan promises a job whose gear is on another crew. |
| Locate-before-dig | Locate before excavation; isolate before repair. Order is first-class dependencies. |
| Crew hours & fatigue | Shift limits and fatigue rules are hard constraints. The compliant day is the only day the API returns. |
▼What you ship
You ship dispatch that re-plans itself.
- No hand-rolled constraint engine — certs, SLA windows, equipment and travel are API fields.
- Deterministic means auditable: replay the exact morning for a regulator or an after-action.
- Reporting copy comes back with the plan, ready for the ops log verbatim.
▼What their day feels like
One break stops shaking the whole schedule.
- The ops centre stops re-planning crews by hand.
- SLA-bound work is protected; no crew is sent beyond its certification.
- The street has water back inside the window — routine work slides, not the SLA.
▼Every job has stakeholders
A main break touches far more than the crew that fixes it. Every work order is a web of stakeholders who feel it when the schedule drifts — and a tighter operation quietly serves all of them.
Water back inside the window and a straight answer on when — not a silent, all-day outage.
Confirms a re-plan in one click instead of re-planning crews over the radio.
More planned work per crew-hour with fewer SLA penalties — a tighter, leaner operation.
Deterministic plans replay identically for a regulator or after-action — granular proof, not “we think we were compliant.”
Fewer visible outages and faster restorations protect the utility’s standing with the public and the council.
Certs and fatigue rules honoured mean no crew sent beyond its ticket or its hours — safer work keeps crews.
▼What you get back, and what gets pushed
The A main break just hit preview returns the whole plan in data: moves and reassignments (which crew shifts, from and to which job and time), a total_moves count, and warnings such as TECH_NOT_FEASIBLE — so the ops centre can see the response before you dispatch it.
To keep the ops log live as crews move, register a webhook endpoint and Crisphive POSTs each event to your URL with a Crisphive-Signature header. Verify it against your whsec_… secret over the raw body before you trust the payload — Webhooks has the event shape and copy-paste verify snippets.
Start building
The snippet above imports @crisphive/sdk — grab the package for your language, drop in a key, and the same call runs. Every response comes back in one { error_code, message, data } envelope.