Discovery API Configuration
Discovery API
An open, read-only OData API that lets external tools discover how the ASAPIO Integration Add-on is configured on a customer's SAP system — installed connector types, configured connections, and inbound/outbound interfaces, including status flags, endpoint details, linked events, and header attributes.
Overview
The Discovery API exposes the ASAPIO Integration Add-on configuration in a discoverable, read-only OData model. Use it to inspect which connectors are installed, how connections are configured, and which interfaces run on top of them.
Who uses it
The API is open to partners. It is consumed, for example, by:
- the Whitepaper.id Integration Cockpit, and
- the Landscape Explorer in the ASAPIO Event Studio.
Operating model
- The API runs on the customer's own SAP instance and is operated there together with the ASAPIO Integration Add-on — there is no separate deployment.
- It is read-only: consumers can discover and visualise the integration configuration, but cannot change it through this API.
- Availability follows the ASAPIO Integration Add-on on that instance.
Availability
- The Discovery API is part of the ASAPIO Integration Add-on as of release 9.32607 ("July 2026").
- For earlier releases, and for the current OEM release for SAP Advanced Event Mesh, the API is shipped as a separate installation file — please request your additional download / installation file from ASAPIO.
Enabling the OData service
The Discovery API is an OData V2 service registered through SAP Gateway. After the ASAPIO Integration Add-on is installed, an administrator activates the service once per system. The procedure is the same for SAP ECC (with embedded SAP Gateway, component SAP_GWFND) and SAP S/4HANA.
Prerequisites
- The ASAPIO Integration Add-on is installed (see Availability).
- The SAP Gateway / OData foundation (
SAP_GWFND) is available and the Gateway framework is active. - You hold administration authorization for the Gateway service-maintenance transactions.
Activate the service
- Open transaction
/IWFND/MAINT_SERVICE(Activate and Maintain Services). - Choose Add Service.
- Enter the System Alias: use
LOCALfor an embedded Gateway deployment (the default on S/4HANA and on most ECC systems), or your backend alias for a hub deployment. - Search for the Discovery API technical service name as listed in the ASAPIO installation note, then select it.
- Choose Add Selected Services, assign a package and transport (or local
$TMP), and confirm. The service and its ICF node are registered and activated. - Confirm the service shows an active (green) status in
/IWFND/MAINT_SERVICE, and that its node under/sap/opu/odata/…is active in transactionSICF.
Test the activation
Call the service metadata with the SAP Gateway Client (/IWFND/GW_CLIENT) or a browser:
GET /sap/opu/odata/<namespace>/<SERVICE_NAME>/$metadata
A 200 OK response returning the EDMX metadata document confirms the service is reachable. You can then call the entity sets described in the API Reference.
Authorization
- All endpoints require display authorization for the ASAPIO configuration (authorization object
/ASADEV/CU, activity03). - If the authorization is missing, the request fails with a business error ("No authorization …").
- Access restriction per user or instance is not handled inside the service — it must be configured at the calling system or user-permission level.
API Reference
Connectors
GET/ConnectorSetList installed connectors
Returns all installed connector types. Non-installed connectors are excluded, so every result has isInstalled = true. Sorted by ConnectorId.
Query parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| $filter | query | string | Supports ConnectionId eq '…' and InterfaceId eq '…'. Other fields may not be honored. |
| $top | query | integer | Maximum number of records to return. |
| $skip | query | integer | Number of records to skip (paging). |
Responses
200 OK — application/json — array of Connector.
{
"d": {
"results": [
{
"ConnectorId": "AZURE",
"isInstalled": true,
"isActive": true,
"HeaderAttributes": "REGION=westeurope,RETRY=3",
"LoadType": "Real-time",
"DataLayer": "ASAPIO Payload",
"ASAPIOPayload": "ZACI_SALESORDER",
"ASAPIOPayloadVersion": "0001",
"TableView": ""
}
]
}
}
Behaviour
- Reads connector types from the Connector Catalog (
/ASADEV/ACI_ADPT). isInstalled:trueif the handler class exists in the ABAP class repository (SEOCLASS).isActive:trueif any Connection Definition uses this connector type.
GET/ConnectorSet('{ConnectorId}')Get a single connector
Returns one connector type by key.
Path parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| ConnectorId | path | string | required Connector type identifier. |
Responses
200 OK — a single Connector.
404 Not Found — connector type not found in either the Outbound (/ASADEV/AMR_OBJ) or Inbound (/ASADEV/AMR_OB_I) source.
Behaviour
- Single-entity lookup: Outbound table first, then Inbound. If found in neither → resource-not-found error.
Connections
GET/ConnectionSetList all connections
Returns all configured connections, read from the Connection Definitions (/ASADEV/AMR_CONN).
Query parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| $top | query | integer | Maximum number of records to return. |
| $skip | query | integer | Number of records to skip (paging). |
Responses
200 OK — array of Connection.
If no connections exist for the request, the service raises a "No data found" error (not an empty list).
Behaviour
- Endpoint enrichment: if
RFCDestis an HTTP destination (type G/H),Hostname/Port/SSLare resolved viaRFC_READ_HTTP_DESTINATION.
GET/ConnectorSet('{ConnectorId}')/ToConnectionsList connections for a connector
Navigation property. Returns the connections that use a given connector type.
Path parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| ConnectorId | path | string | required Connector type identifier. |
Responses
200 OK — array of Connection where ConnectionType = ConnectorId.
Interfaces
GET/InterfaceSetList all interfaces
Returns all inbound and outbound interfaces. For large landscapes, prefer navigation or a $filter by ConnectionId (see below) to keep responses small.
Query parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| $filter | query | string | Supports ConnectionId eq '…' and InterfaceId eq '…'. Other fields may not be honored. |
| $top | query | integer | Maximum number of records to return. |
| $skip | query | integer | Number of records to skip (paging). |
Responses
200 OK — array of Interface.
Behaviour
- Consistent sorting: instance ASC, object ASC, direction DESC.
GET/ConnectionSet('{ConnectionId}')/ToInterfacesList interfaces for a connection (preferred)
Navigation property and the recommended way to read interfaces — it scopes the result to a single connection.
Path parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| ConnectionId | path | string | required ASAPIO instance identifier (primary anchor). |
Responses
200 OK — array of Interface for the connection.
GET/InterfaceSet(InterfaceId='{InterfaceId}',ConnectionId='{ConnectionId}')Get a single interface
Returns one interface by its composite key.
Path parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| InterfaceId | path | string | required Interface identifier. |
| ConnectionId | path | string | required Parent connection identifier. |
Responses
200 OK — a single Interface.
404 Not Found — not found in either the Outbound (/ASADEV/AMR_OBJ) or Inbound (/ASADEV/AMR_OB_I) source.
{
"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": "Real-time",
"DataLayer": "ASAPIO Payload",
"ASAPIOPayload": "ZACI_SALESORDER",
"ASAPIOPayloadVersion": "0001",
"TableView": ""
}
}
isActive determination
- Step 1 — Classic BOR event linkage: if
MessageTypeis set, look upSWFDEVTYP, then checkSWFDEVENA. If enabled →isActive = true. - Step 2 — Event Studio runtime log: if Step 1 did not match and
/ASADEV/DATA_LOGexists, check for an active record matchingConnectionId + InterfaceIdwithisactive = 'X'. If found →isActive = true. - Note: activation check is not supported for RAP linkages created outside Event Studio.
Schemas
SCHEMAConnectorConnectorSet · key: ConnectorId
| 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 from /ASADEV/ACI_HATT. |
| LoadType | String | Outbound only. I → Incremental, P → Packed, F → Full load. |
| DataLayer | String | Outbound only. Payload present → ASAPIO Payload; else table/view → Table/View; else → Custom. |
| ASAPIOPayload | String (32) | Outbound only: payload view name. |
| ASAPIOPayloadVersion | String (16) | Outbound only: payload version. |
| TableView | String (32) | Outbound only: table or view name. |
SCHEMAConnectionConnectionSet · key: ConnectionId
| 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 | Resolved host, only for HTTP destinations. |
| Port | String | Resolved port, only for HTTP destinations. |
| SSL | Boolean | SSL flag, only for HTTP destinations. |
SCHEMAInterfaceInterfaceSet · key: InterfaceId + ConnectionId
| Field | Type | Notes |
|---|---|---|
| InterfaceId | String (30) | Interface identifier. |
| ConnectionId | String (15) | Parent connection, use as primary filter. |
| Direction | String | Inbound or Outbound. |
| MessageType | String | SAP message/event type. |
| lastRun | String | Timestamp of last execution. |
| isActive | Boolean | Activation status (see the single-interface operation for the logic). |
| Events | String | Comma-separated linked events from SWFDEVTYP (e.g. CREATED,CHANGED). Populated regardless of isActive. |
| HeaderAttributes | String | Comma-separated NAME=VALUE pairs from /ASADEV/ACI_HATT, joined by INSTANCE + OBJECT. |
| LoadType | String | Outbound only. I → Incremental, P → Packed, F → Full load. |
| DataLayer | String | Outbound only. Payload present → ASAPIO Payload; else table/view → Table/View; else → Custom. |
| ASAPIOPayload | String (32) | Outbound only: payload view name. |
| ASAPIOPayloadVersion | String (16) | Outbound only: payload version. |
| TableView | String (32) | Outbound only: table or view name. |
Practical Consumer Notes
ConnectionIdis the ASAPIO instance key and primary navigation anchor.- Hostname / Port / SSL are populated only for HTTP-type RFC destinations.
ConnectorSetintentionally excludes non-installed connector types.- For interfaces, prefer navigation or
$filterbyConnectionId— this keeps responses small and predictable:GET /ConnectionSet('{id}')/ToInterfacesGET /InterfaceSet?$filter=ConnectionId eq '{id}'
- Events and HeaderAttributes are always populated regardless of
isActivestatus. - HeaderAttributes are returned as a flat
NAME=VALUEstring — split on comma if individual values are needed.