Skip to main content
Aggregator connections let Matcher pull transaction data from Open-Finance data aggregators (Pluggy, Belvo). You create a connection with a sealed credential, link a reconciliation source to it, and mint a webhook token bound to the connection. The aggregator’s webhooks then drive inbound pulls. This guide covers the full lifecycle.
Credentials (clientId/secret) are inbound-only: Matcher seals them before persistence and never returns them in a response, a log, or an error. The tenant always comes from the JWT, never from the request body.

Create a connection


Field values:
  • vendor: pluggy or belvo.
  • configName: unique (tenant-scoped) connection identity. A duplicate is a 409. The webhook token-mint endpoint binds a token to this name.
  • baseUrl: vendor API base URL, stored as the connection host.
  • accountRef: opaque vendor account reference (Pluggy itemId, Belvo link id) threaded onto the webhook pull. It is optional. Leave it out to connect the account through hosted consent.
  • clientId / secret: aggregator API credential, sealed and never emitted.
A successful create returns 201 with the secret-free connection descriptor:

Matcher ingests the pulled data into the reconciliation source that names the connection. On exactly one source, set config.connection_config_name to the configName of the connection:
API Reference: Create source

List, get, update, delete


Each list row carries id, vendor, configName, baseUrl, accountRef, testable, and awaitingConsent.

Update

Edit an existing connection by id so a mistyped baseUrl is not permanent. The vendor is immutable. The credential is optional: supply both clientId and secret to rotate the sealed credential, or omit both to leave the stored secret intact. Supplying exactly one is a 400. The other fields are optional too: a field you leave out keeps its stored value.
A connection created without accountRef waits for consent: it shows "awaitingConsent": true. POST /v1/discovery/aggregator-connections/{id}/connect-token returns a token for the consent widget of the vendor. Send the item or link id that the widget returns as accountRef in the update call above. Discovery describes the full flow.

Delete

Delete soft-deletes the connection (204), freeing its config name for reuse. A non-aggregator connection id returns 404 on any by-id operation. This surface never confirms the existence of a non-aggregator row.

Test a connection


Run a live connectivity check for an existing connection using its already-sealed credential, addressed by configName. Matcher reads the vendor from the stored connection. This call takes no credential and returns none.
A credentials-don’t-work outcome is an expected test result surfaced as "healthy": false with a 200, not an error. A missing connection returns 404. Matcher cannot test Belvo connections, so a Belvo connection returns 422 (MTCH-0210). A connection that waits for consent returns 422 (MTCH-0211).

Connector types


List the connector types the engine registry has actually registered for this deployment, each tagged with a backend-derived category (database or rest). The list reflects the live registry. Only connectors registered at boot appear. It drives the connection form’s type-select.
Each rest entry lists in requiredFields the credential fields that a REST connection of that type needs. This list excludes aggregator-vendor types (Pluggy/Belvo). The aggregator-connections surface above provisions them.

Mint a webhook token


Mint a webhook token bound to an existing aggregator connection. The response carries the raw token and its provider-facing webhook URL once. Matcher stores only the token’s SHA-256 hash.
Configure the returned webhook_url in the aggregator’s dashboard. A missing target connection returns 404. Matcher verifies each vendor delivery by an HMAC-SHA256 signature of the raw body in X-Webhook-Signature, or by source IP. A delivery that fails verification receives 401.

Response codes