Skip to main content

Connector Catalog

The Catalog page (/catalog in the Integriq app) is a browsable card grid of every integration capability the app ships — connector adapters, seeded source templates, and importable configuration templates. It is the onboarding surface for operators: instead of reading code or calling the API, you can discover what exists, see whether it is active, and enable or instantiate it in one click.

What the catalog lists​

Every card corresponds to real, already-shipped code — no entry is invented:

KindExamplesWhere it comes from
AdapterAzure Virtual Desktop, SharePoint Online, Microsoft 365, S3, PDOK, Digikoppeling, Berichtenbox, DSOOpenRegister's IntegrationRegistry (registered category adapters) plus a static descriptor list for the built-in adapters not yet registered there
Source templateBRP HaalCentraal, KvK Handelsregister, xWiki, OpenCorporates, SMS/WhatsApp channelsThe lib/Settings/register.d/*-source.json seed fragments
Configuration template(importable configuration documents)Exported configuration files (see below)

Catalog entries are materialised as catalog_item OpenRegister objects by the MaterializeCatalogItems repair step, which runs on every occ upgrade / app enable and upserts by a stable kind:slug key — re-runs never duplicate. A newly registered IntegrationRegistry provider appears automatically on the next run, with no frontend change.

Status badges and the two dormancy mechanisms​

Each card carries a live status badge:

  • available — the item is usable right now. Note that seeded sources in mock mode count as available: they are reachable and return realistic canned data until you configure real credentials.
  • dormant — the item is present but inactive.

Two distinct mechanisms control dormancy, and the detail dialog dispatches accordingly:

  • flag-gated (e.g. PDOK behind pdok.feature_flag, Berichtenbox behind logius.berichtenbox.feature_flag): the "Enable" action flips the app-config flag.
  • mock-seeded (e.g. the xWiki source seeded with isEnabled: false): the "Instantiate" action creates or enables the Source object from its seed template.

The detail dialog re-checks the live status when it opens (GET /api/catalog/items/{id}/status), so a stale card never offers an action that has already been taken.

Authorization​

Enable/Instantiate is gated twice, per ADR-023:

  1. Action layer — the catalog.instantiate action in the admin-configurable action matrix (Settings → Integriq → Action authorization), seeded admin-only.
  2. Data layer — the underlying Source write still passes through OpenRegister's admin-only lock on the source schema, independent of the action matrix.

Configuration export and import​

The Catalog page header hosts the configuration import/export actions:

  • Export configuration — pick a configuration group and download it as a slug-referenced JSON (OAS) document. Credentials (apikey, secret, username, password, JWT and authorization headers) are always stripped from the export.
  • Import configuration — upload an exported document. The import is previewed first: you see what will be created, what will be updated (matched by slug), any slug collisions, and any unresolved references (slugs that do not exist in this environment — these block confirmation until you explicitly acknowledge them, because the referencing entity would import broken). Nothing is written until you confirm.

After a confirmed import, the summary lists every imported source under credentials need re-entry — exports always strip credentials, so open each imported source and re-enter them before use.

Both actions are gated by the configuration.export / configuration.import actions in the same matrix, seeded admin-only.

API​

EndpointPurpose
GET /api/catalog/items/{id}/statusLive status re-check for one catalog item
POST /api/catalog/items/{id}/instantiateEnable (flag-gated) or instantiate (source-backed) an item
POST /api/configurations/{id}/exportDownload the redacted configuration document
POST /api/configurations/import/previewNon-mutating import preview
POST /api/configurations/importConfirmed import (confirmed: true required, HTTP 400 otherwise)

Catalog listing itself uses OpenRegister's generic object API (GET /apps/openregister/api/objects/integriq/catalog_item) — there is no bespoke list endpoint.