Skip to main content
Access tokens expire after 15 minutes. Use the refresh token to get a new pair without re-authenticating.

Manual Refresh

try {
  const response = await client.someApiCall();
} catch (err) {
  if (err.status === 401) {
    // Access token expired — refresh it
    const { accessToken, refreshToken } = await client.refreshToken({
      refreshToken: storedRefreshToken,
    });

    // Retry the original request (SDK auto-updates stored tokens)
    const response = await client.someApiCall();
  }
}

Automatic Refresh Pattern

Wrap your API calls with an interceptor that handles 401s automatically:
async function withAutoRefresh<T>(fn: () => Promise<T>): Promise<T> {
  try {
    return await fn();
  } catch (err: any) {
    if (err.status === 401 && client.isAuthenticated) {
      try {
        await client.refreshToken({ refreshToken: client.getRefreshToken() });
        return await fn(); // retry with new token
      } catch {
        // Refresh token also expired — force re-auth
        client.signOut();
        throw new Error("Session expired. Please sign in again.");
      }
    }
    throw err;
  }
}

// Usage
const balance = await withAutoRefresh(() => client.getTradingBalance({ venue: "kalshi" }));

Refresh Token Expiry

Refresh tokens expire after 7 days. When a refresh token expires, the user must sign in again. Listen for auth state changes:
client.onAuthStateChange((state) => {
  if (!state.isAuthenticated) {
    // Redirect to sign-in page
    router.push("/sign-in");
  }
});