Docs / Reference
Discovery API
The Discovery API is a read-only OData V2 interface that exposes ASAPIO Integration Add-on configuration to external tools. It allows systems such as the Whitepaper.id Integration Cockpit and the ASAPIO Event Studio Landscape Explorer to discover installed connector types, configured connections, and inbound/outbound interfaces — including status flags and endpoint details.
The API runs directly on your SAP instance alongside the add-on. It provides no write capability; all configuration changes must be made through the standard add-on tools.
Availability
The Discovery API is included in ASAPIO Integration Add-on release 9.32607 (July 2026) and later. For earlier releases, a separate installation file is available — contact ASAPIO support to request it.
Enabling the OData Service
Prerequisites
- ASAPIO Integration Add-on installed
- SAP Gateway / OData foundation active on the system
- Authorization to maintain Gateway services
Activation Steps
- Open transaction
/IWFND/MAINT_SERVICE(Activate and Maintain Services). - Click Add Service.
- Enter System Alias
LOCAL(for embedded Gateway). - Search for the Discovery API technical service name and select it.
- Click Add Selected Services, assign a package and transport request, and confirm.
- Verify the service is active in
/IWFND/MAINT_SERVICEandSICF.
Test activation using the SAP Gateway Client or a browser:
GET /sap/opu/odata/<namespace>/<SERVICE_NAME>/$metadata
A 200 OK response with EDMX metadata confirms the service is reachable.
Authorization
All endpoints require display authorization for ASAPIO configuration: authorization object /ASADEV/CU, activity 03. A missing authorization returns a business error. Access restriction per user or per instance is handled externally — not within the service itself.
API Reference
Connectors
GET /ConnectorSet — List installed connectors
Returns all installed connector types. Non-installed connectors are excluded. Supports $filter by ConnectionId or InterfaceId, and $top / $skip for paging. Results are sorted by ConnectorId.
GET /ConnectorSet('{ConnectorId}') — Single connector
Returns a single connector by ID. Returns 404 Not Found if the connector is not present in any outbound or inbound source.
Connections
GET /ConnectionSet — List connections
Returns all configured connections. HTTP destinations are enriched with Hostname, Port, and SSL via RFC_READ_HTTP_DESTINATION. Returns a business error (not an empty list) if no connections exist.
GET /ConnectorSet('{ConnectorId}')/ToConnections — Connections by connector
Navigation property — returns all connections using a specific connector type.
Interfaces
GET /InterfaceSet — List all interfaces
Returns all inbound and outbound interfaces. Supports $filter by ConnectionId (recommended for large landscapes) or InterfaceId. Results are sorted by instance ASC, object ASC, direction DESC.
GET /ConnectionSet('{ConnectionId}')/ToInterfaces — Interfaces by connection (preferred)
Returns interfaces scoped to a single connection. Use this to reduce response size in landscapes with many interfaces.
GET /InterfaceSet(InterfaceId='{InterfaceId}',ConnectionId='{ConnectionId}') — Single interface
Returns a single interface by composite key. Returns 404 Not Found if the interface does not exist.
Example response:
{
"d": {
"InterfaceId": "SALESORDER_OUT",
"ConnectionId": "PRD_AZURE",
"Direction": "Outbound",
"MessageType": "BUS2032",
"lastRun": "2026-04-24T09:15:00Z",
"isActive": true,
"Events": "CREATED,CHANGED",
"HeaderAttributes": "TOPIC=sales-orders",
"LoadType": "I",
"DataLayer": "ASAPIO Payload",
"ASAPIOPayload": "ZACI_SALESORDER",
"ASAPIOPayloadVersion": "0001",
"TableView": ""
}
}
isActive determination:
- Checks classic BOR event linkage via
SWFDEVTYP→SWFDEVENA; if enabled, returnstrue. - If unmatched and
/ASADEV/DATA_LOGexists, checks the Event Studio runtime log for an active record matchingConnectionId + InterfaceId. - RAP linkages created outside Event Studio are not currently reflected in
isActive.
Schema Reference
Connector (ConnectorSet)
| Field | Type | Notes |
|---|---|---|
| ConnectorId | String | Unique connector type identifier |
| isInstalled | Boolean | Always true; non-installed connectors are excluded from results |
| isActive | Boolean | true if at least one connection uses this connector type |
| HeaderAttributes | String | Comma-separated NAME=VALUE pairs |
| LoadType | String | Outbound only: I (Incremental), P (Packed), F (Full load) |
| DataLayer | String | Outbound only: ASAPIO Payload, Table/View, or Custom |
| ASAPIOPayload | String (32) | Outbound: payload view name |
| ASAPIOPayloadVersion | String (16) | Outbound: payload version |
| TableView | String (32) | Outbound: table or view name |
Connection (ConnectionSet)
| Field | Type | Notes |
|---|---|---|
| ConnectionId | String (15) | ASAPIO instance identifier; primary navigation anchor |
| ConnectionType | String | Connector type used by this connection |
| RFCDest | String | RFC destination name |
| Hostname | String | HTTP destinations only |
| Port | String | HTTP destinations only |
| SSL | Boolean | HTTP destinations only |
Interface (InterfaceSet)
| Field | Type | Notes |
|---|---|---|
| InterfaceId | String (30) | Interface identifier |
| ConnectionId | String (15) | Parent connection; primary filter key |
| Direction | String | Inbound or Outbound |
| MessageType | String | SAP message or event type |
| lastRun | String | Timestamp of last execution |
| isActive | Boolean | Activation status (see determination logic above) |
| Events | String | Comma-separated linked events; always populated regardless of isActive |
| HeaderAttributes | String | Comma-separated NAME=VALUE pairs; always populated |
| LoadType | String | Outbound only: I, P, or F |
| DataLayer | String | Outbound only: ASAPIO Payload, Table/View, or Custom |
| ASAPIOPayload | String (32) | Outbound: payload view name |
| ASAPIOPayloadVersion | String (16) | Outbound: payload version |
| TableView | String (32) | Outbound: table or view name |
Usage Notes
ConnectionIdis the primary ASAPIO instance key and the recommended navigation anchor for all related queries.Hostname,Port, andSSLare only populated for HTTP-type RFC destinations.- For interfaces, always prefer navigation or
$filterbyConnectionIdto keep response sizes manageable:GET /ConnectionSet('{id}')/ToInterfacesGET /InterfaceSet?$filter=ConnectionId eq '{id}'
EventsandHeaderAttributesare always returned regardless of theisActiveflag.HeaderAttributesare returned as flatNAME=VALUEstrings — split on comma to extract individual values.