Skip to content
Scalekit Docs
Talk to an EngineerDashboard

Error handling

Catch Scalekit exceptions from AgentKit calls and handle not-found, auth, and server failures

AgentKit methods throw typed exceptions when the API returns an error. Catch the specific type first, then fall back to the base server exception.

from scalekit.common.exceptions import (
ScalekitNotFoundException,
ScalekitUnauthorizedException,
ScalekitForbiddenException,
ScalekitServerException,
)
try:
account = scalekit_client.actions.get_connected_account(
connection_name="gmail",
identifier="user@example.com",
)
except ScalekitNotFoundException:
# No connected account yet — create one or send the user through OAuth
pass
except ScalekitUnauthorizedException:
# Invalid or expired client credentials / tokens
pass
except ScalekitForbiddenException:
# Caller is authenticated but not allowed for this resource
pass
except ScalekitServerException as e:
# Unexpected API or platform error
print(e.error_code, e.http_status)
ExceptionWhen it is raisedTypical response
ScalekitNotFoundExceptionResource does not exist (connected account, tool, config)Create the resource or return a clear not-found to the user
ScalekitUnauthorizedExceptionMissing or invalid credentialsRefresh tokens or fix client ID/secret
ScalekitForbiddenExceptionAuthenticated but not permittedAdjust scopes, org, or role
ScalekitServerExceptionBase class for Scalekit HTTP/API failuresLog, retry when safe, surface a generic error

ScalekitServerException is the base type. Prefer checking subclasses first so not-found and auth failures get the right UX.

A failure during scalekit_client.tools.execute_tool comes from one of two places, and the fix differs for each:

  • The upstream provider rejected the call (Gmail, Slack, Salesforce, and so on). Scalekit raises a dedicated ScalekitTool* exception. The most common is ScalekitToolUnauthorizedException, which means the connected account’s provider token was expired or revoked — re-authorize the connected account. Do not change your client credentials.
  • Scalekit rejected the call. A plain ScalekitUnauthorizedException (no tool details) means your client_id/client_secret or Scalekit token is invalid. The SDK already refreshed and retried before surfacing it, so fix the credentials.

Each tool exception subclasses both ScalekitToolException and its plain counterpart — ScalekitToolUnauthorizedException extends ScalekitUnauthorizedException — so catch the tool type first. Catch the ScalekitToolException base to handle any upstream tool failure, and read tool_error_code, tool_error_message, and execution_id for logging.

from scalekit.common.exceptions import (
ScalekitToolUnauthorizedException,
ScalekitToolRateLimitException,
ScalekitUnauthorizedException,
ScalekitToolException,
)
try:
result = scalekit_client.tools.execute_tool(
tool_name="gmail_send_email",
identifier="user@example.com",
)
except ScalekitToolUnauthorizedException:
# Upstream provider rejected the token — re-authorize the connected account
pass
except ScalekitToolRateLimitException:
# Upstream provider rate limit — back off, then retry the tool call
pass
except ScalekitUnauthorizedException:
# Scalekit-side credentials are invalid — fix client ID/secret
pass
except ScalekitToolException as e:
# Any other upstream tool failure — inspect the provider's error code
print(e.tool_error_code, e.execution_id)
ExceptionWhen it is raisedTypical response
ScalekitToolUnauthorizedExceptionUpstream provider returned 401 during tool executionRe-authorize the connected account
ScalekitToolForbiddenExceptionUpstream provider returned 403 during tool executionAdd the missing provider scope, then re-authorize
ScalekitToolRateLimitExceptionUpstream provider returned 429 during tool executionBack off and retry the tool call
ScalekitToolExceptionBase class for any upstream provider error during tool executionLog tool_error_code and execution_id; surface a clear message