Register a new application in Banqup Store
In the Banqup ecosystem, apps can take various forms including standalone applications, connectors, or services that extend the platform's capabilities. This guide explains the step-by-step process for developers to add a new application to the Banqup Store.
To submit a new app, developers first register their application via API on Banqup Store, creating a draft version. Once the draft is completed, an internal Banqup Store administrator reviews the submission to ensure it meets all quality and compliance standards.
Upon successful review, the app is approved and published, making it visible and accessible to all Banqup users in the store. During the review process, the Banqup Store admin may reach out for additional information or clarification to finalize approval.
Prerequisites
store_writepermissions.- Banqup Developer Portal account and app. See guide.
- The ownerEntityId of your entity.
- Dependency apps are registered and approved in the Banqup Store.
- The application supports user space type and segment.
- Callbacks to configure and activate the app for a given space. The URLs will be provided in the manifest JSON file (last step).
Step 1: Create application draft
Endpoint: /servicemngmt/v2/applications
Request body: View documentation
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v2/applications' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"namespace": "com.unifiedpost.btx",
"name": "My-app",
"ownerEntityId": "f47c5440-89cb-11ee-b9d1-0242ac120002",
"functionalType": "APPLICATION",
"audienceType": "PUBLIC"
}
Successful response:
{
"id": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"name": "My-app",
"namespace": "com.unifiedpost.btx",
"status": "DRAFT",
"functionalType": "APPLICATION",
"audienceType": "PUBLIC"
}
NOTE: Use the generated
Idin the next steps.
Step 2: Add app info in supported languages
Endpoint: /servicemngmt/v2/applications/{applicationId}/infoLocalizations
Request body: View documentation
Path parameter: applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v2/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/infoLocalizations' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"locale": "en-GB",
"displayName": "Purchases",
"shortDescription": "Manage purchase invoices",
"description": "Purchases app helps you manage your purchase invoices"
}
Successful response:
{
"id": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"locale": "en-GB",
"displayName": "Purchases",
"shortDescription": "Manage purchase invoices",
"description": "Purchases app helps you manage your purchase invoices"
}
Step 3: Add application logo
Endpoint: /servicemngmt/v1/applications/{applicationId}/logo
Request body: View documentation
Path parameter: applicationId
curl -L -X PUT 'https://{{serverURL}}/servicemngmt/v1/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/logo' \
-H 'Content-Type: multipart/form-data' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
--form 'logoFile=@"/home/logos/My-app-logo.svg"'
Successful response: The logo is successfully added to the app.
Step 4: Add application media
Endpoint: /servicemngmt/v1/applications/{applicationId}/medias
Request body: View documentation
Path parameter: applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v1/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/medias' \
-H 'Content-Type: multipart/form-data' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
--form 'mediaFile=@"/home/medias/My-media.svg"'
--form 'displayOrder="1"' \
--form 'mediaType="IMAGE"'
Successful response:
{
"id": "8fb022af-f5ec-4491-b8e6-1073c195657c",
"applicationId": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"mediaType": "IMAGE",
"displayOrder": 1
}
Step 5: Assign a space type
Endpoint: /servicemngmt/v1/applications/{applicationId}/spaceTypes
Request body: View documentation
Path parameter: applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v1/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/spaceTypes' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"spaceType": "BUSINESS"
}
Successful response:
{
"id": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"spaceType": "BUSINESS"
}
Step 6: Assign a space segment
Segments are space type subdivisions. Specify 'ALL' if no restriction.
Endpoint: /servicemngmt/v2/applications/{applicationId}/spaceSegments
Request body: View documentation
Path parameter:
applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v2/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/spaceTypes' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"spaceSegment": "ACCOUNTING"
}
Successful response:
{
"id": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"spaceSegment": "ACCOUNTING"
}
Step 7: Assign a brand
Endpoint: /servicemngmt/v1/applications/{applicationId}/brands
Request body: View documentation
Path parameter: applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v1/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/brands' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"brandName": "Banqup"
}
Successful response:
{
"id": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"brandName": "Banqup"
}
Step 8: Assign a location
Assigning a location to an app determines in which countries the app will be visible in the Banqup Store.
If the countryCode has value all, the app will be visible in all our available locations.
Endpoint: /servicemngmt/v1/applications/{applicationId}/locations
Request body: View documentation
Path parameter: applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v1/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/locations' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"countryCode": "BE",
"status": "ACTIVE"
}
Successful response:
{
"id": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"countryCode": "BE",
"status": "ACTIVE"
}
Step 9: Assign app version
To add an app version, a manifest file must be provided. This file is also required for each additional version you add in the future.
Endpoint: /servicemngmt/v1/applications/{applicationId}/versions
Request body: View documentation
Manifest file details
| Node | Description | Required |
|---|---|---|
| serviceAccount | Refers to the app ID of the app created in Developer Portal. ![]() | Yes |
| accessManagement | Definition of permissions granted to the app and security groups if needed. | No |
| dependencies | List of apps required before installation. Include: name, namespace, minimum required version. | No |
| frontendModules | Details about the user interface: name, type (application/configuration), basepath or entry component, supported devices (web/mobile), module, module URL. | No |
| appCallbacks | Endpoints interacting with the application. Own security token may be provided for authorization header. | No |
| minAssuranceLevels | The levels of security required to use the application. E.g. urn:btx:L1/L2/L3/L50/L100 | No |
| clientConfigurations | Access management and interaction endpoints to install partner applications to several clients. | No |
Callback URLs are invoked via POST method.
| App callback | Description |
|---|---|
| addUrl | Invoked when the app is installed in the space. |
| activationUrl | Invoked when the app is temporarily suspended. |
| deactivationUrl | Invoked when the app suspension is cancelled. |
| configureUrl | Invoked if the apps requires settings to be provided during installation. |
| removeUrl | Invoked when the apps is deleted from the space. |
| security | By default, the JWT token of the current user request is reused. Optionally, if you provide your own security token, it will be used as authorization header. |
The default body payload contains the extension and space identifiers (additional settings for the configuration endpoint).
{
"extensionId": "2aa7c756-6d55-44b6-9b60-06212611cfd6",
"namespace": "com.unifiedpost.btx",
"name": "my-app",
"spaceId": "f47c5440-89cb-11ee-b9d1-0242ac120002",
"entityId": "8fcbd9ce-c169-4305-a35b-8cea5d510945",
"settings": {}
}
Path parameter: applicationId
curl -L -X POST 'https://{{serverURL}}/servicemngmt/v1/applications/2aa7c756-6d55-44b6-9b60-06212611cfd6/versions' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"version": "1.0.0",
"releaseNote": "Initial release notes",
"releaseDate": "2023-06-16T13:03:36Z",
"manifest": {
"serviceAccount": "f47c5440-89cb-11ee-b9d1-0242ac120002",
"accessManagement": {
"permissions": [
{
"resource": "space",
"scope": "space_read"
},
{
"resource": "space",
"scope": "space_write"
}
],
"customResources": [],
"permissionRoles": [],
"roleGroups": [],
"defaultGroups": []
},
"frontendModules": [
{
"name": "Purchases",
"type": "Application",
"basePath": "purchase-invoices",
"supportedDevices": [
"web",
"mobile"
],
"module": "invoices",
"moduleUrl": "/assets/{version}/micro-frontends/purchases/documents.js"
}
],
"dependencies": [
{
"namespace": "com.unifiedpost.btx",
"name": "app-1",
"minVersion": "1.0",
"countries": [
"BE",
"FR"
]
},
{
"namespace": "com.unifiedpost.btx",
"name": "app-2",
"minVersion": "1.2"
}
],
"appCallbacks": {
"addUrl": "http://myapp.domain/add",
"activationUrl": "http://myapp.domain/activate",
"deactivationUrl": "http://myapp.domain/deactivate",
"configureUrl": "http://myapp.domain/configure",
"removeUrl": "http://myapp.domain/remove",
"security" : {
"authorizationHeader" : "my-token"
}
},
"minAssuranceLevels": {
"entity": "urn:btx:L2",
"user": "urn:btx:L1"
}
},
"copyright": "Copyright 2025 Banqup"
}
The Service Store now validates all required dependencies. If dependencies are missing, application version registration is delayed until they are resolved.
Successful response:
{
"version": "1.0.0",
"releaseNote": "Initial Sales release notes",
"releaseDate": "2023-06-16T13:03:36Z",
"manifest": {
"serviceAccount": "f47c5440-89cb-11ee-b9d1-0242ac120002",
"accessManagement": {
"permissions": [
{
"resource": "space",
"scope": "space_read"
},
{
"resource": "space",
"scope": "space_write"
}
],
"customResources": [],
"permissionRoles": [],
"roleGroups": [],
"defaultGroups": []
},
"frontendModules": [
{
"name": "Purchases",
"type": "Application",
"basePath": "purchase-invoices",
"supportedDevices": [
"web",
"mobile"
],
"module": "invoices",
"moduleUrl": "/assets/{version}/micro-frontends/purchase/documents.js"
}
],
"dependencies": [
{
"namespace": "com.unifiedpost.btx",
"name": "app-1",
"minVersion": "1.0",
"countries": [
"BE",
"FR"
]
},
{
"namespace": "com.unifiedpost.btx",
"name": "app-2",
"minVersion": "1.2"
}
],
"appCallbacks": {
"addUrl": "http://myapp.domain/add",
"activationUrl": "http://myapp.domain/activate",
"deactivationUrl": "http://myapp.domain/deactivate",
"configureUrl": "http://myapp.domain/configure",
"removeUrl": "http://myapp.domain/remove",
"security" : {
"authorizationHeader" : "my-token"
}
},
"minAssuranceLevels": {
"entity": "urn:btx:L2",
"user": "urn:btx:L1"
}
},
"copyright": "Copyright 2025 Banqup",
"status": "DRAFT"
}
