SAP Asset Management Connector Guide

The SAP Asset Management connector helps Tealfabric workflows create and retrieve asset and maintenance records in SAP S/4HANA EAM. It is designed for operational automations such as maintenance-order creation, asset synchronization, and equipment-state reporting.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/s/sap-asset-management
Version (published date)2026-05-08
Tagsconnectors, reference, sap-asset-management
Connector IDsap-asset-management-1.0.0

SAP asset management connector flow showing authenticated OData asset updates, maintenance order creation, and filtered retrieval for workflow-driven maintenance automation.

Configuration and access setup

Set the connector to your SAP S/4HANA base URL and client so requests resolve to the correct tenant and OData service context. Use an SAP API user that has only the permissions required for targeted asset and maintenance entities.

  • base_url (required): SAP S/4HANA host, including protocol and port if needed.
  • username (required): SAP user for API access.
  • password (required): credential for the SAP user.
  • client (required): SAP client number (mandant), such as 100.
  • timeout_seconds (optional): timeout for requests (default 60).

The connector uses Basic authentication with an X-SAP-Client header on every request. Configuration parameters are not passed as call data.

test validates that base_url, username, password, and client are present; when configuration is incomplete it returns success: false with error.message of Configuration validation failed. Other operations (send, receive, execute) do not pre-validate configuration the way legacy PHP does.

Create maintenance records with send

Use send when a workflow needs to create or update asset-management entities via OData. Provide an endpoint path relative to base_url, an HTTP method (default POST), and a data object for the JSON body.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function createMaintenanceOrder(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "send",
      endpoint: "sap/opu/odata/sap/API_ASSETMANAGEMENT_SRV/MaintenanceOrderSet",
      method: "POST",
      data: {
        Order: "MO-240508-01",
        Asset: "ASSET-10045",
        OrderType: "PM",
        Description: "Monthly lubrication and inspection",
        PlannedStartDate: "2026-05-10",
        PlannedEndDate: "2026-05-10"
      }
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data?.result;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "endpoint": "sap/opu/odata/sap/API_ASSETMANAGEMENT_SRV/MaintenanceOrderSet",
    "method": "POST",
    "data": {
      "Order": "MO-240508-01",
      "Asset": "ASSET-10045",
      "OrderType": "PM",
      "Description": "Monthly lubrication and inspection",
      "PlannedStartDate": "2026-05-10",
      "PlannedEndDate": "2026-05-10"
    }
  }'
{
  "success": true,
  "data": {
    "message": "SAP Asset Management operation completed successfully",
    "result": {
      "d": {
        "Order": "MO-240508-01"
      }
    }
  }
}

Retrieve assets and orders with receive

Use receive to query SAP entities with a GET request. Pass OData query options in query (for example $filter, $top, $skip). List responses prefer d.results[] or results[]; a single entity is returned as a one-item items array.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function listOpenMaintenanceOrders(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "receive",
      endpoint: "sap/opu/odata/sap/API_ASSETMANAGEMENT_SRV/MaintenanceOrderSet",
      query: {
        "$filter": "OrderType eq 'PM'",
        "$top": "25",
        "$skip": "0",
        "$orderby": "PlannedStartDate desc"
      }
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data?.items ?? [];
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "receive",
    "endpoint": "sap/opu/odata/sap/API_ASSETMANAGEMENT_SRV/MaintenanceOrderSet",
    "query": {
      "$filter": "OrderType eq '\''PM'\''",
      "$top": "25",
      "$skip": "0",
      "$orderby": "PlannedStartDate desc"
    }
  }'
{
  "success": true,
  "data": {
    "message": "SAP Asset Management data retrieved successfully",
    "record_count": 2,
    "items": [
      {"Order": "MO-240508-01", "Asset": "ASSET-10045", "OrderType": "PM", "PlannedStartDate": "2026-05-10"},
      {"Order": "MO-240508-02", "Asset": "ASSET-10077", "OrderType": "PM", "PlannedStartDate": "2026-05-12"}
    ]
  }
}

Test connection with test

test performs GET sap/opu/odata/sap/API_ASSETMANAGEMENT_SRV/$metadata using configured credentials. On success it returns data.details with base_url and client.

Reliability guidance

Most integration failures come from authentication issues, incorrect OData paths, or malformed $filter expressions. Validate access with test, then run a small receive query before adding filters and pagination incrementally.

Additional resources