- OAuth (Slack, Linear, GitHub, Notion) — one click, captures workspace info automatically. See OAuth flow.
- PUT (all providers) — supply credentials directly. Used by the manual key paths and by Webhook/ASC-write which don’t have an OAuth flow.
Providers
GET — list
PUT — upsert
Every PUT triggers a connectivity test against the provider before saving. If the test fails, the request returns
422 INTEGRATION_TEST_FAILED and nothing is persisted.
DELETE
enabled: false instead.
Enabling integrations on the agent
Setting credentials is necessary but not sufficient. The integration is only used by the agent if it’s listed inpreferences.enabledIntegrations:
Errors
400 INVALID_PROVIDER— unknown provider400 MISSING_CREDENTIAL— required credential field absent422 INTEGRATION_TEST_FAILED— credentials are wrong or endpoint is unreachable
OAuth flow (Slack, Linear, GitHub, Notion)
return_to URL is validated against an allowlist of host prefixes (open-redirect guard). Defaults: https://app.appeeky.com, https://api.appeeky.com, http://localhost. Configure via COFOUNDER_OAUTH_RETURN_TO_ALLOWLIST.
After a successful callback the row in cofounder_integrations is upserted with:
auth_method = 'oauth'oauth_account_label,oauth_external_id,oauth_scopepopulated from the providerencrypted_credentials.accessToken(and provider-specific aliases likebotTokenfor Slack)

