Skip to content
On this page

Application API ​

EndpointMethodDescription
application:createApplicationwebsocketCreate application
application:updateApplicationwebsocketUpdate application
application:deleteApplicationwebsocketDelete application
application:getApplicationwebsocketGet application
application:createVersionwebsocketCreate application version
application:updateVersionwebsocketUpdate application version
application:getVersionwebsocketGet application version
application:listVersionswebsocketList application versions
application:submitVersionForReviewwebsocketSubmit application version for review
application:cancelVersionReviewwebsocketCancel application version review
application:reviewVersionwebsocketReview application version
application:publishVersionwebsocketPublish application version
application:updatePublishedNetworkswebsocketUpdate application published networks
application:setDefaultApplicationwebsocketSet default application
application:removeDefaultApplicationwebsocketRemove default application
application:getDefaultApplicationwebsocketGet default application
application:listVersionReviewswebsocketList application version reviews
application:assignRolewebsocketAssign application role
application:removeRolewebsocketRemove application role
application:listRoleswebsocketList application roles
application:transferOwnershipwebsocketTransfer application ownership
application:addExternalTesterwebsocketAdd external tester
application:removeExternalTesterwebsocketRemove external tester
application:listExternalTesterswebsocketList external testers
application:searchPublishedApplicationswebsocketSearch published applications
application:searchMyApplicationswebsocketSearch my applications
application:searchMyTesterAssignmentswebsocketSearch my tester assignments
application:searchReviewQueuewebsocketSearch application review queue
appManifest:getIdentityTokenwebsocketGet identity token
application:createClientCredentialswebsocketCreate application client credentials
application:regenerateClientCredentialswebsocketRegenerate application client credentials
application:deleteClientCredentialswebsocketDelete application client credentials
application:getClientCredentialswebsocketGet application client credentials
application:revealClientCredentialsSecretwebsocketReveal application client credentials secret
application:createOidcClientwebsocketCreate application oidc client
application:regenerateOidcClientSecretwebsocketRegenerate application oidc client secret
application:deleteOidcClientwebsocketDelete application oidc client
application:updateOidcClientRedirectUriswebsocketUpdate application oidc client redirect uris
application:getOidcClientwebsocketGet application oidc client

Create application ​

Method: websocket

Endpoint: application:createApplication

Request:

