Action: app_topolo_developers.connections.catalog.list.
Outcome
This public action lists published launchable application connection declarations and their reverse provider view. It does not list this organization’s active connections, provision subscriptions, grant access, resolve provider records or test delivery.
GET /api/catalog/connections
Before you start
Only optional app is accepted: application id or slug,1–160 characters. It is a filter, not organization, workspace or resource authority. No resource context is required by this public handler; none should be invented. Credentials used for metadata discovery do not make the response organization-specific.
Request and interpretation
Source loads the launchable manifest directory internally in pages of100, stopping at hasMore=false and refusing nonadvancing cursors. Public output has no cursor/page token or caller-controlled limit. A failed internal read is not a successful empty result; no partial-success collection is emitted by this handler. Concurrent catalog changes are not a cross-page snapshot.
Top-level HTTP200 body is exactly apps,providers,count, without success/data/message/timestamp envelope. count is apps.length after optional filtering, not provider count or the total executable action count. Apps with no consumed actions/events/references and no provided references are omitted.
Each apps entry has app:{appId,slug,displayName},consumes:{actions,events,references},provides:{references}. Declaration arrays pass through valid manifest values; absent categories become empty arrays. Optional declaration fields remain optional and must not be invented. Preserve provider-defined reference declaration keys rather than replacing them with an abbreviated local model.
Each providers entry has provider:{appId,slug,displayName,published},actions,events,references. Missing provider manifests give null slug/displayName and published=false. Reverse actions carry action and consumers with app identity,scopes,resource,optional,purpose; reverse events carry type,version and consumers with app identity,scope,optional,purpose. Reverse references retain the provider declaration, declared and consumers with placedIn; an undeclared referenced type uses source fallback fields and declared=false.
App filtering includes matches as consumer or provider in both directions; it is not a transitive graph traversal. App entries sort by slug, provider entries by app id and reverse action/event/reference keys deterministically. Forward declaration order is retained.
Public responses use Cache-Control:public,max-age=60. Published declarations and reverse consumers can be cached and are not current authorization, availability, connection activation or delivery evidence. Invalid stored connection declarations are treated as absent by the declaration reader.
All examples are fictional complete synthetic UNRUN success carriers, never observed application/provider/organization records. This source revision matches current action metadata; serving-runtime adoption was not independently tested.
Worked responses
Declared action with no published provider manifest
Complete source-derived SYNTHETIC UNRUN HTTP200 body. Fictional consumer declares an action from a provider absent from this synthetic launchable manifest set; no connection or grant is implied.
Request:
{}
Complete HTTP200 body:
{
"apps": [
{
"app": {
"appId": "app_example_consumer",
"slug": "example-consumer",
"displayName": "Example Consumer"
},
"consumes": {
"actions": [
{
"action": "app_example_provider.items.list",
"scopes": [
"items:read"
],
"resource": "workspace",
"optional": false,
"purpose": "Read example items in the selected provider workspace"
}
],
"events": [],
"references": []
},
"provides": {
"references": []
}
}
],
"providers": [
{
"provider": {
"appId": "app_example_provider",
"slug": null,
"displayName": null,
"published": false
},
"actions": [
{
"action": "app_example_provider.items.list",
"consumers": [
{
"appId": "app_example_consumer",
"slug": "example-consumer",
"displayName": "Example Consumer",
"scopes": [
"items:read"
],
"resource": "workspace",
"optional": false,
"purpose": "Read example items in the selected provider workspace"
}
]
}
],
"events": [],
"references": []
}
],
"count": 1
}
Read the declaration and reverse consumer; provider.published=false is not provider health or current caller access.
Filter with no participating declarations
Complete source-derived SYNTHETIC UNRUN HTTP200 body for a filter with no consumer or provider match.
Request:
{
"app": "app_example_unused"
}
Complete HTTP200 body:
{
"apps": [],
"providers": [],
"count": 0
}
count0 describes this filtered declaration view; do not enable or publish anything to make it nonempty.
Refusal and recovery
HTTP422 with stable error invalid_input and validator-issued details. Exact diagnostic issue objects vary with the published validator; no fabricated refusal body is presented. Correct only the app field, preserving environment/context. Do not retry with guessed organization/resource fields or use this view as permission to execute a provider action.
Change log
2026-10-21: Initial guide for published connection declarations, reverse consumers, filtering and cached declaration-versus-access limits. Complete worked success responses are source-derived synthetic UNRUN; no app/provider/authorization/runtime operation or source-to-serving qualification is claimed.