Supergood | UpKeep API
Programmatically access UpKeep maintenance work orders, assets, preventive maintenance schedules, inventory, inspections, and request queues with a stable REST API. Supergood builds and operates production-grade, unofficial UpKeep integrations so your team can automate field and office processes without heavy custom engineering.
Plain English: UpKeep is a CMMS (Computerized Maintenance Management System) built for facilities, manufacturing plants, property portfolios, and maintenance teams to manage work orders, assets, preventive maintenance, inventory, and inspections. An unofficial API lets you programmatically pull work orders, requests, assets, locations, PM schedules, parts/stock levels, meter readings, time/labor and photos—and push new records or updates back into UpKeep.
For a tech company integrating with UpKeep, this means you can ingest real-time maintenance and asset data to power dashboards, trigger and assign work orders from your product, sync labor/parts costs to accounting (e.g., QuickBooks, Xero), automate PM generation from IoT sensors or meter feeds, and enrich your platform with inspection checklists, downtime metrics, and attachments. You can also route requests, update SLAs, track parts consumption, post meter readings, and keep stakeholder systems (ERP, analytics, EAM, facilities scheduling) in lockstep.
Teams often report friction with native exports and automation in UpKeep: limited API availability on certain plans, extra costs for API access, constrained webhooks, and manual CSV exports that omit attachments or detailed cost breakdowns. A stable unofficial API helps you unlock consistent, programmatic access without re-implementing fragile browser automations.
What is UpKeep?
UpKeep (https://www.upkeep.com/) is a cloud and mobile-first CMMS that centralizes maintenance operations across facilities, manufacturing, property, fleet, and utilities. Teams use UpKeep to capture maintenance requests, create and assign work orders, manage assets and locations, schedule preventive maintenance, control parts inventory, complete inspections/checklists, and report on labor, downtime, and cost.
Core product areas include:
- Work Order Management (Requests, Assignments, Statuses/SLAs, Priorities, Approvals)
- Asset Management (Asset Hierarchy, Locations, Tags/Serials, Meters, Documents)
- Preventive Maintenance (Time- and Meter-Based Schedules, Calendar, Auto-Generation)
- Inventory & Parts (SKUs, Bins, Unit Costs, Vendors, Reorder Points)
- Inspections & Checklists (Templates, Compliance Forms, Photo/Attachment Capture)
- Mobile Field Operations (Technician App, Barcode Scanning, Offline Mode)
- Reporting & Analytics (Downtime, MTTR, Labor/Parts Cost, Completion Rates)
Common data entities:
- Companies, Sites, Locations, Teams
- Users/Technicians (roles, permissions, certifications)
- Maintenance Requests (intake tickets, source, requester)
- Work Orders (status, priority, category, SLA, labor, parts, attachments)
- Assets/Equipment (tags, serials, parent-child hierarchy, meters, warranties)
- Preventive Maintenance Schedules (time/meter triggers, frequency, checklists)
- Parts/Inventory (SKUs, bins, quantities, unit cost, reorder thresholds)
- Meter Readings (counters, timestamps, units)
- Checklists/Inspections (templates, items, pass/fail, scores)
- Vendors/Suppliers (contacts, pricing)
- Documents/Attachments (photos, manuals, invoices)
- Time/Labor Entries (hours, rates, cost codes)
The UpKeep Integration Challenge
Maintenance teams rely on UpKeep every day, but turning portal-first workflows into API-driven automation is non-trivial:
- Role-aware portals: Requesters, technicians, and admins each see different data, permissions, and approvals
- Lifecycle rigor: Work orders traverse statuses, SLAs, sign-offs, and completion criteria that must be respected
- Asset context: Hierarchies, locations, meters, and attachments are spread across views and drives scheduling logic
- PM generation: Time/meter recurrences, grace periods, and backfills introduce edge cases for automation
- Mobile-first operations: Barcode scanning, offline completion, and photo capture create asynchronous updates
- Authentication complexity: SSO/MFA and session lifecycles complicate headless automation
- Export/API constraints: Teams report limited native exports, add-on API costs, rate limits, and gaps in webhooks for attachments or detailed cost data
How Supergood Creates UpKeep APIs
Supergood reverse-engineers authenticated browser flows and network interactions to deliver a resilient API endpoint layer for your UpKeep tenant.
- Handles username/password, SSO/OAuth, and MFA (SMS, email, TOTP) securely
- Maintains session continuity with automated refresh and change detection
- Normalizes responses so you can integrate once and rely on consistent objects across modules
- Aligns with customer entitlements and role-based permissions to ensure compliant access
Use Cases
Work Order & Request Automation
- Mirror requests and work orders into your internal systems
- Auto-create and assign work orders from your product, sensors, or customer portal
- Update statuses, priorities, and SLA timestamps programmatically
Asset & Preventive Maintenance Sync
- Keep assets, meters, and warranties synchronized across EAM/ERP
- Generate PM schedules and auto-create upcoming work orders
- Post meter readings to trigger meter-based PMs
Inventory & Cost Tracking
- Track parts consumption against work orders and assets
- Push labor hours and parts costs to accounting (e.g., QuickBooks, Xero)
- Monitor stock levels, reorder points, and vendor pricing
Inspections & Field Reporting
- Ingest checklist templates and completion results
- Attach photos/documents, unify QA/QC workflows, and drive follow-ups
- Analyze pass/fail trends, downtime drivers, and compliance metrics
Available Endpoints
Authentication
POST /sessions: Establish a session using credentials. Supergood manages MFA (SMS, email, TOTP) and SSO/OAuth when enabled. Returns a short-lived auth token maintained by the platform.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/sessions \
--header 'Authorization: Basic <Base64 encoded token>' \
--header 'Content-Type: application/json' \
--data '{
"username": "[email protected]",
"password": "<password>",
"mfa": { "type": "totp", "code": "123456" }
}'
Example response
{
"authToken": "eyJhbGciOi...",
"expiresIn": 3600,
"user": {
"id": "u_upk_729c10",
"name": "Maintenance Manager",
"entitlements": ["work_orders", "assets", "pm_schedules", "inventory", "inspections"]
}
}
POST /sessions/refresh: Refresh an existing token to keep sessions uninterrupted.
Work Orders
GET /work-orders: List work orders with filters and summary details.
Query parameters
- locationId: string
- assetId: string
- status: open | in_progress | completed | canceled
- priority: low | medium | high | critical
- updatedFrom, updatedTo: ISO 8601 timestamps
- dueFrom, dueTo: ISO 8601 dates
- page, pageSize: integers for pagination
Example response
{
"items": [
{
"workOrderId": "wo_48c9a1",
"number": 1254,
"title": "Replace conveyor belt",
"description": "Belt fraying on line 3. Replace and tension.",
"category": "mechanical",
"status": "in_progress",
"priority": "high",
"requestId": "req_9f2031",
"requestedByUserId": "u_upk_19ab3d",
"requestedByName": "Line Supervisor",
"assignedToUserId": "u_upk_6dd8f2",
"assignedToName": "Technician A",
"location": {
"locationId": "loc_west_plant",
"name": "West Plant",
"area": "Production"
},
"asset": {
"assetId": "asset_conv_003",
"name": "Conveyor Line 3",
"tagNumber": "CONV-003"
},
"scheduledStartAt": "2026-01-25T09:00:00Z",
"dueDate": "2026-01-26",
"slaDueAt": "2026-01-26T17:00:00Z",
"costSummary": {
"laborHours": 3.5,
"laborCost": 245.00,
"partsCost": 380.00,
"totalCost": 625.00
},
"checklistCompletionPercent": 50,
"attachments": [{"fileName": "belt_spec.pdf"}, {"fileName": "before.jpg"}],
"createdAt": "2026-01-24T18:15:00Z",
"updatedAt": "2026-01-25T12:40:00Z"
}
],
"page": 1,
"pageSize": 50,
"total": 1
}
POST /work-orders: Create a work order with assignment, priority, and optional asset context.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/work-orders \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"title": "PM: Lubricate pump bearings",
"description": "Monthly lubrication per SOP-PMP-021.",
"category": "preventive",
"priority": "medium",
"locationId": "loc_west_plant",
"assetId": "asset_pump_014",
"assignedToUserId": "u_upk_6dd8f2",
"scheduledStartAt": "2026-02-01T08:00:00Z",
"dueDate": "2026-02-01",
"slaHours": 8,
"checklistTemplateId": "chk_pmp_021",
"attachments": [
{"fileName": "SOP-PMP-021.pdf", "uploadToken": "upl_08ab73"}
],
"notifyAssignee": true
}'
Example response
{
"workOrderId": "wo_58de91",
"number": 1255,
"status": "open",
"createdAt": "2026-01-25T14:03:11Z"
}
Assets
POST /assets: Create an asset with location, meter config, and warranty metadata.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/assets \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Air Compressor A",
"tagNumber": "COMP-A-101",
"serialNumber": "SN-AC-778231",
"category": "compressor",
"status": "active",
"locationId": "loc_west_plant",
"parentAssetId": null,
"meter": {
"type": "hours",
"unit": "h",
"initialReading": 0
},
"purchaseDate": "2024-07-15",
"warrantyExpiration": "2027-07-15",
"vendor": {"name": "Industrial Supply Co.", "vendorId": "ven_451293"},
"notes": "Includes VFD; follow monthly PM schedule.",
"attachments": [
{"fileName": "manual.pdf", "uploadToken": "upl_7fa223"}
]
}'
Example response
{
"assetId": "asset_comp_a101",
"status": "active",
"meter": {"type": "hours", "currentReading": 0, "unit": "h"},
"createdAt": "2026-01-25T15:22:44Z"
}
Preventive Maintenance Schedules
POST /assets/{assetId}/pm-schedules: Create a time- or meter-based PM schedule with checklist and auto-generation.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/assets/asset_comp_a101/pm-schedules \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"title": "Monthly Compressor PM",
"triggerType": "time",
"frequencyDays": 30,
"gracePeriodDays": 5,
"startDate": "2026-02-01",
"assignedTeamId": "team_maint_west",
"checklistTemplateId": "chk_comp_monthly",
"generateWorkOrders": true,
"timezone": "America/Los_Angeles",
"notes": "Include filter check and drain moisture traps."
}'
Example response
{
"scheduleId": "pm_90e412",
"assetId": "asset_comp_a101",
"triggerType": "time",
"nextDueAt": "2026-03-03T08:00:00-08:00",
"createdAt": "2026-01-25T16:10:03Z"
}
Inventory: Parts Consumption
POST /work-orders/{workOrderId}/parts-usage: Record parts used on a work order and adjust stock levels.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/work-orders/wo_48c9a1/parts-usage \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"items": [
{"partId": "part_belt_2in", "quantity": 1, "unitCost": 320.00, "storageLocationId": "bin_A3"},
{"partId": "part_bearing_6204", "quantity": 2, "unitCost": 30.00, "storageLocationId": "bin_B1"}
],
"notes": "Used standard 2in belt and two 6204 bearings.",
"referenceId": "erp-po-9811"
}'
Example response
{
"partsUsageId": "pu_51af80",
"workOrderId": "wo_48c9a1",
"totalPartsCost": 380.00,
"adjustments": [
{"partId": "part_belt_2in", "newQuantityOnHand": 11},
{"partId": "part_bearing_6204", "newQuantityOnHand": 148}
],
"createdAt": "2026-01-25T17:05:44Z"
}
Technical Specifications
- Authentication: Username/password with MFA (SMS, email, TOTP) and SSO/OAuth where enabled; supports service accounts or customer-managed credentials
- Response format: JSON with consistent resource schemas and pagination across modules
- Rate limits: Tuned for enterprise throughput while honoring customer entitlements and usage controls
- Session management: Automatic reauth and cookie/session rotation with health checks
- Data freshness: Near real-time retrieval of work orders, assets, PM schedules, inventory, and inspection objects
- Security: Encrypted transport, scoped tokens, and audit logging; respects UpKeep role-based permissions
- Webhooks: Optional asynchronous delivery for long-running workflows (e.g., PM generation, work order status changes)
Performance Characteristics
- Latency: Sub-second responses for list/detail queries under normal load
- Throughput: Designed for high-volume work order sync, PM generation, and parts consumption updates
- Reliability: Retry logic, backoff, and idempotency keys minimize duplicate actions
- Adaptation: Continuous monitoring for UI/API changes with rapid adapter updates
Getting Started
- Schedule Integration Assessment
Book a 30-minute session to confirm your modules, licensing, and authentication model.
- Supergood Builds and Validates Your API
We deliver a hardened UpKeep adapter tailored to your workflows and entitlements.
- Deploy with Monitoring
Go live with continuous monitoring and automatic adjustments as UpKeep evolves.
Frequently Asked Questions
Q: Which UpKeep modules can this integration cover?
Supergood supports workflows across commonly used modules such as Work Orders & Requests, Assets, Preventive Maintenance, Inventory/Parts, Meter Readings, and Inspections/Checklists, subject to your licensing and entitlements. We scope coverage during integration assessment.
Q: How are MFA and SSO handled for automation?
We support username/password + MFA (SMS, email, TOTP) and can operate behind SSO/OAuth when enabled. Sessions are refreshed automatically with secure challenge handling.
Q: Can you sync labor and parts costs to our accounting system?
Yes. We can normalize work order labor/parts and asset cost allocations to match your ERP/accounting schema (e.g., cost codes, taxes) and deliver updates via webhooks or polling while complying with rate and permission constraints. We commonly integrate with QuickBooks and Xero.
Q: Do you support attachments, photos, and checklist results?
Yes. We support downloading attachments and uploading documents/photos via signed uploads, with checksum validation and time-limited URLs. Checklist templates and results are represented explicitly in our normalized responses.
Q: What if our UpKeep plan has limited API features or export constraints?
Supergood operates as an unofficial integration that respects your entitlements and role-based access. We handle session automation for portal-first features and provide consistent endpoints even when native API/webhooks are limited. We discuss plan specifics and compliance during assessment.
Related Integrations
Intralinks API - Programmatically access the Intralinks VDR with Supergood
Ready to automate your UpKeep workflows?
Supergood can have your UpKeep integration live in days with no ongoing engineering maintenance.