Skip to content
Updated Sep 26, 2026 by Barča Dvořáková · Owner: analysisactiveentityconfluence-migration Edit on GitHub

Entity: externalConnectorConfig ​

Entity Type: Database table

Description: Per-tenant configuration for a connection to an external data or billing provider — for example a market data feed or a supplier's invoice API. Holds the connection's credentials and settings. connectorType and providerCode together determine which provider-specific handler processes calls made through this connector; providerCode is looked up against the generic lookup table mechanism rather than a fixed enum, so a new provider can be added without a code change. Every call made through a connector is recorded on externalConnectorLog.

Data Attributes Table ​

Attribute NameDescriptionData TypeDefault ValueRequired (= Nullable)UniqueFormatValidationsIndexExample
idPrimary key of the entity.UUIDGenerated in code (app layer)YesYesUUID v7Must be a unique identifier.Primary Key018ed0b3-c298-7c7a-96d5-8b36f5a7f8d2
tenantIdTenant this connector configuration belongs to.UUID-YesNoUUID v7Foreign Key → tenantname: idx_externalConnectorConfig_tenantId, type: btree018fa51f-fda1-79f4-8461-2cb8f1cabc10
connectorTypeCategory of connector, used to select the correct internal handler.String-YesNoenum.externalConnectorTypeOne of: supplierBilling, marketData, openData.-supplierBilling
providerCodeThe specific provider within the connector type.String-YesNoLookup key → lt.externalConnectorProviderMust exist in the lookup table.name: idx_externalConnectorConfig_tenantId_providerCode, type: btree, unique on (tenantId, providerCode)prazskaPlynarenska
credentialsProvider credentials (API keys, OAuth client details, etc.); shape depends on connectorType/providerCode.JSONB-YesNoJSON, encrypted at rest — no fixed shape documentedNever returned in plaintext through any API.-{"oauthClientId":"...","oauthClientSecret":"enc:..."}
baseUrlOverride for the provider's base URL, e.g. to target a test environment.String-NoNoURL--https://api.example.com
enabledWhether the connector is currently active.BooleantrueYesNo---true
lastSuccessfulSyncAtTimestamp of the last successful sync through this connector.Timestamp with time zone-NoNoISO 8601--2026-06-15T04:00:00Z
createdAtTimestamp of when the record was created. Immutable after insert.Timestamp with time zonenow() — set in codeYesNoISO 8601 — YYYY-MM-DDTHH:mm:ss.SSSZCannot be null; cannot be modified after creation.-2026-06-15T04:00:00Z
updatedAtTimestamp of the last update to the record.Timestamp with time zonenow() — set in codeYesNoISO 8601 — YYYY-MM-DDTHH:mm:ss.SSSZCannot be null.-2026-06-15T04:00:00Z
deletedAtTimestamp of soft deletion. Null means the record is active. Once set, immutable.Timestamp with time zone-NoNoISO 8601 — YYYY-MM-DDTHH:mm:ss.SSSZImmutable once set. Active records: WHERE deletedAt IS NULL-null
createdByIdentifier of the actor who created the record.String-YesNotype:actor — e.g. user:uuid or system:migrationNon-empty.-user:018ed0b3-c298-7c7a-96d5-8b36f5a7f8d2
updatedByIdentifier of the actor who last updated the record.String-YesNotype:actor — e.g. user:uuid or system:migrationNon-empty.-user:018ed0b3-c298-7c7a-96d5-8b36f5a7f8d2

Note on credentials. The source page describes this JSONB column's shape only as "depends on connectorType/providerCode", with a single illustrative example — no concrete per-provider schema is documented anywhere on the page. No JSON-DAT sibling file was created since there is no shape to document; flagged for the analyst rather than invented.

Audited fields ​

Recorded on created (in full), updated (changed only) and deleted (in full): connectorType, providerCode, baseUrl, enabled, lastSuccessfulSyncAt.

Excluded:

  • credentials — provider API keys / OAuth secrets, encrypted at rest and never returned in plaintext through any API (per this entity's own description); recording the value in a trail readable by anyone holding tenant-wide audit:read would defeat that protection. Still appears by name in the changed-fields list of any entry where it is set or rotated — excluded by value, not by silence, matching the same pattern used for file.rawObjectKey/cleanObjectKey.

Not registered for entityName resolution — renders id-only in the audit trail (architecture 61-audit-log.md §7.4 in the code repo: a valid, permanent state, not a gap). If registered, providerCode is the natural candidate.