From MIF to REST API: A Migration Guide for Maximo Integration Architecture
Maximo Application Suite replaces the legacy MIF integration layer with API-first REST and OSLC endpoints. This guide covers the architecture changes, migration patterns, and practical steps for modernizing your integration stack.
The Maximo Integration Framework (MIF) has been the backbone of Maximo integration for over a decade. It connected Maximo to ERP systems, IoT platforms, financial systems, and mobile applications through publish channels, enterprise services, and endpoints built on JMS queues, SOAP web services, and flat file exchanges. For organizations running Maximo 7.6.x, MIF remains the integration layer. But for organizations moving to Maximo Application Suite (MAS), the integration landscape has fundamentally changed.
MAS introduces an API-first architecture where REST APIs, OSLC resources, and GraphQL are not add-ons. They are the native integration surface. Every Maximo business object, from work orders to assets to purchase orders, is exposed through consistent REST endpoints that follow OpenAPI conventions. The shift is not cosmetic. It changes how integrations are designed, built, monitored, and maintained.
This article provides a practical migration guide for organizations transitioning from MIF to the MAS REST API layer. It covers the architectural differences between MIF and the MAS API stack, the specific integration patterns that change during migration, and the steps to build new integrations on MAS. It also addresses the SAP connector modernization, the IBM App Connect Enterprise entitlement, and the error handling patterns that production integrations require.
Whether you are planning a MAS migration or already in the middle of one, understanding the integration architecture shift is critical. The choices you make during migration will determine how maintainable, scalable, and observable your integrations are for years to come.
MIF Architecture: What You Are Leaving Behind
The Maximo Integration Framework was built for a world of point-to-point integrations, XML message formats, and batch processing. It organized integrations around four core concepts: Object Structures, Publish Channels, Enterprise Services, and Endpoints.
Object Structures defined which Maximo business objects and attributes were exposed in integration messages. A typical Object Structure for Work Orders would include the WORKORDER object along with related objects like WOACTIVITY, WOLABOR, and WOSTATUS. The Object Structure was the data contract between Maximo and the external system, and any changes to the Object Structure definition could ripple through every integration that depended on it.
Publish Channels defined outbound messages triggered by Maximo events. When a work order status changed, the Publish Channel fired and sent the updated work order data to a configured endpoint. The channel specified the transport mechanism (JMS queue, HTTP POST, SOAP call), the message format (XML by default), and any XSL transforms applied to map Maximo fields to the external system's expected format.
Enterprise Services defined inbound messages from external systems. An Enterprise Service for Asset Creation accepted asset data from an ERP system and created or updated asset records in Maximo. The service included processing rules for conditional routing and error handling, but these rules were configured inside Maximo rather than in external middleware.
Endpoints defined the delivery mechanism: JMS queues, HTTP/S, SOAP web services, flat files, database tables, or email. Each endpoint required specific configuration, and switching transport mechanisms often required reconfiguring the entire channel.
MIF also included Processing Rules for conditional routing, XSL Transforms for data mapping, and External Systems as logical groupings of channels and services by integration partner. The framework was powerful but heavily configuration-driven, requiring deep knowledge of Maximo's internal data model and XML message structures.
The limitations of MIF became apparent as integration patterns evolved. MIF integrations were tightly coupled to Maximo's internal object model, meaning changes in Maximo data structures could break integrations without warning. XML message formats added overhead compared to lightweight JSON. The lack of native API documentation standards made it difficult for integration teams outside the Maximo ecosystem to understand available endpoints. And the point-to-point nature of MIF integrations created a web of connections that was hard to monitor and maintain at scale.
The MAS API-First Integration Model
MAS does not simply replace MIF with a new version of the same thing. It introduces an entirely different integration philosophy built on API-first design, event-driven architecture, cloud-native middleware, and standards-based protocols.
The MAS integration stack supports multiple protocols side by side:
Protocol Format Use Case Maturity
REST API JSON/XML Real-time CRUD operations, mobile apps Primary (MAS-native)
OSLC JSON/RDF Linked data, cross-system resource linking Core (MAS-native)
GraphQL JSON Complex queries across related objects Emerging
Webhooks JSON Event-driven outbound notifications Production-ready
Kafka JSON/Avro Event streaming, pub/sub patterns Supported via ACE
The key architectural change in MAS is that REST and OSLC are no longer bolt-on additions. They are the native integration surface. Every Maximo object is exposed through consistent REST endpoints that follow OpenAPI conventions. This means external systems can discover available resources, understand expected payloads, and test integrations without needing a Maximo administrator to configure anything inside the application.
The MAS Manage REST API follows standard RESTful conventions:
Base URL: https://{mas-host}/maximo/oslc/os/{resourcetype}
Authentication: OAuth 2.0 / API Key header
Content-Type: application/json
Core endpoints for common operations include predictable URL patterns:
Operation Endpoint Method
Get Work Order /maximo/oslc/os/mxwo/{wonum} GET
Create Work Order /maximo/oslc/os/mxwo POST
Update Work Order /maximo/oslc/os/mxwo/{wonum} PATCH
Query Assets /maximo/oslc/os/mxasset?oslc.where=assetnum="{num}" GET
Create Service Request /maximo/oslc/os/mxsr POST
The lean=1 query parameter strips OSLC metadata from responses, returning clean JSON. This is recommended for most integration scenarios because it reduces payload size and simplifies parsing on the receiving end. Without lean=1, responses include OSLC-specific metadata wrappers, RDF properties, and context links that add overhead for consumers that do not need OSLC semantics.
One of the most powerful features of the MAS REST API is support for batch operations. Instead of making 100 individual API calls to update 100 work orders, you can submit a single bulk request. This dramatically reduces network overhead and improves throughput for large-scale integrations. For organizations migrating from MIF batch processing, the bulk API provides a direct replacement that maintains throughput while simplifying the integration architecture.
SAP Integration Modernization
SAP-Maximo integration is the most common enterprise integration scenario, and it has seen significant modernization in 2026.
The Modernized SAP Connector
In March 2026, IBM released an updated Maximo Connector for SAP Applications that supports SAP Cloud Platform Integration (SAP CPI) as the middleware layer. This update replaces the legacy SAP PI/PO adapter and aligns the connector with SAP's current cloud integration architecture.
Key details of the modernized connector:
- Available now in the MAS February Feature Channel for non-production use
- Supported for MAS 9.1 and all forward MAS versions
- Production readiness planned with MAS 9.2 GA
- All existing interface logic, mappings, and integration patterns remain functional without modification
- The middleware transition is from SAP PI/PO to SAP CPI
The integration pattern flows through the new middleware:
Maximo Manage --> MIF --> SAP CPI --> SAP ECC/S4HANA
This modernization is significant for organizations running both Maximo and SAP. SAP CPI is SAP's strategic integration platform, and SAP PI/PO is in maintenance mode. By moving the Maximo connector to CPI, IBM ensures that the integration path forward aligns with SAP's own roadmap. Organizations planning new SAP-Maximo integrations should target CPI from the start, even if the connector is currently in non-production status.
Key SAP Data Flows
The core SAP-Maximo data flows remain consistent regardless of middleware:
Equipment Master Sync (SAP PM to Maximo): SAP Equipment records remain the source of truth for asset master data. A nightly batch or real-time sync publishes equipment data to Maximo via enterprise services, creating or updating Asset records. The sync maps SAP functional locations to Maximo locations, SAP equipment numbers to Maximo asset numbers, and SAP maintenance item categories to Maximo job plans.
Purchase Requisition/Order (Maximo to SAP): When Maximo creates a PR for non-stock materials, the PR is published to SAP via a publish channel. SAP creates the corresponding Purchase Order and publishes the PO number back to Maximo, creating a linked procurement chain. This integration typically includes status callbacks: when SAP receives the PR, when the PO is created, when goods are received, and when the invoice is paid.
Financial Posting (Maximo to SAP FI/CO): When work orders are closed in Maximo with actuals, labor and material costs are published to SAP for financial posting to the appropriate cost center or WBS element. This integration requires careful mapping of Maximo cost codes to SAP cost objects, and reconciliation processes to handle posting failures.
IBM App Connect Enterprise Entitlement
MAS includes an entitlement to IBM App Connect Enterprise (ACE) for integration middleware. ACE is a full-featured integration runtime that supports message transformation, routing, protocol mediation, and API orchestration.
The entitlement terms are straightforward: if one side of the integration is MAS, you are covered. This means no extra ACE license, no mandatory SAP middleware, and no custom BAPI gymnastics. You can use ACE to connect Maximo to SAP, Oracle, Salesforce, SQL databases, file systems, MQ queues, Kafka topics, or any REST or SOAP endpoint.
A typical ACE-based architecture:
Maximo Manage --> MIF Publish Channel --> HTTP/JSON --> ACE Flow --> Target System
|
(SAP, Oracle, Data Lake, etc.)
Setting up ACE to receive messages from Maximo involves creating an Object Structure in Maximo Manage that defines the data to publish, configuring a Publish Channel with the transport mechanism and endpoint URL pointing to your ACE flow, and then building a REST API flow on the ACE side that listens for incoming POST requests from Maximo. The ACE flow can then transform the message, route it to multiple target systems, handle errors, and provide monitoring through the ACE dashboard.
For organizations without ACE expertise, the learning curve is moderate. ACE uses a flow-based programming model with nodes for input, transformation, routing, and output. Common patterns like request-reply, publish-subscribe, and content-based routing are built into the toolkit. IBM provides ACE training and certification paths, and the entitlement means the license cost is not a barrier.
Migration Patterns: MIF to REST API
Migrating from MIF to the MAS REST API is not a lift-and-shift operation. It requires redesigning integration contracts, updating authentication mechanisms, and in many cases rewriting integration code. Here are the patterns that work.
Pattern 1: SOAP to REST Conversion
Organizations running Maximo 7.6.x typically have SOAP-based integrations for asset sync, work order exchange, and financial postings. The migration pattern involves:
- Inventory existing SOAP integrations: Document every WSDL, endpoint URL, and message structure. Identify which integrations are real-time versus batch. Prioritize by business criticality and transaction volume.
- Map SOAP operations to REST endpoints: Each SOAP operation maps to a REST verb. A SOAP call that retrieves a work order becomes a GET. A SOAP call that creates a work order becomes a POST. Updates become PATCH calls. Deletions become DELETE calls.
- Convert XML payloads to JSON: Use the
lean=1parameter on REST calls to get clean JSON without OSLC metadata. Build transformation logic in your middleware (ACE, MuleSoft, or custom code) to convert between XML and JSON where needed. - Update authentication: SOAP integrations typically use basic auth or mutual TLS. MAS REST APIs use OAuth 2.0 or API keys. Update your integration code to handle token acquisition and refresh.
Pattern 2: Publish Channel to Webhook
MIF Publish Channels push messages to external systems when Maximo records change. In MAS, this pattern is replaced by webhooks for simpler use cases and Kafka topics for high-volume event streaming.
# Example: Webhook consumer for Maximo work order events
from flask import Flask, request, jsonify
import json
import loggingapp = Flask(__name__) logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__)
@app.route('/maximo-webhook', methods=['POST']) def handle_webhook(): event = request.json event_type = event.get('_type', 'unknown') wonum = event.get('wonum', 'N/A') status = event.get('status', 'N/A')
logger.info(f"Received event: {event_type} for WO {wonum}, status: {status}")
return jsonify({"status": "received"}), 200
def handle_status_change(event): """Process work order status change from Maximo""" wonum = event.get('wonum') new_status = event.get('status') # Update downstream systems, trigger notifications, etc. logger.info(f"Status change: {wonum} -> {new_status}") # Example: notify ERP system of status change # erp_client.update_wo_status(wonum, new_status)
def handle_wo_create(event): """Process new work order creation from Maximo""" wonum = event.get('wonum') # Create corresponding records in ERP, notify dispatchers, etc. logger.info(f"New WO created: {wonum}")
def handle_wo_update(event): """Process work order update from Maximo""" wonum = event.get('wonum') changed_fields = event.get('_changed', {}) logger.info(f"WO updated: {wonum}, changed: {list(changed_fields.keys())}")
if __name__ == '__main__': app.run(port=8080) ```
Pattern 3: Enterprise Service to REST Consumer
MIF Enterprise Services accepted inbound messages from external systems. In MAS, this pattern becomes a REST API consumer pattern where external systems call MAS REST endpoints to create or update records.
# Example: Creating a work order in MAS via REST API
import requests
import jsonMAS_BASE_URL = "https://mas-host.company.com/maximo/oslc/os" API_KEY = "your-api-key-here"
headers = { "Content-Type": "application/json", "apikey": API_KEY }
response = requests.post( f"{MAS_BASE_URL}/mxwo?lean=1", headers=headers, json=wo_data )
if response.status_code == 201: created_wo = response.json() print(f"Created WO: {created_wo.get('wonum')}") else: print(f"Failed: {response.status_code} - {response.text}")
if asset_response.status_code == 200: assets = asset_response.json() for asset in assets.get('member', []): print(f"Asset: {asset.get('assetnum')} - {asset.get('description')}") ```
Pattern 4: Batch Processing to Bulk API
MIF batch integrations that processed hundreds or thousands of records in nightly jobs can be replaced with MAS bulk API operations. The bulk API accepts arrays of records in a single request, dramatically reducing the number of API calls and network round trips.
# Example: Bulk creating work orders via MAS REST API
import requests
import jsonMAS_BASE_URL = "https://mas-host.company.com/maximo/oslc/os" API_KEY = "your-api-key-here" headers = {"Content-Type": "application/json", "apikey": API_KEY}
response = requests.post( f"{MAS_BASE_URL}/mxwo?lean=1&bulk=1", headers=headers, json=bulk_payload )
if response.status_code == 201: result = response.json() print(f"Created {len(result.get('member', []))} work orders") else: print(f"Bulk create failed: {response.status_code}") ```
Monitoring and Error Handling
Production integrations require comprehensive monitoring and robust error handling. MIF provided built-in message tracking, but production-grade monitoring typically needed external tooling. MAS improves this with better API observability, but you still need to build a monitoring strategy.
Error Handling Best Practices
- Implement retry logic with exponential backoff: Network failures, rate limits, and temporary server errors are inevitable. Build retry logic into every integration client.
import time
import requestsdef call_mas_api_with_retry(url, method='GET', max_retries=5, kwargs): """Call MAS REST API with exponential backoff retry""" for attempt in range(max_retries): try: response = requests.request(method, url, timeout=30, kwargs) if response.status_code == 429: wait_time = 2 attempt time.sleep(wait_time) continue response.raise_for_status() return response except requests.exceptions.RequestException as e: if attempt - Configure dead letter queues: Messages that fail processing after all retries should be sent to a dead letter queue for manual investigation. ACE supports this natively with its error handling nodes. - Set up dashboards for message throughput: Track message volume, error rates, and processing latency. Use tools like Grafana, Datadog, or the IBM Cloud Pak for Integration dashboard to visualize integration health. - Implement circuit breakers: If a downstream system is down, stop sending messages rather than queuing them indefinitely. This prevents cascading failures and message backlog explosions. - Log structured data:** Every integration message should produce structured logs with correlation IDs, timestamps, and message status. This enables tracing across the full integration chain when issues occur.
Recommended Starting Sequence for New Integrations
For organizations building their first MAS integration, IBM recommends this sequence:
- Define the integration scope: What data flows in what direction at what frequency?
- Build the Object Structure: Start with standard Maximo object structures where possible; customize only for data not in the standard structure.
- Configure the External System: Create the logical partner grouping in the External Systems application.
- Build and test the Publish Channel or Enterprise Service: Test with minimal data first, then expand to full records.
- Configure the Endpoint: Start with flat file or HTTP endpoints for initial testing, then implement JMS queue delivery for production.
- Implement error handling: Configure dead letter queues, error notifications, and retry policies before moving to production.
Practical Implications
For organizations planning a MAS migration, the integration architecture shift has several practical consequences. First, the timeline for integration migration is typically longer than the core Maximo migration. Start converting SOAP integrations to REST before the MAS migration begins, not after. Many organizations treat integration migration as a post-go-live activity and discover that their legacy integrations break during cutover because the MIF configuration does not map cleanly to the new API layer.
Second, the ACE entitlement removes middleware licensing costs but requires ACE development skills. Assess your team's ACE capabilities early, and budget for training or external consulting if needed. ACE is a powerful platform, but it has its own learning curve, and the flow-based programming model differs significantly from writing raw integration code.
Third, the SAP CPI connector modernization means organizations on SAP PI/PO need to plan a parallel middleware migration. The good news is that existing integration patterns are preserved, but the underlying infrastructure changes. This means the middleware team needs to be involved in the MAS migration planning from the beginning, not brought in at the end.
Fourth, API-first integration changes how you think about integration contracts. Instead of configuring Object Structures and Publish Channels in Maximo, you design OpenAPI specifications and versioned API contracts. This shift requires collaboration between Maximo administrators and integration developers that may not have existed under MIF. The integration team needs to understand OpenAPI, OAuth 2.0 token flows, and RESTful design principles.
Finally, invest in monitoring from day one. The distributed nature of REST-based integrations means failures can occur at multiple points: the API client, the network, the MAS API layer, or the Maximo database. Without comprehensive monitoring with correlation IDs and end-to-end tracing, debugging production issues becomes a blame game between teams.
Bottom Line
The shift from MIF to REST API is not optional for organizations moving to MAS. It is the integration architecture. The new architecture is more standards-based, more developer-friendly, and more aligned with how the rest of the enterprise technology world builds integrations. The migration requires real work: inventorying existing integrations, redesigning integration contracts, building new middleware flows, and updating authentication mechanisms. Organizations that start early and treat integration migration as a parallel workstream to the core MAS migration will avoid the bottleneck that catches many projects off guard. The ACE entitlement and the modernized SAP CPI connector provide the tools. The migration plan is up to you.
Author
Kevin Arhagba
Maximo Insider contributor
Was this helpful?
The Maximo Brief
Get weekly Maximo analysis and field notes.
Powered by Ghost. Join The Maximo Brief — one weekly read for Maximo professionals.
Cite this article
Arhagba, K. (2026). From MIF to REST API: A Migration Guide for Maximo Integration Architecture. MaximoInsider. https://maximoinsider.com/articles/mif-to-rest-api-migration-guide

