What a service is
A service is a self-contained module that wraps an external API. It declares:- Authentication type — OAuth2, custom credentials, or none
- Configuration settings — admin-level settings like base URLs or feature flags
- Tools — typed functions that call the external API, each with input/output schemas
Why the framework manages credentials
In traditional integrations, every application must implement OAuth flows, token storage, refresh logic, and secret management. This creates problems at scale and is especially problematic when AI agents are building the integrations:Three-tier architecture
Apps call services in their backend routes and workflows via generated, typed service clients. App code does not manage authentication or credentials. At call time, the framework handles credential hydration based on the current user’s authenticated context. It manages OAuth flows for connecting users to services, and can control access to specific services and tools. The service layer contains the service’s configuration (auth type, settings schema) and its implementation code (the actual API calls).Example: Slack integration
1. User connects — The app’s settings page includes a connection panel. The user clicks “Connect Slack” and the framework handles the full OAuth flow, storing their credentials securely. 2. App calls the service — A backend route calls the generated client with no auth code:conversations.list endpoint, returning the results to the app.
Next steps
- Defining a service — create, configure, and build a service
- Using a service — generate a client and call services from your app
- Authentication — auth type reference
- Configuration — admin-level service settings
- Tools — tool definition reference

