Keys with hard edges.
Bearer tokens over HTTPS. Scoped by default, separate test and live, and a third kind for agents that can never sign off on money.
Send your key
Pass the key in the Authorization header on every request. Requests over plain HTTP are refused, not redirected.
Keep keys server-side. Never ship one in a mobile app or browser bundle; use a short-lived token from your backend instead.
Test keys
Hit a sandbox seeded with the Riverside Medical sample job. Nothing touches your books.
Live keys
Read and write your real record. Scoped per key, per project if you want.
Agent keys
For AI agents and automations. Can read and propose; can never approve, pay, or submit.
curl https://api.os.construction/v1/projects/prj_24118 \
-H "Authorization: Bearer osk_test_4eC39HqLyjWDarjtT1zdp7dc"Scopes
Every key gets the least it needs. A warehouse sync gets read scopes; your ERP bridge gets ap:write. Keys can also be pinned to specific projects.
- projects:readProjects, cost codes, budgets
- jobcost:writeBudgets, commitments, cost codes
- changes:writeCreate and submit change orders
- changes:approveApprove change orders. User keys only.
- ap:writeInvoices, coding, lien waivers
- billing:writePay apps and SOV lines
- field:writeRFIs and daily logs
- agents:decideApprove or reject agent actions. User keys only.
- webhooks:manageCreate and delete webhook endpoints
Agents propose. People approve.
An agent key that tries to approve a change order or its own action gets a 403. The proposal waits in the agent action queue for a person with the right role.
{
"error": {
"type": "forbidden",
"code": "agent_cannot_approve",
"message": "Agent keys can propose actions but cannot approve them. A user with role project_accountant must approve act_8812.",
"request_id": "req_3Lw7A"
}
}Partner apps planned
If you build a product other contractors install, you'll use OAuth 2.0 with PKCE instead of pasted keys, so each company grants and revokes access on its own terms. Tell us what you're building and we'll design it with you.
Request early access →