{
    "data": {
        "name": string
        "description": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash; defaults to v1.0.0 if empty
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "id": string
        "created": timestamp
        "updated": timestamp
        "name": string
        "description": string
        "version": string  // label of the most recently created version, e.g. v1.1.1 or v1.1.1#hash
        "oidcClientId": string  // id of the separate AuthClient used for OIDC login; empty if not yet configured
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update application ​

Method: websocket

Endpoint: application:updateApplication

Request:

{
    "data": {
        "applicationId": string
        "name": string
        "description": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "id": string
        "created": timestamp
        "updated": timestamp
        "name": string
        "description": string
        "version": string  // label of the most recently created version, e.g. v1.1.1 or v1.1.1#hash
        "oidcClientId": string  // id of the separate AuthClient used for OIDC login; empty if not yet configured
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete application ​

Method: websocket

Endpoint: application:deleteApplication

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Get application ​

Method: websocket

Endpoint: application:getApplication

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "id": string
        "created": timestamp
        "updated": timestamp
        "name": string
        "description": string
        "version": string  // label of the most recently created version, e.g. v1.1.1 or v1.1.1#hash
        "oidcClientId": string  // id of the separate AuthClient used for OIDC login; empty if not yet configured
    }
    "error": { "status": bool, "code": int, "message": string }
}

Create application version ​

Method: websocket

Endpoint: application:createVersion

Request:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash; auto-filled by bumping the patch of the latest version if empty
        "customParams": map[string]{ custom structure }
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
        "status": string  // draft/inReview/approved/released/rejected
        "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
        "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
        "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "submitComment": string  // developer's note to the reviewer, set on submit
        "created": timestamp
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update application version ​

Method: websocket

Endpoint: application:updateVersion

Request:

{
    "data": {
        "applicationId": string
        "version": string
        "customParams": map[string]{ custom structure }
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
        "status": string  // draft/inReview/approved/released/rejected
        "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
        "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
        "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "submitComment": string  // developer's note to the reviewer, set on submit
        "created": timestamp
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get application version ​

Method: websocket

Endpoint: application:getVersion

Request:

{
    "data": {
        "applicationId": string
        "version": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
        "status": string  // draft/inReview/approved/released/rejected
        "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
        "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
        "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "submitComment": string  // developer's note to the reviewer, set on submit
        "created": timestamp
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

List application versions ​

Method: websocket

Endpoint: application:listVersions

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "versions": [{
            "applicationId": string
            "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
            "status": string  // draft/inReview/approved/released/rejected
            "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
            "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
            "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
            "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
            "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
            "submitComment": string  // developer's note to the reviewer, set on submit
            "created": timestamp
            "updated": timestamp
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Submit application version for review ​

Method: websocket

Endpoint: application:submitVersionForReview

Description: Fails if another version of this Application is already inReview or approved - only one version may be in the review pipeline at a time.

Request:

{
    "data": {
        "applicationId": string
        "version": string
        "networks": [ string ]  // ['all'] or specific network ids; defaults to previously published networks, or the caller's current network
        "excludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "comment": string  // developer's note to the reviewer, e.g. what changed or what to focus review on
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
        "status": string  // draft/inReview/approved/released/rejected
        "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
        "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
        "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "submitComment": string  // developer's note to the reviewer, set on submit
        "created": timestamp
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Cancel application version review ​

Method: websocket

Endpoint: application:cancelVersionReview

Description: Withdraws a submission, moving an inReview or approved (not yet published) version back to draft. Discards every review decision recorded for this version and removes its review queue entry.

Request:

{
    "data": {
        "applicationId": string
        "version": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
        "status": string  // draft/inReview/approved/released/rejected
        "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
        "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
        "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "submitComment": string  // developer's note to the reviewer, set on submit
        "created": timestamp
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Review application version ​

Method: websocket

Endpoint: application:reviewVersion

Description: Records an approve/reject decision, or an advisory comment/annotation with no decision at all (e.g. from an automated reviewer), for an application version. Requires the global release permission (system developers / AI reviewer's service account) - or, for a version not requesting every network, a network administrator whose managed networks overlap the requested ones (their approval is narrowed to just those networks). An approval moves the version to Approved, awaiting a separate, explicit publishVersion call.

Request:

{
    "data": {
        "applicationId": string
        "version": string
        "decision": string  // approved/rejected, or empty for an advisory comment/annotation with no decision (e.g. from an automated reviewer)
        "comment": string  // optional comment from the reviewer
        "approvedNetworks": [ string ]  // only used on approval; defaults to the requested networks
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Publish application version ​

Method: websocket

Endpoint: application:publishVersion

Description: Makes an Approved version live, superseding whatever version was previously published. Either the app's own owner/admin or a system developer can publish.

Request:

{
    "data": {
        "applicationId": string
        "version": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string  // developer-supplied, e.g. v1.1.1 or v1.1.1#hash
        "status": string  // draft/inReview/approved/released/rejected
        "customParams": map[string]{ custom structure }  // client-defined data: icons, client/interface settings, permissions, etc
        "requestedNetworks": [ string ]  // developer's requested networks on submit; ['all'] or specific network ids
        "requestedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "approvedNetworks": [ string ]  // reviewer's approved networks, set on approval; may differ from requested
        "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "submitComment": string  // developer's note to the reviewer, set on submit
        "created": timestamp
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update application published networks ​

Method: websocket

Endpoint: application:updatePublishedNetworks

Description: Lets a system developer adjust which networks a Released application is visible in, independent of any new review. Requires the global release permission.

Request:

{
    "data": {
        "applicationId": string
        "networks": [ string ]  // ['all'] or a list of specific network ids
        "excludedNetworks": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string
        "name": string
        "description": string
        "customParams": map[string]{ custom structure }  // client-defined data from the released version: icons, client/interface settings, permissions, etc
        "networks": [ string ]  // ['all'] or specific network ids the app is published in
        "excludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "publishedAt": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Set default application ​

Method: websocket

Endpoint: application:setDefaultApplication

Description: Sets networkId's single default application, replacing whatever was set before. Requires the global release permission (system developers).

Request:

{
    "data": {
        "networkId": string
        "category": string  // app/auth; defaults to 'app'
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "networkId": string
        "category": string
        "applicationId": string
        "updated": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Remove default application ​

Method: websocket

Endpoint: application:removeDefaultApplication

Description: Clears networkId's default application, if any. Requires the global release permission (system developers).

Request:

{
    "data": {
        "networkId": string
        "category": string  // app/auth; defaults to 'app'
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Get default application ​

Method: websocket

Endpoint: application:getDefaultApplication

Description: Resolves networkId's default application to its currently published version.

Request:

{
    "data": {
        "networkId": string  // defaults to the caller's current network
        "category": string  // app/auth; defaults to 'app'
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applicationId": string
        "version": string
        "name": string
        "description": string
        "customParams": map[string]{ custom structure }  // client-defined data from the released version: icons, client/interface settings, permissions, etc
        "networks": [ string ]  // ['all'] or specific network ids the app is published in
        "excludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
        "publishedAt": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

List application version reviews ​

Method: websocket

Endpoint: application:listVersionReviews

Request:

{
    "data": {
        "applicationId": string
        "version": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "reviews": [{
            "applicationId": string
            "version": string
            "reviewId": string
            "reviewerId": string
            "decision": string  // approved/rejected, or empty for an advisory comment/annotation with no decision
            "comment": string  // reviewer's note to the developer, or an advisory comment/annotation with no decision
            "approvedNetworks": [ string ]  // audit copy of the networks approved by this decision; only meaningful when Decision is approved
            "approvedExcludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
            "created": timestamp
            "invalidated": bool  // set when the version is pulled back to draft after this approval, kept for audit history
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Assign application role ​

Method: websocket

Endpoint: application:assignRole

Request:

{
    "data": {
        "applicationId": string
        "userId": string
        "roleId": string  // applicationAdmin/applicationTester (applicationOwner can be assigned via TransferApplicationOwnership)
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Remove application role ​

Method: websocket

Endpoint: application:removeRole

Request:

{
    "data": {
        "applicationId": string
        "userId": string
        "roleId": string  // applicationAdmin/applicationTester (applicationOwner can be assigned via TransferApplicationOwnership)
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

List application roles ​

Method: websocket

Endpoint: application:listRoles

Description: Lists users explicitly assigned an app-scoped role (owner/admin/tester) on this Application.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "roles": [{
            "userId": string
            "roleId": string
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Transfer application ownership ​

Method: websocket

Endpoint: application:transferOwnership

Description: Makes newOwnerUserId an Owner. If the caller was themselves an Owner, they're demoted to Admin afterward so they keep access instead of being locked out.

Request:

{
    "data": {
        "applicationId": string
        "newOwnerUserId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Add external tester ​

Method: websocket

Endpoint: application:addExternalTester

Request:

{
    "data": {
        "applicationId": string
        "version": string
        "userId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Remove external tester ​

Method: websocket

Endpoint: application:removeExternalTester

Request:

{
    "data": {
        "applicationId": string
        "version": string
        "userId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

List external testers ​

Method: websocket

Endpoint: application:listExternalTesters

Request:

{
    "data": {
        "applicationId": string
        "version": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "testers": [{
            "applicationId": string
            "version": string
            "userId": string
            "created": timestamp
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search published applications ​

Method: websocket

Endpoint: application:searchPublishedApplications

Description: End-user discovery/search: released applications/versions, optionally filtered by a case-insensitive substring match on name. Cursor-paginated: pass the response's NextCursor back as Cursor for the next page; empty NextCursor means done.

Request:

{
    "data": {
        "query": string  // case-insensitive substring match against the application name; empty matches everything
        "cursor": string  // opaque; omit for the first page, otherwise pass back the previous response's NextCursor
        "limit": int  // page size, clamped server-side; omit for the default
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applications": [{
            "applicationId": string
            "version": string
            "name": string
            "description": string
            "customParams": map[string]{ custom structure }  // client-defined data from the released version: icons, client/interface settings, permissions, etc
            "networks": [ string ]  // ['all'] or specific network ids the app is published in
            "excludedNetworks": [ string ]  // excluded network ids, only meaningful alongside 'all'
            "publishedAt": timestamp
        }]
        "nextCursor": string  // opaque; pass back as Cursor to fetch the next page. Empty means no more results
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search my applications ​

Method: websocket

Endpoint: application:searchMyApplications

Description: Owner/admin/internal-tester discovery/search: every application the caller has an app-scoped role on, optionally filtered by a case-insensitive substring match on name. Cursor-paginated: pass the response's NextCursor back as Cursor for the next page; empty NextCursor means done.

Request:

{
    "data": {
        "query": string  // case-insensitive substring match against the application name; empty matches everything
        "cursor": string  // opaque; omit for the first page, otherwise pass back the previous response's NextCursor
        "limit": int  // page size, clamped server-side; omit for the default
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applications": [{
            "id": string
            "created": timestamp
            "updated": timestamp
            "name": string
            "description": string
            "version": string  // label of the most recently created version, e.g. v1.1.1 or v1.1.1#hash
            "oidcClientId": string  // id of the separate AuthClient used for OIDC login; empty if not yet configured
            "roleId": string  // applicationOwner/applicationAdmin/applicationTester
        }]
        "nextCursor": string  // opaque; pass back as Cursor to fetch the next page. Empty means no more results
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search my tester assignments ​

Method: websocket

Endpoint: application:searchMyTesterAssignments

Description: External-tester discovery/search: application versions the caller was granted tester access to, optionally filtered by a case-insensitive substring match on name. Cursor-paginated: pass the response's NextCursor back as Cursor for the next page; empty NextCursor means done.

Request:

{
    "data": {
        "query": string  // case-insensitive substring match against the application name; empty matches everything
        "cursor": string  // opaque; omit for the first page, otherwise pass back the previous response's NextCursor
        "limit": int  // page size, clamped server-side; omit for the default
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "applications": [{
            "id": string
            "created": timestamp
            "updated": timestamp
            "name": string
            "description": string
            "version": string  // label of the most recently created version, e.g. v1.1.1 or v1.1.1#hash
            "oidcClientId": string  // id of the separate AuthClient used for OIDC login; empty if not yet configured
        }]
        "nextCursor": string  // opaque; pass back as Cursor to fetch the next page. Empty means no more results
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search application review queue ​

Method: websocket

Endpoint: application:searchReviewQueue

Description: System-reviewer discovery/search: applications tracked by the review queue, optionally filtered by Status (pending/approved/rejected) and/or a name substring. Results are ordered oldest-submitted-first. Requires the global release permission, or network administrator permission on at least one network - in which case results are scoped to entries overlapping the networks they administer.

Request:

{
    "data": {
        "status": string  // pending/approved/rejected; empty means all statuses
        "query": string  // case-insensitive substring match against the application name; empty matches everything
        "cursor": string  // opaque; omit for the first page, otherwise pass back the previous response's NextCursor
        "limit": int  // page size, clamped server-side; omit for the default
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "versions": [{
            "applicationId": string
            "version": string
            "name": string
            "status": string  // pending/approved/rejected
            "submittedAt": timestamp
            "decidedAt": timestamp
            "reviewerId": string
            "requestedNetworks": [ string ]  // denormalized from the submission's ApplicationVersion
            "requestedExcludedNetworks": [ string ]  // denormalized from the submission's ApplicationVersion
            "submitComment": string  // denormalized from the submission's ApplicationVersion
        }]
        "nextCursor": string  // opaque; pass back as Cursor to fetch the next page. Empty means no more results
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get identity token ​

Method: websocket

Endpoint: appManifest:getIdentityToken

Description: Issues a short-lived signed identity JWT for the given application. Requires the user to be authenticated. JWT claims: sub=userId, aud=applicationId, iss=platform, exp=5min, email=user email.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "token": string
    }
    "error": { "status": bool, "code": int, "message": string }
}

Create application client credentials ​

Method: websocket

Endpoint: application:createClientCredentials

Description: Generates a clientId/clientSecret pair the application can use to call the partner API as itself. There's exactly one set of credentials per application; this fails if one already exists - use regenerateClientCredentials to rotate it, or delete it first. The plaintext secret is only ever returned here; afterward, use revealClientCredentialsSecret.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientSecret": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}

Regenerate application client credentials ​

Method: websocket

Endpoint: application:regenerateClientCredentials

Description: Rotates the secret of an already-existing client, keeping its clientId and every other field unchanged. The previous secret is invalidated immediately. Fails if no credentials exist yet - use createClientCredentials first.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientSecret": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete application client credentials ​

Method: websocket

Endpoint: application:deleteClientCredentials

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Get application client credentials ​

Method: websocket

Endpoint: application:getClientCredentials

Description: Returns the application's client info without its secret.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}

Reveal application client credentials secret ​

Method: websocket

Endpoint: application:revealClientCredentialsSecret

Description: Returns the application's current client secret. Separate from getClientCredentials so the secret is only ever transmitted when explicitly asked for.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientSecret": string
    }
    "error": { "status": bool, "code": int, "message": string }
}

Create application oidc client ​

Method: websocket

Endpoint: application:createOidcClient

Description: Creates a dedicated OIDC client the application can use to let its own end users log in with their Roomful identity. There's exactly one OIDC client per application; this fails if one already exists - use regenerateOidcClientSecret to rotate its secret, or delete it first. The plaintext secret is only ever returned here or from regenerateOidcClientSecret - it cannot be revealed again afterward.

Request:

{
    "data": {
        "applicationId": string
        "redirectUris": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientSecret": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}

Regenerate application oidc client secret ​

Method: websocket

Endpoint: application:regenerateOidcClientSecret

Description: Rotates the secret of the application's existing OIDC client, keeping its clientId and every other field unchanged. The previous secret is invalidated immediately.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientSecret": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete application oidc client ​

Method: websocket

Endpoint: application:deleteOidcClient

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Update application oidc client redirect uris ​

Method: websocket

Endpoint: application:updateOidcClientRedirectUris

Description: Sets the application's OIDC client's whitelisted redirect URIs, replacing whatever was set before.

Request:

{
    "data": {
        "applicationId": string
        "redirectUris": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get application oidc client ​

Method: websocket

Endpoint: application:getOidcClient

Description: Returns the application's OIDC client info without its secret.

Request:

{
    "data": {
        "applicationId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "clientId": string
        "clientName": string
        "scope": [ string ]
        "redirectUris": [ string ]
        "authPageUrl": string
        "devMode": bool
    }
    "error": { "status": bool, "code": int, "message": string }
}