en
Use casesInfrastructure & Utilities
Developer view · Utility work management

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.

You’re building
Work-management systems, GIS-integrated dispatch, and asset-maintenance platforms
On the API for
Operations centres, field crews, and the street without water

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.

Hydrant flush · schedule planned work

POST/job-requestsFull reference
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.

1
Main break, only crew mid-job

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.

2
Digging without a live locate

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.

3
Vac truck that isn’t there yet

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:

FieldWhat it is
emergency_job_idThe break driving the re-plan — the SLA-bound job that has to be honoured.
technician_idThe crew in play for that work.
start_atWhen the disruption lands — 06:58 in the story.
modeHow hard the solver may push to fit the response (here, allow overtime).
displacement_modeWhat 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 ruleWhat the API enforces
Confined-space & HV certsA main break needs a confined-space crew; a live line needs HV. Only crews whose skill_ids cover the work get assigned.
Regulatory SLA windowsThe clock on a break is a hard sla_deadline. The solver protects SLA-bound work before it touches routine jobs.
Equipment & vehiclesValve 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-digLocate before excavation; isolate before repair. Order is first-class dependencies.
Crew hours & fatigueShift 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.

In plain sight
Ratepayers & the street

Water back inside the window and a straight answer on when — not a silent, all-day outage.

The ops centre

Confirms a re-plan in one click instead of re-planning crews over the radio.

The utility director

More planned work per crew-hour with fewer SLA penalties — a tighter, leaner operation.

Often invisible — until they’re not
Regulators & auditors

Deterministic plans replay identically for a regulator or after-action — granular proof, not “we think we were compliant.”

Public image & optics

Fewer visible outages and faster restorations protect the utility’s standing with the public and the council.

Crews & retention

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.

Cascades, previews, reads and MCP access are never billed — call the solver on every disruption without architecting around your own bill. The core is a deterministic solver: same inputs, same plan, every time. The LLM only sits at the edges, turning a plan into the message your customer reads.

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.