microsoft/autogen · error · Error

Failed to fetch session

Error message

Failed to fetch session

What it means

Thrown by SessionAPI.getSession when GET /sessions/{id}?user_id=... returns a body with falsy status. Same envelope pattern as listSessions: HTTP status is ignored; only the in-band status flag matters. Typical cause is a session id that does not exist or does not belong to the given user_id.

Source

Thrown at python/packages/autogen-studio/frontend/src/components/views/playground/api.ts:27

        headers: this.getHeaders(),
      }
    );
    const data = await response.json();
    if (!data.status)
      throw new Error(data.message || "Failed to fetch sessions");
    return data.data;
  }

  async getSession(sessionId: number, userId: string): Promise<Session> {
    const response = await fetch(
      `${this.getBaseUrl()}/sessions/${sessionId}?user_id=${userId}`,
      {
        headers: this.getHeaders(),
      }
    );
    const data = await response.json();
    if (!data.status)
      throw new Error(data.message || "Failed to fetch session");
    return data.data;
  }

  async createSession(
    sessionData: Partial<Session>,
    userId: string
  ): Promise<Session> {
    const session = {
      ...sessionData,
      user_id: userId, // Ensure user_id is included
    };

    const response = await fetch(`${this.getBaseUrl()}/sessions/`, {
      method: "POST",
      headers: this.getHeaders(),
      body: JSON.stringify(session),
    });
    const data = await response.json();

View on GitHub (pinned to 027ecf0a37)

Solutions

  1. Confirm the session exists: call listSessions(userId) and check the id is present
  2. Verify ownership — the backend rejects sessions whose user_id differs from the request's user_id
  3. Refresh/reset the local sessionId state when the session list no longer contains it
  4. Check data.message in DevTools for the backend's exact wording

Example fix

// before
const session = await sessionAPI.getSession(sessionId, userId);
// after
const sessions = await sessionAPI.listSessions(userId);
if (!sessions.some(s => s.id === sessionId)) {
  throw new Error(`Session ${sessionId} not found for this user`);
}
const session = await sessionAPI.getSession(sessionId, userId);
Defensive patterns

Strategy: try-catch

Validate before calling

// confirm existence cheaply before the detail fetch
const sessions = await sessionAPI.listSessions(userId);
if (!sessions.some(s => s.id === sessionId)) {
  throw new Error(`Session ${sessionId} not found for this user`);
}

Type guard

function isSessionEnvelope(x: unknown): x is { status: true; data: Session } {
  return !!x && typeof x === "object" && (x as any).status === true && !!(x as any).data?.id;
}

Try / catch

try {
  return await sessionAPI.getSession(sessionId, userId);
} catch (e) {
  if (/not found|does not exist/i.test(String(e))) navigateToSessionsList();
  throw e;
}

Prevention

When it happens

Trigger: GET /sessions/{sessionId}?user_id=X with a deleted/nonexistent sessionId, a sessionId belonging to another user (ownership check fails), or user_id mismatch with the authenticated token.

Common situations: Deep link to a session deleted from another browser tab, stale session id in component state after switching users, session rows cleared on backend restart with in-memory/refreshed DB.

Related errors


AI-assisted analysis of microsoft/autogen@027ecf0a37 (2026-08-15). Data as JSON: /api/errors/0595c9770f4380be. Report an issue: GitHub.