Budibase/budibase · error · HTTPError
Slack app creation response was incomplete
Error message
Slack app creation response was incomplete
What it means
After provisioning the Slack app for the agent, the code validates the response fields (clientId, clientSecret, signingSecret, appId, oauthAuthorizeUrl). If any of these are missing or empty, it throws this 400 HTTPError because the OAuth flow cannot proceed with an incomplete Slack app manifest.
Source
Thrown at packages/server/src/api/controllers/ai/agents.ts:531
})
const created = await sdk.ai.deployments.slack.createSlackAppFromManifest({
configToken: await sdk.ai.slackAppConfig.fetchConfigToken(),
manifest,
})
const clientId = created.credentials?.client_id?.trim()
const clientSecret = created.credentials?.client_secret?.trim()
const signingSecret = created.credentials?.signing_secret?.trim()
const appId = created.app_id?.trim()
const oauthAuthorizeUrl = created.oauth_authorize_url?.trim()
if (
!clientId ||
!clientSecret ||
!signingSecret ||
!appId ||
!oauthAuthorizeUrl
) {
throw new HTTPError("Slack app creation response was incomplete", 400)
}
const state = utils.newid()
await cache.store(
getSlackOAuthStateCacheKey(state),
{
agentId,
workspaceId,
} satisfies SlackOAuthState,
SLACK_OAUTH_STATE_TTL_SECONDS,
{ useTenancy: false }
)
await sdk.ai.agents.update({
...agent,
slackIntegration: {
...agent.slackIntegration,
appId,View on GitHub (pinned to a81a902e9a)
Solutions
- Inspect the raw response from the Slack app creation service to see which field was absent
- Retry app creation — transient upstream failures often resolve on a second attempt
- Verify the Slack app creation service/env configuration (manifest, scopes, credentials) is correct
- Check Slack API status / auth for the workspace being provisioned
Defensive patterns
Strategy: validation
Validate before calling
const response = await createSlackAppRemotely(...)
const required = ["clientId","clientSecret","signingSecret","appId","oauthAuthorizeUrl"] as const
const missing = required.filter(k => !response[k])
if (missing.length) {
throw new Error(`Slack provisioning response missing: ${missing.join(", ")}`)
} Type guard
function isCompleteSlackAppResponse(r: Partial<Record<string, string>>): r is Required<Pick<Record<string,string>, "clientId"|"clientSecret"|"signingSecret"|"appId"|"oauthAuthorizeUrl">> {
return !!(r.clientId && r.clientSecret && r.signingSecret && r.appId && r.oauthAuthorizeUrl)
} Try / catch
try {
await createAgentSlackApp(ctx)
} catch (err) {
if (err instanceof HTTPError && err.message.includes("Slack app creation response was incomplete")) {
// inspect upstream provisioning logs / retry creation
} else { throw err }
} Prevention
- Monitor the Slack app creation service for partial failures
- Validate the provisioning response shape before persisting anything to the agent
- Keep Slack manifest templates and env config under version control
- Alert on provisioning responses missing any required field
When it happens
Trigger: The Slack app creation service/deployment returns a payload missing one or more of clientId, clientSecret, signingSecret, appId, or oauthAuthorizeUrl — e.g. upstream provisioning partially failed or returned an error body shaped like a success.
Common situations: Slack API outage or partial provisioning; wrong/legacy Slack manifest template; credentials service returning empty secrets; misconfigured Slack app creation endpoint env vars.
Related errors
- Slack OAuth callback is missing state
- Slack OAuth state is invalid or expired
- Slack OAuth authorization failed
- Slack OAuth callback is missing the authorization code
- Slack OAuth client credentials are not configured
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/c3a7c97f74d2bab8.
Report an issue: GitHub.