Integrations — how this works
In the app: /settings/integrations
How it works
Connect your own Apollo/Instantly/Reoon/Companies House account instead of the platform's. A submitted key is encrypted AES-256-GCM at rest (src/lib/integrations/credentialCrypto.ts) and decrypted only at the moment an intent is composed for that vendor — never logged, never returned to a browser, never stored in plaintext. Everything is tenant-scoped: your key is visible and usable by no one outside your own tenant. A provider left disconnected is UNCHANGED — the platform's own n8n credentials keep firing exactly as before, byte-identically to a tenant that never visits this page.
Data source
src/lib/integrations/credentialRepo.ts (the IntegrationCredential table) + src/lib/integrations/credentialCrypto.ts (the AES-256-GCM scheme).
Troubleshooting
A "Connected ····1234" chip only proves the key is STORED — it does not prove the key is valid with the vendor. An invalid or expired key surfaces later, as that vendor rejecting the request (a 401) the next time an intent fires for it, landing in the dead-letter queue (Ops Console) rather than blocking the connect itself. Disconnect and reconnect with a fresh key to clear it.
Who can see this: admin