Esc

↑↓ move↵ openIndex · Pagefind
API preview · design draft
API preview · design draft

Build on one record.

Projects, job cost, change orders, pay apps, lien waivers and AI agents behind one clean REST API. No exports, no sync scripts, no reconciling three systems at month end.

Nothing here is live yet. We're designing it in the open with founding contractors. Every shape is subject to change.

GET /v1/change-orders/co_14
curl https://api.os.construction/v1/change-orders/co_14 \
  -H "Authorization: Bearer $OS_API_KEY"
HTTP/2 200content-type: application/jsonrequest-id: req_8XkQ2
{
  "id": "co_14",
  "object": "change_order",
  "project": "prj_24118",
  "number": 14,
  "title": "Add fire dampers — Level 3 corridor",
  "status": "approved",
  "source_rfi": "rfi_212",
  "amount": 8640000,
  "lines": [
    {
      "cost_code": "cc_233300",
      "amount": 4860000
    },
    {
      "cost_code": "cc_233300",
      "amount": 3120000
    }
  ],
  "pay_app": "pa_9",
  "audit_trail": "/v1/change-orders/co_14/audit"
}

Illustrative response · API preview · subject to change

Principles

Designed like the ledger it sits on.

One data model

Projects, job cost, changes, billing, field and agents share one schema. The CO you read is the CO accounting bills.

IDs and audit trails on everything

Every object has a stable prefixed ID and an append-only history of who changed what, with before and after.

Webhooks for every state change

Approved, coded, submitted, received, answered. If the status moved, an event fires, signed.

Idempotent writes

Every POST and PATCH takes an Idempotency-Key. Flaky network on a jobsite? Retry. We write once.

Human gates for agent actions

Agents propose, people approve. Anything that moves money waits in an approval queue an agent key cannot clear.

Money as integers

Cents, never floats. Retainage, markups and rollups reconcile to the penny with your GL.

Start here

Quick links

One write, everything updates

Approve CO #14. Watch the record move.

A super logs a hidden condition. RFI-212 asks about missing fire dampers. CO #14 prices it at $86,400. One POST /approve later the budget line, commitments, Pay App #9 and the forecast are updated, and your systems hear about it through webhooks.

  1. dl_20260918Daily loghidden condition
  2. rfi_212RFIanswered · cost impact
  3. co_14Change orderapproved · $86,400
  4. bud_24118_233300Budgetrevised
  5. pa_9Pay app$2,310,400 · 10% retainage

Sample data: Riverside Medical Center, job 24-118.

Shape the API before it ships.

Tell us the integration you'd build first: your ERP, your owner portal, your data warehouse. Founding contractors get early keys and a say in every endpoint.

Shape the API — get early access