# Maintenance Due > AI-native due engine + append-only service log. > The personal bearer token is the tenant. Site is not a CMMS UI — humans paste AGENT_PROMPT.md into their agent. ## Public (no auth) - GET /AGENT_PROMPT.md — copy-paste operating prompt - GET /skill.md — Muse coach steps for the due-engine loop - GET /muse/skill.md — same skill (Muse connector path) - GET /openapi.json — OpenAPI 3.1 (matches live routes) - GET /api/openapi.json — same spec - GET /llms.txt — this file - GET /health — liveness - POST /api/v1/bootstrap — mint token. Optional { "seed": true } = Truck A oil-change demo. - POST /api/v1/accounts — alias of bootstrap (rate-limited) - GET/POST /mcp — reserved Streamable HTTP slot (stub; stateless) ## Auth Authorization: Bearer on all other /api/v1/* calls. Do not send userId. Wrong bearer → 401 (does not mint an account). Errors: { "code", "message", "retryable", "hint?" }. ## Writes (JSON) - POST /api/v1/things - PATCH /api/v1/things/:id - DELETE /api/v1/things/:id (409 if log exists) - POST /api/v1/things/:id/services - PATCH /api/v1/services/:id - DELETE /api/v1/services/:id - PUT /api/v1/services/:id/rule { "expression": Expr } - DELETE /api/v1/services/:id/rule - POST /api/v1/things/:id/readings - POST /api/v1/services/:id/events ## Reads (agent — text/plain Markdown) - GET /api/v1/agent - GET /api/v1/agent/due - GET /api/v1/agent/things/:id - GET /api/v1/due.md - GET /api/v1/things/:id/history.md JSON GETs under /api/v1 return structured fields. Do not call JSON "legacy." ## Expression schema calendar.every_days | meter.meter+every | or (first hit wins) | and (nested ok) Never invent intervals. Completions + explicit rules move due state.