Supergood | eMaint CMMS API
Programmatically access eMaint CMMS asset data, work orders, preventive maintenance schedules, and inventory with a stable REST API. Supergood builds and operates production-grade, unofficial eMaint CMMS integrations so your team can automate maintenance workflows without heavy custom engineering.
Plain English: eMaint CMMS is maintenance management software used by manufacturing plants, facilities teams, utilities, and field service organizations to keep equipment running. An unofficial API lets you programmatically pull lists of assets, work orders, PM schedules, parts, suppliers, meter readings, technician time entries, and documents—and push new records or updates back into eMaint.
For a tech company integrating with eMaint CMMS, this means you can ingest real-time asset and work order data to power reliability dashboards, sync purchase orders and parts usage to accounting/ERP (e.g., QuickBooks, NetSuite), trigger PMs from IoT sensor readings, automate request intake and approvals from your product, or enrich your platform with technician logs, photos, and failure codes. You can also update work order statuses, reserve parts, attach documents, and keep stakeholder systems (ERP, analytics, EAM, IoT platforms) in lockstep.
Many teams report challenges integrating with eMaint directly: limited or add-on API access, costly licensing for web services, CSV/Excel exports that require manual handling, complex SSO/MFA that breaks headless sessions, and features optimized for the portal (e.g., parts reservations, approvals, attachments) with sparse documentation. Supergood’s unofficial API removes these blockers so you can automate without wrestling the UI.
What is eMaint CMMS?
eMaint CMMS (https://www.emaint.com/) is a cloud-based computerized maintenance management system (CMMS) by Fluke Reliability that centralizes asset records, work orders, preventive/predictive maintenance, inventory/spare parts, procurement, and technician workflows. Teams use eMaint to manage equipment hierarchies and locations, plan and execute PMs, capture failure codes and downtime, control stockrooms and parts reservations, process purchase orders, and track labor and materials against jobs—all with reporting for compliance and performance.
Core product areas include:
- Asset & Location Management (Assets, Hierarchies/BOMs, Meters/Counters, Documents)
- Work Order Management (Requests, Scheduling, Assignments, Completion, Failure Codes)
- Preventive & Predictive Maintenance (PM Plans, Calendars, Condition-Based Triggers)
- Inventory & Procurement (Spare Parts, Stockrooms, Suppliers, Reservations, Purchase Orders)
- Labor & Mobile (Technicians, Time Entries, Checklists, Photos)
- Reporting & Compliance (KPIs, Uptime/Downtime, Audits, Safety)
Common data entities:
- Organizations, Users/Technicians, Roles/Permissions
- Assets, Locations, Asset Hierarchies/BOMs
- Work Orders (types: corrective, preventive, inspection), Tasks, Labor/Time
- Maintenance Requests/Tickets and Approvals
- Preventive Maintenance Plans and Schedules
- Parts/Inventory, Stockrooms/Warehouses, Suppliers, Purchase Orders
- Meter Readings (runtime hours, cycles), Failure Codes, Causes, Remedies
- Documents and Photos (manuals, SOPs, drawings)
The eMaint CMMS Integration Challenge
Maintenance teams rely on eMaint daily, but turning portal-first workflows into API-driven automation is non-trivial:
- Licensing and access: API/web services may be limited to specific tiers or priced as add-ons
- Portal-first features: Parts reservations, approvals, and attachments are optimized for front-end flows
- Authentication complexity: SSO/MFA and session lifecycles complicate unattended automation
- Data integrity: PM generation, meter-based triggers, and failure coding require careful handling
- Data spread: Key objects span assets, work orders, PMs, inventory, and procurement with context in multiple views
- Exports: CSV/Excel-based exports are common but brittle for real-time, high-volume integrations
How Supergood Creates eMaint CMMS APIs
Supergood reverse-engineers authenticated browser flows and network interactions to deliver a resilient API endpoint layer for your eMaint 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
Asset & Work Order Data Sync
- Mirror assets, locations, and hierarchies into your internal systems
- Keep work order metadata current for analytics and SLA tracking
- Normalize status, priority, and failure codes for multi-site operations
Preventive Maintenance Automation
- Create PM plans and tasks from your reliability program
- Trigger PMs from IoT or meter readings and track compliance
- Drive alerts when PMs are overdue or skip conditions are met
Inventory & Procurement Sync
- Sync parts stock levels, reservations, suppliers, and purchase orders to ERP/accounting (e.g., QuickBooks, NetSuite)
- Reconcile parts usage and costs from completed work orders
- Automate reorders based on min/max stock thresholds
Field & IoT Data Ingestion
- Ingest meter/counter readings, downtime events, and photos
- Create corrective work orders from sensor anomalies or alarms
- Feed technician time entries and checklists to workforce systems
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_emnt_42c9d1",
"name": "Maintenance Planner",
"entitlements": ["assets", "work_orders", "pm_schedules", "inventory"]
}
}
POST /sessions/refresh: Refresh an existing token to keep sessions uninterrupted.
Assets
GET /assets: List assets with filters and summary details.
Query parameters
- locationId: string
- status: active | decommissioned | under_maintenance
- criticality: low | medium | high
- updatedFrom, updatedTo: ISO 8601 timestamps
- page, pageSize: integers for pagination
Example response
{
"items": [
{
"assetId": "as_9f7e21",
"name": "Centrifugal Pump P-12",
"tag": "P-12",
"category": "Pump",
"location": {
"id": "loc_plant1_line3",
"name": "Plant 1 / Line 3"
},
"manufacturer": "FlowTech",
"model": "FT-300",
"serialNumber": "FT300-88421",
"status": "active",
"criticality": "high",
"warrantyExpiry": "2027-06-30",
"meters": [
{"code": "runtime_hours", "lastReading": 12438, "lastReadingAt": "2026-01-20T10:00:00Z"}
],
"lastWorkOrderDate": "2026-01-19",
"updatedAt": "2026-01-21T15:10:44Z"
}
],
"page": 1,
"pageSize": 50,
"total": 1
}
Work Orders
POST /work-orders: Create a work order with tasks, parts reservations, and assignments.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/work-orders \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"title": "Seal Leak on Pump P-12",
"assetId": "as_9f7e21",
"type": "corrective",
"priority": "urgent",
"requestedBy": {"id": "u_emnt_87a3f0", "name": "Shift Supervisor"},
"dueDate": "2026-01-25",
"tasks": [
{"description": "Lockout/Tagout", "estimatedHours": 0.5},
{"description": "Replace mechanical seal", "estimatedHours": 2.0}
],
"assignedTo": ["tech_041", "tech_118"],
"partsReservations": [
{"partId": "pt_SealKit_FT300", "quantity": 1, "unitCost": 185.00},
{"partId": "pt_Gasket_2in", "quantity": 2, "unitCost": 6.40}
],
"failure": {"code": "SEAL_LEAK", "cause": "wear", "remedy": "replace"},
"attachments": [
{"fileName": "pump_P-12_drawing.pdf", "uploadToken": "upl_b0ca91"}
],
"notes": "Observed leakage at seal housing. Spare kit in stockroom A.",
"referenceId": "iot-alarm-9872"
}'
Example response
{
"workOrderId": "wo_51cfa2",
"number": 100234,
"status": "open",
"type": "corrective",
"priority": "urgent",
"totalEstimatedHours": 2.5,
"totalEstimatedCost": 197.80,
"createdAt": "2026-01-21T16:33:02Z"
}
PATCH /work-orders/{workOrderId}: Update work order status, completion details, and actuals.
curl --request PATCH \
--url https://api.supergood.ai/integrations/<integration_id>/work-orders/wo_51cfa2 \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"status": "complete",
"actualStart": "2026-01-22T08:10:00Z",
"actualEnd": "2026-01-22T10:45:00Z",
"laborHours": 2.6,
"partsUsed": [
{"partId": "pt_SealKit_FT300", "quantity": 1, "unitCost": 185.00},
{"partId": "pt_Gasket_2in", "quantity": 2, "unitCost": 6.40}
],
"meterReadings": [
{"code": "runtime_hours", "value": 12458, "takenAt": "2026-01-22T10:40:00Z"}
],
"completionNotes": "Seal replaced and tested. No vibration anomalies detected.",
"attachments": [
{"fileName": "post_repair_photo.jpg", "uploadToken": "upl_1af452"}
]
}'
Example response
{
"workOrderId": "wo_51cfa2",
"status": "complete",
"actualStart": "2026-01-22T08:10:00Z",
"actualEnd": "2026-01-22T10:45:00Z",
"laborHours": 2.6,
"costs": {
"labor": 208.00,
"parts": 197.80,
"total": 405.80
},
"updatedAt": "2026-01-22T11:02:19Z"
}
Inventory & Parts
GET /inventory/parts: List parts with stock levels, suppliers, and reorder settings.
Query parameters
- locationId: string (stockroom/warehouse)
- sku: string
- updatedFrom, updatedTo: ISO 8601 timestamps
- page, pageSize: integers for pagination
Example response
{
"items": [
{
"partId": "pt_SealKit_FT300",
"sku": "FT300-SEAL-KIT",
"description": "Mechanical Seal Kit FT-300",
"uom": "each",
"stock": {
"onHand": 4,
"reserved": 1,
"min": 2,
"reorderQty": 3,
"locations": [
{"id": "stock_A", "name": "Stockroom A", "onHand": 3},
{"id": "stock_B", "name": "Stockroom B", "onHand": 1}
]
},
"unitCost": 185.00,
"primarySupplier": {"id": "sup_9012", "name": "SealPro"},
"updatedAt": "2026-01-21T13:12:40Z"
}
],
"page": 1,
"pageSize": 50,
"total": 1
}
Meter Readings & PM Triggers
POST /assets/{assetId}/meter-readings: Record a meter/counter reading for an asset; optionally trigger PM evaluation.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/assets/as_9f7e21/meter-readings \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"code": "runtime_hours",
"value": 12460,
"takenAt": "2026-01-22T11:05:00Z",
"evaluatePm": true
}'
Example response
{
"readingId": "mr_7ea210",
"assetId": "as_9f7e21",
"code": "runtime_hours",
"value": 12460,
"takenAt": "2026-01-22T11:05:00Z",
"pm": {
"evaluated": true,
"generatedWorkOrders": ["wo_51cfb0"],
"nextDueAt": "2026-02-15"
}
}
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 assets, work orders, PM schedules, inventory, and procurement objects
- Security: Encrypted transport, scoped tokens, and audit logging; respects eMaint role-based permissions
- Webhooks: Optional asynchronous delivery for long-running workflows (e.g., approvals, PM generation)
Performance Characteristics
- Latency: Sub-second responses for list/detail queries under normal load
- Throughput: Designed for high-volume asset and work order sync, PM processing, and parts 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 eMaint adapter tailored to your workflows and entitlements.
- Deploy with Monitoring
Go live with continuous monitoring and automatic adjustments as eMaint evolves.
Frequently Asked Questions
Q: Which eMaint CMMS modules can this integration cover?
Supergood supports workflows across commonly used modules such as Asset & Location Management, Work Orders (corrective, preventive, inspection), Preventive Maintenance (plans, schedules), and Inventory/Procurement (parts, suppliers, purchase orders), 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 parts, purchase orders, and work orders to our accounting/ERP?
Yes. We can normalize parts usage, purchase orders, and job-cost line items to match your ERP/accounting schema (e.g., inventory, GL codes) and deliver updates via webhooks or polling while complying with rate and permission constraints. We commonly integrate with QuickBooks and NetSuite.
Q: Do meter readings and PM generation workflows work via the API?
Yes. We support posting meter/counter readings, evaluating PM triggers, and creating associated work orders, with safeguards to avoid duplicate generation and ensure auditability.
Related Integrations
Intralinks API - Programmatically access the Intralinks VDR with Supergood
Ready to automate your eMaint CMMS workflows?
Supergood can have your eMaint CMMS integration live in days with no ongoing engineering maintenance.