ts/docs/advanced/session-management.md
The Composio SDK provides powerful session management capabilities through the createSession method. This feature allows you to create new instances of the SDK with custom request options while preserving your existing configuration. This is particularly useful when you need to add request-specific headers, track request contexts, or customize request behavior for specific operations.
When initializing the SDK, you can provide the following options:
const composio = new Composio({
apiKey: 'your-api-key', // required
baseURL: 'https://api.composio.dev', // optional
allowTracking: true, // optional, default: true
allowTracing: true, // optional, default: true
provider: new OpenAIProvider(), // optional
telemetryTransport: customTransport, // optional
defaultHeaders: { 'x-request-id': 'global-id' }, // optional, applies to all requests
});
apiKey (required): Your Composio API keybaseURL (optional): Custom API endpointallowTracking (optional, default: true): Enable/disable telemetryallowTracing (optional, default: true): Enable/disable tracingprovider (optional): Custom provider (defaults to OpenAIProvider)telemetryTransport (optional): Custom telemetry transportdefaultHeaders (optional): Default headers for all requests (applies globally)When you create a new session using createSession, you get a new Composio instance that:
Sessions are particularly useful for:
Request Tracking
Context Management
Request Customization
Here's how to use session management in your application:
// Create your base Composio instance
const composio = new Composio({
apiKey: 'your-api-key',
});
// Create a session with custom headers
const sessionWithHeaders = composio.createSession({
headers: {
'x-request-id': '1234567890',
'x-correlation-id': 'session-abc-123',
'x-custom-header': 'custom-value',
},
});
// Use the session for making API calls
await sessionWithHeaders.tools.list();
You can create multiple sessions with different configurations:
// Session for user A
const userASession = composio.createSession({
headers: {
'x-user-id': 'user-a',
'x-tenant-id': 'tenant-1',
},
});
// Session for user B
const userBSession = composio.createSession({
headers: {
'x-user-id': 'user-b',
'x-tenant-id': 'tenant-2',
},
});
// Each session maintains its own context
await Promise.all([
userASession.tools.get('a'), // Will include user A's headers
userBSession.tools.list('b'), // Will include user B's headers
]);
Session Lifecycle
Header Management
Error Handling
The session accepts custom headers via the headers property. These headers will be used for all API calls made through that session:
const session = composio.createSession({
headers: {
// Custom headers
'x-request-id': 'unique-id',
'x-correlation-id': 'correlation-id',
'content-type': 'application/json',
},
});
If you want to set default headers for all requests (even outside sessions), use the defaultHeaders property in the main constructor:
const composio = new Composio({
apiKey: 'your-api-key',
defaultHeaders: {
'x-global-header': 'global-value',
},
});