Here's a walkthrough from end-to-end scenario of the main aspects of the APIM/DevPortal API.
Let's look at the main resources you need to implement an end-to-end integration, form obtaining Event API Products to registering event API access:
- Obtain Event API Products - see Getting Started with Event Portal's APIM/DevPortal API for instructions.
- Obtain the details of the Event API Product.
- Obtain the AsyncAPI document for a specific Event API Product and Plan.
- Create an Application Registration.
- Add an access request for the Event API Product and plan.
- Retrieve the status of the access request to track configuration status.
To follow the walkthrough, note one of the Event API Product ids you obtained using the steps in Getting Started with Event Portal's APIM/DevPortal API.
Obtain Details of an Event API Product
Using the id
of one of the EAPs you retrieved in the Getting Started with Event Portal's APIM/DevPortal API guide, obtain the details and replace eventApPiProductId
with the id.
The response contains:
- Plans (
plans
array) represent the service-level agreements (SLAs) or tiers offered for subscriptions created by developers. - APIs (
apis
array) contain the event APIs that are included in the Event API Product.
curl --location 'https://apim-devportal-api.solace-labs.io/api/v2/apim/eventApiProducts/{eventApPiProductId}' \
--header 'Authorization: Bearer <<api-token>>'
{
"data": {
"createdTime": 1693576372483,
"updatedTime": 1693576420187,
"createdBy": "3e2ocmx105",
"changedBy": "3e2ocmx105",
"id": "kils37cwlkz",
"name": "Asapio BUS1006",
"applicationDomainId": "bpgli1jzier",
"applicationDomainName": "asapio/consumers",
"approvalType": "automatic",
"brokerType": "solace",
"description": "BUS1006 - new version",
"version": "1.7.0",
"displayName": "1.7.0-BUS1006",
"state": "RELEASED",
"plans": [
{
"id": "8a0g3o0prdf",
"name": "silver",
"solaceClassOfServicePolicy": {
"id": "x1c1zh539xg",
"messageDeliveryMode": "guaranteed",
"accessType": "exclusive",
"maximumTimeToLive": 1,
"queueType": "single",
"maxMsgSpoolUsage": 1
}
},
{
"id": "lsw67j8cy26",
"name": "bronze",
"solaceClassOfServicePolicy": {
"id": "t9vhjuizng4",
"messageDeliveryMode": "guaranteed",
"accessType": "exclusive",
"maximumTimeToLive": 1,
"queueType": "single",
"maxMsgSpoolUsage": 1
}
}
],
"solaceMessagingServices": [
{
"solaceCloudMessagingServiceId": "dr6uq5q8gjj",
"id": "f5ug1291p2g",
"messagingServiceId": "wgex5k3ov3h",
"messagingServiceName": "APIM-GW-DEV",
"supportedProtocols": [
"smfc",
"smf",
"smfs",
"amqp",
"amqps",
"mqtt",
"secure-mqtt",
"mqttws",
"secure-mqttws",
"http",
"https"
],
"environmentName": "asapio",
"eventMeshName": "asapio"
}
],
"customAttributes": [
{
"name": "PUBLISH_DESTINATIONS",
"value": "ep-developer-portal"
}
],
"attributes": [],
"apis": [
{
"id": "29591g18w8q",
"version": "1.0.0",
"description": "BUS1006",
"displayName": "BUS1006",
"name": "BUS1006",
"customAttributes": []
}
],
"apiParameters": [
{
"name": "REFERENCE",
"dataType": "string",
"parameterType": "unbounded"
}
]
},
"meta": {}
}
Take note of a Plan and API id to use in the following calls
Obtain the AsyncAPI for a Specific Event API Product and Plan
You will likely want to present API documentation to developers and allow them to download AsyncAPI documents for use in their development process.
To obtain an AsyncAPI document:
- Set
{eventApiProductId}
using the id of the required Event API Product. - Set
{planId}
using the id of the Plan you want to apply to the AsyncAPI.
The Event API Product you retrieved previously contains all the Plans that are available. The AsyncAPI document contains protocol bindings information such as message delivery mode, queue size, and event retention policy in accordance with the Plan you reference. - Set
{eventApiId}
.
The available APIs are listed on theapis
element of the Event API Product. use theid
of any of the event APIs as required.
curl --location 'https://apim-devportal-api.solace-labs.io/api/v2/apim/eventApiProducts/{eventApiProductId}/plans/{planId}/eventApis/{eventApiId}' \
--header 'Authorization: Bearer <<api-token>>'
{
"components": {
"schemas": {
"Z_BP_ADDR": {
"x-ep-schema-version": "1.0.0",
"x-ep-schema-version-id": "vml46iq7gjg",
"$schema": "http://json-schema.org/draft-07/schema",
"description": "Description.",
"x-ep-schema-state-name": "RELEASED",
"x-ep-schema-name": "Z_BP_ADDR",
"title": "Z_BP_ADDR",
"type": "object",
"x-ep-application-domain-id": "82z4evtb5rl",
"x-ep-schema-version-displayname": "Z_BP_ADDR",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-schema-state-id": "2",
"x-ep-schema-id": "jr3if9m436q",
"properties": {
"BUT000": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PARTNER": {
"description": "Business Partner Number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-3>"
},
"NAME_LAST": {
"description": "Last name of business partner (person)",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-4>"
},
"BUT020": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ADDRNUMBER": {
"description": "Address number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-7>"
},
"ADRC": {
"type": "array",
"items": {
"type": "object",
"properties": {
"NATION": {
"description": "Version ID for International Addresses",
"type": "string",
"maxLength": 1,
"x-parser-schema-id": "<anonymous-schema-10>"
},
"DATE_FROM": {
"description": "Valid-from date - in current Release only 00010101 possible",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-11>"
},
"CITY1": {
"description": "City",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-12>"
},
"COUNTRY": {
"description": "Country Key",
"type": "string",
"maxLength": 3,
"x-parser-schema-id": "<anonymous-schema-13>"
},
"POST_CODE1": {
"description": "City postal code",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-14>"
},
"HOUSE_NUM1": {
"description": "House Number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-15>"
},
"STREET": {
"description": "Street",
"type": "string",
"maxLength": 60,
"x-parser-schema-id": "<anonymous-schema-16>"
}
},
"required": [
"From",
"Addr.Vers."
],
"x-parser-schema-id": "<anonymous-schema-9>"
},
"x-parser-schema-id": "<anonymous-schema-8>"
}
},
"required": [
"Addr. no."
],
"x-parser-schema-id": "<anonymous-schema-6>"
},
"x-parser-schema-id": "<anonymous-schema-5>"
},
"TYPE": {
"description": "Business partner category",
"type": "string",
"maxLength": 1,
"enum": [
"1",
"2",
"3"
],
"x-parser-schema-id": "<anonymous-schema-17>"
},
"CLIENT": {
"description": "Client",
"type": "string",
"maxLength": 3,
"x-parser-schema-id": "<anonymous-schema-18>"
},
"NAME_FIRST": {
"description": "First name of business partner (person)",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-19>"
}
},
"required": [
"Client",
"Partner"
],
"x-parser-schema-id": "<anonymous-schema-2>"
},
"x-parser-schema-id": "<anonymous-schema-1>"
}
},
"$id": "http://example.com/example.json",
"x-parser-schema-id": "Z_BP_ADDR"
}
},
"messages": {
"BP_CHANGE": {
"x-ep-event-id": "bukyatfi4wu",
"x-ep-custom-attr-PUBLISH_DESTINATIONS": "ep-developer-portal",
"x-ep-event-version-displayname": "BP_CHANGE",
"description": "",
"x-ep-application-domain-id": "82z4evtb5rl",
"schemaFormat": "application/vnd.aai.asyncapi;version=2.5.0",
"x-ep-event-state-name": "RELEASED",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-event-version-id": "adm4yhqiiaj",
"payload": {
"x-ep-schema-version": "1.0.0",
"x-ep-schema-version-id": "vml46iq7gjg",
"$schema": "http://json-schema.org/draft-07/schema",
"description": "Description.",
"x-ep-schema-state-name": "RELEASED",
"x-ep-schema-name": "Z_BP_ADDR",
"title": "Z_BP_ADDR",
"type": "object",
"x-ep-application-domain-id": "82z4evtb5rl",
"x-ep-schema-version-displayname": "Z_BP_ADDR",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-schema-state-id": "2",
"x-ep-schema-id": "jr3if9m436q",
"properties": {
"BUT000": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PARTNER": {
"description": "Business Partner Number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-3>"
},
"NAME_LAST": {
"description": "Last name of business partner (person)",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-4>"
},
"BUT020": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ADDRNUMBER": {
"description": "Address number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-7>"
},
"ADRC": {
"type": "array",
"items": {
"type": "object",
"properties": {
"NATION": {
"description": "Version ID for International Addresses",
"type": "string",
"maxLength": 1,
"x-parser-schema-id": "<anonymous-schema-10>"
},
"DATE_FROM": {
"description": "Valid-from date - in current Release only 00010101 possible",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-11>"
},
"CITY1": {
"description": "City",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-12>"
},
"COUNTRY": {
"description": "Country Key",
"type": "string",
"maxLength": 3,
"x-parser-schema-id": "<anonymous-schema-13>"
},
"POST_CODE1": {
"description": "City postal code",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-14>"
},
"HOUSE_NUM1": {
"description": "House Number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-15>"
},
"STREET": {
"description": "Street",
"type": "string",
"maxLength": 60,
"x-parser-schema-id": "<anonymous-schema-16>"
}
},
"required": [
"From",
"Addr.Vers."
],
"x-parser-schema-id": "<anonymous-schema-9>"
},
"x-parser-schema-id": "<anonymous-schema-8>"
}
},
"required": [
"Addr. no."
],
"x-parser-schema-id": "<anonymous-schema-6>"
},
"x-parser-schema-id": "<anonymous-schema-5>"
},
"TYPE": {
"description": "Business partner category",
"type": "string",
"maxLength": 1,
"enum": [
"1",
"2",
"3"
],
"x-parser-schema-id": "<anonymous-schema-17>"
},
"CLIENT": {
"description": "Client",
"type": "string",
"maxLength": 3,
"x-parser-schema-id": "<anonymous-schema-18>"
},
"NAME_FIRST": {
"description": "First name of business partner (person)",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-19>"
}
},
"required": [
"Client",
"Partner"
],
"x-parser-schema-id": "<anonymous-schema-2>"
},
"x-parser-schema-id": "<anonymous-schema-1>"
}
},
"$id": "http://example.com/example.json",
"x-parser-schema-id": "Z_BP_ADDR"
},
"x-ep-event-version": "1.0.0",
"x-ep-event-name": "BP_CHANGE",
"contentType": "application/json",
"x-ep-event-state-id": "2",
"x-parser-original-schema-format": "application/vnd.aai.asyncapi+json;version=2.0.0",
"x-parser-original-payload": {
"x-ep-schema-version": "1.0.0",
"x-ep-schema-version-id": "vml46iq7gjg",
"$schema": "http://json-schema.org/draft-07/schema",
"description": "Description.",
"x-ep-schema-state-name": "RELEASED",
"x-ep-schema-name": "Z_BP_ADDR",
"title": "Z_BP_ADDR",
"type": "object",
"x-ep-application-domain-id": "82z4evtb5rl",
"x-ep-schema-version-displayname": "Z_BP_ADDR",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-schema-state-id": "2",
"x-ep-schema-id": "jr3if9m436q",
"properties": {
"BUT000": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PARTNER": {
"description": "Business Partner Number",
"type": "string",
"maxLength": 10
},
"NAME_LAST": {
"description": "Last name of business partner (person)",
"type": "string",
"maxLength": 40
},
"BUT020": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ADDRNUMBER": {
"description": "Address number",
"type": "string",
"maxLength": 10
},
"ADRC": {
"type": "array",
"items": {
"type": "object",
"properties": {
"NATION": {
"description": "Version ID for International Addresses",
"type": "string",
"maxLength": 1
},
"DATE_FROM": {
"description": "Valid-from date - in current Release only 00010101 possible",
"type": "string",
"maxLength": 10
},
"CITY1": {
"description": "City",
"type": "string",
"maxLength": 40
},
"COUNTRY": {
"description": "Country Key",
"type": "string",
"maxLength": 3
},
"POST_CODE1": {
"description": "City postal code",
"type": "string",
"maxLength": 10
},
"HOUSE_NUM1": {
"description": "House Number",
"type": "string",
"maxLength": 10
},
"STREET": {
"description": "Street",
"type": "string",
"maxLength": 60
}
},
"required": [
"From",
"Addr.Vers."
]
}
}
},
"required": [
"Addr. no."
]
}
},
"TYPE": {
"description": "Business partner category",
"type": "string",
"maxLength": 1,
"enum": [
"1",
"2",
"3"
]
},
"CLIENT": {
"description": "Client",
"type": "string",
"maxLength": 3
},
"NAME_FIRST": {
"description": "First name of business partner (person)",
"type": "string",
"maxLength": 40
}
},
"required": [
"Client",
"Partner"
]
}
}
},
"$id": "http://example.com/example.json"
},
"x-parser-message-parsed": true,
"x-parser-message-name": "BP_CHANGE"
}
}
},
"servers": {
"apim-gw-dev-rests": {
"protocol": "rests",
"variables": {
"port": {
"enum": [
"9443"
]
}
},
"bindings": {},
"protocolVersion": "1.1.0",
"url": "https://mr-connection-6mdexb3glmb.messaging.solace.cloud:9443"
},
"apim-gw-dev-secure-mqttws": {
"protocol": "secure-mqttws",
"variables": {
"port": {
"enum": [
"8443"
]
}
},
"bindings": {},
"protocolVersion": "3.1.1",
"url": "wss://mr-connection-6mdexb3glmb.messaging.solace.cloud:8443"
},
"apim-gw-dev-smfs": {
"protocol": "smfs",
"variables": {
"port": {
"enum": [
"55443"
]
}
},
"bindings": {},
"protocolVersion": "1.0.0",
"url": "tcps://mr-connection-6mdexb3glmb.messaging.solace.cloud:55443"
},
"apim-gw-dev-smfc": {
"protocol": "smfc",
"variables": {
"port": {
"enum": [
"55003"
]
}
},
"bindings": {},
"protocolVersion": "1.0.0",
"url": "tcps://mr-connection-6mdexb3glmb.messaging.solace.cloud:55003"
},
"apim-gw-dev-secure-mqtt": {
"protocol": "secure-mqtt",
"variables": {
"port": {
"enum": [
"8883"
]
}
},
"bindings": {},
"protocolVersion": "3.1.1",
"url": "ssl://mr-connection-6mdexb3glmb.messaging.solace.cloud:8883"
},
"apim-gw-dev-amqps": {
"protocol": "amqps",
"variables": {
"port": {
"enum": [
"5671"
]
}
},
"bindings": {},
"protocolVersion": "1.0.0",
"url": "amqps://mr-connection-6mdexb3glmb.messaging.solace.cloud:5671"
},
"apim-gw-dev-amqp": {
"protocol": "amqp",
"variables": {
"port": {
"enum": [
"5672"
]
}
},
"bindings": {},
"protocolVersion": "1.0.0",
"url": "amqp://mr-connection-6mdexb3glmb.messaging.solace.cloud:5672"
},
"apim-gw-dev-rest": {
"protocol": "rest",
"variables": {
"port": {
"enum": [
"9000"
]
}
},
"bindings": {},
"protocolVersion": "1.1.0",
"url": "http://mr-connection-6mdexb3glmb.messaging.solace.cloud:9000"
},
"apim-gw-dev-mqtt": {
"protocol": "mqtt",
"variables": {
"port": {
"enum": [
"1883"
]
}
},
"bindings": {},
"protocolVersion": "3.1.1",
"url": "tcp://mr-connection-6mdexb3glmb.messaging.solace.cloud:1883"
},
"apim-gw-dev-mqttws": {
"protocol": "mqttws",
"variables": {
"port": {
"enum": [
"8000"
]
}
},
"bindings": {},
"protocolVersion": "3.1.1",
"url": "ws://mr-connection-6mdexb3glmb.messaging.solace.cloud:8000"
},
"apim-gw-dev-smf": {
"protocol": "smf",
"variables": {
"port": {
"enum": [
"55555"
]
}
},
"bindings": {},
"protocolVersion": "1.0.0",
"url": "tcp://mr-connection-6mdexb3glmb.messaging.solace.cloud:55555"
}
},
"channels": {
"sap_demo/BUS1006/sap-bo-data/update/json/v1/asadev/emptyType/ERD100/{REFERENCE}": {
"publish": {
"bindings": {
"rest": {
"method": "POST",
"type": "request",
"bindingVersion": "0.1.0"
},
"mqtt": {
"qos": 1,
"bindingVersion": "0.1.0"
},
"solace": {
"destinations": [
{
"destinationType": "queue",
"queue": {
"accessType": "exclusive",
"maxTtl": "1",
"maxMsgSpoolUsage": "1",
"topicSubscriptions": []
}
}
],
"bindingVersion": "0.3.0"
}
},
"message": {
"x-ep-event-id": "bukyatfi4wu",
"x-ep-custom-attr-PUBLISH_DESTINATIONS": "ep-developer-portal",
"x-ep-event-version-displayname": "BP_CHANGE",
"description": "",
"x-ep-application-domain-id": "82z4evtb5rl",
"schemaFormat": "application/vnd.aai.asyncapi;version=2.5.0",
"x-ep-event-state-name": "RELEASED",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-event-version-id": "adm4yhqiiaj",
"payload": {
"x-ep-schema-version": "1.0.0",
"x-ep-schema-version-id": "vml46iq7gjg",
"$schema": "http://json-schema.org/draft-07/schema",
"description": "Description.",
"x-ep-schema-state-name": "RELEASED",
"x-ep-schema-name": "Z_BP_ADDR",
"title": "Z_BP_ADDR",
"type": "object",
"x-ep-application-domain-id": "82z4evtb5rl",
"x-ep-schema-version-displayname": "Z_BP_ADDR",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-schema-state-id": "2",
"x-ep-schema-id": "jr3if9m436q",
"properties": {
"BUT000": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PARTNER": {
"description": "Business Partner Number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-3>"
},
"NAME_LAST": {
"description": "Last name of business partner (person)",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-4>"
},
"BUT020": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ADDRNUMBER": {
"description": "Address number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-7>"
},
"ADRC": {
"type": "array",
"items": {
"type": "object",
"properties": {
"NATION": {
"description": "Version ID for International Addresses",
"type": "string",
"maxLength": 1,
"x-parser-schema-id": "<anonymous-schema-10>"
},
"DATE_FROM": {
"description": "Valid-from date - in current Release only 00010101 possible",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-11>"
},
"CITY1": {
"description": "City",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-12>"
},
"COUNTRY": {
"description": "Country Key",
"type": "string",
"maxLength": 3,
"x-parser-schema-id": "<anonymous-schema-13>"
},
"POST_CODE1": {
"description": "City postal code",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-14>"
},
"HOUSE_NUM1": {
"description": "House Number",
"type": "string",
"maxLength": 10,
"x-parser-schema-id": "<anonymous-schema-15>"
},
"STREET": {
"description": "Street",
"type": "string",
"maxLength": 60,
"x-parser-schema-id": "<anonymous-schema-16>"
}
},
"required": [
"From",
"Addr.Vers."
],
"x-parser-schema-id": "<anonymous-schema-9>"
},
"x-parser-schema-id": "<anonymous-schema-8>"
}
},
"required": [
"Addr. no."
],
"x-parser-schema-id": "<anonymous-schema-6>"
},
"x-parser-schema-id": "<anonymous-schema-5>"
},
"TYPE": {
"description": "Business partner category",
"type": "string",
"maxLength": 1,
"enum": [
"1",
"2",
"3"
],
"x-parser-schema-id": "<anonymous-schema-17>"
},
"CLIENT": {
"description": "Client",
"type": "string",
"maxLength": 3,
"x-parser-schema-id": "<anonymous-schema-18>"
},
"NAME_FIRST": {
"description": "First name of business partner (person)",
"type": "string",
"maxLength": 40,
"x-parser-schema-id": "<anonymous-schema-19>"
}
},
"required": [
"Client",
"Partner"
],
"x-parser-schema-id": "<anonymous-schema-2>"
},
"x-parser-schema-id": "<anonymous-schema-1>"
}
},
"$id": "http://example.com/example.json",
"x-parser-schema-id": "Z_BP_ADDR"
},
"x-ep-event-version": "1.0.0",
"x-ep-event-name": "BP_CHANGE",
"contentType": "application/json",
"x-ep-event-state-id": "2",
"x-parser-original-schema-format": "application/vnd.aai.asyncapi+json;version=2.0.0",
"x-parser-original-payload": {
"x-ep-schema-version": "1.0.0",
"x-ep-schema-version-id": "vml46iq7gjg",
"$schema": "http://json-schema.org/draft-07/schema",
"description": "Description.",
"x-ep-schema-state-name": "RELEASED",
"x-ep-schema-name": "Z_BP_ADDR",
"title": "Z_BP_ADDR",
"type": "object",
"x-ep-application-domain-id": "82z4evtb5rl",
"x-ep-schema-version-displayname": "Z_BP_ADDR",
"x-ep-shared": "true",
"x-ep-application-domain-name": "asapio/assets",
"x-ep-schema-state-id": "2",
"x-ep-schema-id": "jr3if9m436q",
"properties": {
"BUT000": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PARTNER": {
"description": "Business Partner Number",
"type": "string",
"maxLength": 10
},
"NAME_LAST": {
"description": "Last name of business partner (person)",
"type": "string",
"maxLength": 40
},
"BUT020": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ADDRNUMBER": {
"description": "Address number",
"type": "string",
"maxLength": 10
},
"ADRC": {
"type": "array",
"items": {
"type": "object",
"properties": {
"NATION": {
"description": "Version ID for International Addresses",
"type": "string",
"maxLength": 1
},
"DATE_FROM": {
"description": "Valid-from date - in current Release only 00010101 possible",
"type": "string",
"maxLength": 10
},
"CITY1": {
"description": "City",
"type": "string",
"maxLength": 40
},
"COUNTRY": {
"description": "Country Key",
"type": "string",
"maxLength": 3
},
"POST_CODE1": {
"description": "City postal code",
"type": "string",
"maxLength": 10
},
"HOUSE_NUM1": {
"description": "House Number",
"type": "string",
"maxLength": 10
},
"STREET": {
"description": "Street",
"type": "string",
"maxLength": 60
}
},
"required": [
"From",
"Addr.Vers."
]
}
}
},
"required": [
"Addr. no."
]
}
},
"TYPE": {
"description": "Business partner category",
"type": "string",
"maxLength": 1,
"enum": [
"1",
"2",
"3"
]
},
"CLIENT": {
"description": "Client",
"type": "string",
"maxLength": 3
},
"NAME_FIRST": {
"description": "First name of business partner (person)",
"type": "string",
"maxLength": 40
}
},
"required": [
"Client",
"Partner"
]
}
}
},
"$id": "http://example.com/example.json"
},
"x-parser-message-parsed": true,
"x-parser-message-name": "BP_CHANGE"
}
},
"parameters": {
"REFERENCE": {
"schema": {
"type": "string",
"x-parser-schema-id": "REFERENCE"
},
"x-ep-parameter-name": "REFERENCE"
}
}
}
},
"asyncapi": "2.5.0",
"info": {
"x-ep-event-api-product-version-id": "ghv5ovh368a",
"x-ep-event-api-id": "azd2w9052o3",
"x-ep-event-api-product-version": "1.7.0",
"description": "BUS1006",
"x-ep-state-name": "RELEASED",
"title": "BUS1006",
"x-ep-application-domain-id": "bpgli1jzier",
"version": "1.0.0",
"x-ep-event-api-product-id": "kils37cwlkz",
"x-ep-event-api-version-id": "29591g18w8q",
"x-ep-application-domain-name": "asapio/consumers",
"x-ep-shared": "true",
"x-ep-event-api-version": "1.0.0",
"x-ep-event-api-product-name": "Asapio BUS1006",
"x-ep-displayname": "BUS1006",
"x-ep-state-id": "2"
},
"x-parser-spec-parsed": true
}
There are multiple options to customise the AsyncAPI format - see eventApis resource
Create an Application Registration
When a developer is interested in requesting access to Event API Products, we first need to register an application. Then we can add Access Requests for each Event API Product the developer wants to use:
- Set
{registrationId}
Each application registration requires a unique id. You can assign this id as required so you can easily find and retrieve the Application Registration. - Set the
source
Pass in an identifier or name for the instance of your system so your application registration can be attributed to its source. - Set the owner (
sourceOwner
)
If your system has an ownership model for application registration you can set a user or group name, user id, or similar.
A successful response includes all the information you supplied. It also includes an initial set of credentials for the application that is stored securely in Solace Event Portal. You can manage credentials available to an Application Registration using the applicationRegistration/{registrationId}/credentials
resources.
Other elements, such as the accessRequests array, are initially empty.
curl --location 'https://apim-devportal-api.solace-labs.io/api/v2/apim/appRegistrations' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <<api-token>>' \
--data '{
"registrationId": "myapp",
"source": "myAPIM",
"name": "My App",
"sourceOwner": "A name"
}'
{
"data": {
"registrationId": "myapp",
"source": "myAPIM",
"name": "My App",
"sourceOwner": "A name",
"accessRequests": [],
"apis": [],
"filters": [],
"credentials": [
{
"secret": {
"consumerKey": "YMLNU3SzUCiLRFZwWD3YWHfT6FS1eD3P",
"consumerSecret": "PpnsGsoTW8fqKaHP"
},
"issuedAt": 1696406691267,
"expiresAt": -1
}
],
"gatewayMessagingServices": [],
"webhooks": [],
"brokerType": "solace"
},
"meta": {}
}
Add an Access Request
You need an eventApiProductId and planId that you obtained previously, along with the registrationId you used in the previous step
Finally let's create an access request after a developer has decided which Event API Product they want to use:
- Set the
{registrationId}
in the URL - Set
accessRequestId
in the payload.
Each access request requires a unique id within the Application Registration. You can assign this id as required so you can easily find and retrieve the access request - Set
eventApiProductId
and{planId}
curl --location 'https://apim-devportal-api.solace-labs.io/api/v2/apim/appRegistrations/{registrationId}/accessRequests' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <<api-token>>' \
--data '{
"accessRequestId": "{accessRequestId}",
"eventApiProductId": "{eventApiProductId}",
"planId": "{planId}"
}'
{
"data": {
"accessRequestId": "my-access-request",
"eventApiProductId": "kils37cwlkz",
"planId": "8a0g3o0prdf",
"registrationId": "myapp",
"filters": [],
"eventApiProductVersion": "1.7.0",
"state": "APPROVED",
"eventApiResourceInformation": [
{
"accessType": "exclusive",
"maxMsgSpoolUsage": 1,
"maxTtl": 1,
"name": "myapp/kils37cwlkz/8a0g3o0prdf/BUS1006",
"eventApiId": "29591g18w8q"
}
],
"permissions": {
"publish": [
{
"sap_demo/BUS1006/sap-bo-data/update/json/v1/asadev/emptyType/ERD100/{REFERENCE}": {
"permissions": [
"sap_demo/BUS1006/sap-bo-data/update/json/v1/asadev/emptyType/ERD100/>"
],
"isChannel": true
}
}
],
"subscribe": []
},
"messagingServiceConnections": [
{
"name": "APIM-GW-DEV",
"protocol": "mqttws",
"protocolVersion": "3.1.1",
"url": "ws://mr-connection-6mdexb3glmb.messaging.solace.cloud:8000",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "secure-mqttws",
"protocolVersion": "3.1.1",
"url": "wss://mr-connection-6mdexb3glmb.messaging.solace.cloud:8443",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "https",
"protocolVersion": "1.1.0",
"url": "https://mr-connection-6mdexb3glmb.messaging.solace.cloud:9443",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "amqps",
"protocolVersion": "1.0.0",
"url": "amqps://mr-connection-6mdexb3glmb.messaging.solace.cloud:5671",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "smfs",
"protocolVersion": "1.0.0",
"url": "tcps://mr-connection-6mdexb3glmb.messaging.solace.cloud:55443",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "amqp",
"protocolVersion": "1.0.0",
"url": "amqp://mr-connection-6mdexb3glmb.messaging.solace.cloud:5672",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "smf",
"protocolVersion": "1.0.0",
"url": "tcp://mr-connection-6mdexb3glmb.messaging.solace.cloud:55555",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "smfc",
"protocolVersion": "1.0.0",
"url": "tcps://mr-connection-6mdexb3glmb.messaging.solace.cloud:55003",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "http",
"protocolVersion": "1.1.0",
"url": "http://mr-connection-6mdexb3glmb.messaging.solace.cloud:9000",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "mqtt",
"protocolVersion": "3.1.1",
"url": "tcp://mr-connection-6mdexb3glmb.messaging.solace.cloud:1883",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "secure-mqtt",
"protocolVersion": "3.1.1",
"url": "ssl://mr-connection-6mdexb3glmb.messaging.solace.cloud:8883",
"bindings": {
"msgVpn": "apim-gw-dev"
}
}
]
},
"meta": {}
}
New access requests usually are either in APPROVED
or AWAITING_APPROVAL
state. When the gateway event brokers are configured, the state changes to LIVE
.
We can check the state of the access request we added:
- Set
registrationId
in the URL. - Set
accessRequestId
in the URL.
Examine the state
of the access request in the response.
curl --location --request GET 'https://apim-devportal-api.solace-labs.io/api/v2/apim/appRegistrations/{registrationId}/accessRequests/{accessRequestId}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <<api-token>>'
{
"data": {
"accessRequestId": "my-access-request",
"eventApiProductId": "kils37cwlkz",
"planId": "8a0g3o0prdf",
"registrationId": "myapp",
"filters": [],
"eventApiProductVersion": "1.7.0",
"state": "LIVE",
"eventApiResourceInformation": [
{
"accessType": "exclusive",
"maxMsgSpoolUsage": 1,
"maxTtl": 1,
"name": "myapp/kils37cwlkz/8a0g3o0prdf/BUS1006",
"eventApiId": "29591g18w8q"
}
],
"permissions": {
"publish": [
{
"sap_demo/BUS1006/sap-bo-data/update/json/v1/asadev/emptyType/ERD100/{REFERENCE}": {
"permissions": [
"sap_demo/BUS1006/sap-bo-data/update/json/v1/asadev/emptyType/ERD100/>"
],
"isChannel": true
}
}
],
"subscribe": []
},
"messagingServiceConnections": [
{
"name": "APIM-GW-DEV",
"protocol": "mqttws",
"protocolVersion": "3.1.1",
"url": "ws://mr-connection-6mdexb3glmb.messaging.solace.cloud:8000",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "secure-mqttws",
"protocolVersion": "3.1.1",
"url": "wss://mr-connection-6mdexb3glmb.messaging.solace.cloud:8443",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "https",
"protocolVersion": "1.1.0",
"url": "https://mr-connection-6mdexb3glmb.messaging.solace.cloud:9443",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "amqps",
"protocolVersion": "1.0.0",
"url": "amqps://mr-connection-6mdexb3glmb.messaging.solace.cloud:5671",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "smfs",
"protocolVersion": "1.0.0",
"url": "tcps://mr-connection-6mdexb3glmb.messaging.solace.cloud:55443",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "amqp",
"protocolVersion": "1.0.0",
"url": "amqp://mr-connection-6mdexb3glmb.messaging.solace.cloud:5672",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "smf",
"protocolVersion": "1.0.0",
"url": "tcp://mr-connection-6mdexb3glmb.messaging.solace.cloud:55555",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "smfc",
"protocolVersion": "1.0.0",
"url": "tcps://mr-connection-6mdexb3glmb.messaging.solace.cloud:55003",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "http",
"protocolVersion": "1.1.0",
"url": "http://mr-connection-6mdexb3glmb.messaging.solace.cloud:9000",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "mqtt",
"protocolVersion": "3.1.1",
"url": "tcp://mr-connection-6mdexb3glmb.messaging.solace.cloud:1883",
"bindings": {
"msgVpn": "apim-gw-dev"
}
},
{
"name": "APIM-GW-DEV",
"protocol": "secure-mqtt",
"protocolVersion": "3.1.1",
"url": "ssl://mr-connection-6mdexb3glmb.messaging.solace.cloud:8883",
"bindings": {
"msgVpn": "apim-gw-dev"
}
}
]
},
"meta": {}
}