en
Use casesFacilities Management
Developer view · CMMS / CAFM / IWMS

Facilities Management

You built the CMMS a whole portfolio runs on. At 9:23 the chiller in Building C fails, a tenant SLA clock starts, and your only CFC-certified engineer is deep in planned maintenance across the campus.

You may never walk that plant room — but your code decides whether the tenant on floor 14 spends the afternoon at 30°C. Re-planning engineers by trade and SLA across twelve buildings is the code you don’t want to own. Your app flags the failure priority: "p0"; Crisphive re-plans engineers against trade certs, SLA windows, parts and building travel; your app confirms and updates the tenant portal.

You’re building
CMMS, CAFM, IWMS, and tenant-experience platforms
On the API for
Portfolio managers, building engineers, and tenants who never notice

Try it in your language

Pick a scenario, switch the server SDK. Every snippet is the actual call the API reference generates — with facilities values filled in.

PM: AHU-3 · schedule planned maintenance

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": "PM: AHU-3 filter + coil — 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 PM week goes sideways — each a tenant SLA, a wasted trip across the portfolio, or a compliance date at risk. Every one maps to a field the API already carries.

1
Chiller down during PM week

The pain ·A critical failure pulls the team off PM; a fixed compliance date or tenant SLA gets sacrificed to absorb the chaos — and the SLA credit lands on next month’s invoice.

Crisphive ·Flag priority: "p0"; the emergency re-plan preview reflows the portfolio while protecting each tenant sla_deadline.

2
Arriving at a locked secure floor

The pain ·A tech is routed to a floor with no escort window; the door’s locked, so it’s a wasted trip across the portfolio — travel and mobilisation for nothing.

Crisphive ·Model the escort meet in dependencies with real time; a plan that arrives when the door is locked never comes back.

3
The inter-building trip nobody counted

The pain ·Building-to-building travel isn’t modelled, so the day is over-booked and the last tenant tickets slip off the board — lost billable capacity.

Crisphive ·Multi-building travel is modelled per leg, so the plan reflects real windshield time, not wishful adjacency.

Reading the re-plan call

The An asset just failed scenario above is the re-plan itself — it previews the moves so nothing is committed until you confirm. Its fields map to the story like this:

FieldWhat it is
emergency_job_idThe failure driving the re-plan — the chiller job that has to be honoured.
technician_idThe engineer in play for that job — here, the CFC-certified one.
start_atWhen the disruption lands — 09:23 in the story.
modeHow hard the solver may push to fit the response (here, allow overtime).
displacement_modeWhat may happen to the planned maintenance it moves (here, reschedule it rather than drop it).

The urgency flag from the intro — priority: "p0" — is set when you book or update the job on POST /job-requests (the PM: AHU-3 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 CMMS that ignores these isn’t planning — it’s sending a plumber to a refrigerant leak. Each one is a first-class field in the API.

The ruleWhat the API enforces
Trade & CFC certsA chiller needs a CFC-certified HVAC engineer. Only engineers whose skill_ids cover the work get assigned.
Tenant SLA windowsA tenant SLA is a hard sla_deadline. The solver protects SLA-bound work before planned maintenance.
Parts & refrigerantNo plan promises a repair whose parts aren’t on the van. A parts grab is modelled in dependencies with real time.
Building & accessAn escort or access window is modelled in dependencies, and multi-building travel per leg — no plan assumes an engineer teleports across the portfolio.
Isolate-before-workIsolate before service; permit before hot work. Order is first-class dependencies.

What you ship

You ship a CMMS that re-plans itself.

  • No hand-rolled scheduling engine — trade certs, SLA windows, parts and building travel are API fields.
  • Deterministic means auditable: replay the exact hour for a client SLA review.
  • Tenant comms come back with the plan, ready for the tenant portal.

What their day feels like

One failure stops derailing PM week.

  • The help desk stops re-planning engineers by hand.
  • Tenant SLAs are protected; the right trade gets the right asset.
  • Building C is cooling again inside the SLA — PM work slides, not the tenant promise.

Every job has stakeholders

A chiller failure touches far more than the engineer who fixes it. Every ticket is a web of stakeholders who feel it when PM week drifts — and a tighter operation quietly serves all of them.

In plain sight
The tenant

Their SLA is honoured and, ideally, they never notice the failure at all.

The help desk

Confirms a portfolio re-plan in one click instead of re-juggling engineers by hand.

The portfolio owner

More coverage per engineer-hour across the portfolio with fewer SLA credits owed.

Often invisible — until they’re not
Client SLA auditors

Replayable plans mean a client SLA review reconciles to the exact hour — granular proof of every commitment kept.

Asset reputation & optics

Compliance dates never quietly slip, so the building’s standing with tenants and owners holds.

Engineers & retention

Realistic inter-building travel and honoured access windows stop the day from over-booking the team into burnout.

What you get back, and what gets pushed

The An asset just failed preview returns the whole plan in data: moves and reassignments (which job shifts, from and to which engineer and time), a total_moves count, and warnings such as TECH_NOT_FEASIBLE — so you can show dispatch the re-plan before you commit it.

To keep the tenant portal live as tickets 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.