---
title: "A research run's progress events"
method: GET
path: "/business/research/runs/{runId}/events"
tags: ["Research"]
---

# A research run's progress events

`GET /business/research/runs/{runId}/events`

## Request

- Base URL: `https://api.tryfuse.ai/api/v1`
- URL: `https://api.tryfuse.ai/api/v1/business/research/runs/{runId}/events`
- Auth: HTTP basic

The run's progress log in ascending `seq` order (the durable source of truth for what the agent did). Poll with `sinceSeq` set to the last `seq` you have seen: only newer events come back. A full page sets `nextSinceSeq` to its last seq (pass it as the next `sinceSeq`); otherwise it is null and you are caught up. `status` is the run's current status so a poller can stop when it is completed, failed or cancelled. Event types: run.status_changed, plan.created, tool.started, tool.finished, progress, partial_result, artifact, run.completed, run.failed, run.cancelled; `payload` depends on the type. Rate limit: 30 requests per minute, 1000 per day.

Errors:
- `404` `RESEARCH_RUN_NOT_FOUND` — No research run with that id belongs to the token owner.
- `422` `VALIDATION_FAILED` — `runId` is not a 24-character hex id, `sinceSeq` is not an integer of 0 or more, or `limit` is outside 1-500.
- `429` `RATE_LIMITED` — Per-user quota for this endpoint family exceeded (30 per minute, 1000 per day); retry after the Retry-After / RateLimit-Reset seconds.

Requires one of the following token scopes: research.

## Path parameters

- `runId` string, required: The research run id (24-character hex), as returned in `run.runId` by POST /business/research/runs.

## Query parameters

- `sinceSeq` integer: Return only events whose `seq` is strictly greater than this value; pass the last `seq` you received (or `nextSinceSeq`) to poll incrementally, omit it for the first page.
- `limit` integer: Maximum number of events per page, 1 to 500 (default 100); when a page comes back full, `nextSinceSeq` carries the last `seq` to continue from.

## Response `200`

Success

- object
  - `runId` string, required
  - `events` object[], required
    - `seq` integer, required
    - `type` 'run.status_changed' | 'plan.created' | 'tool.started' | 'tool.finished' | 'progress' | 'partial_result' | 'artifact' | 'run.completed' | 'run.failed' | 'run.cancelled', required
    - `payload` object, required
    - `ts` string, date-time, required
  - `nextSinceSeq` integer, nullable, required
  - `status` 'queued' | 'planning' | 'plan_review' | 'running' | 'generating_csv' | 'uploading' | 'completed' | 'failed' | 'cancelled', required

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `403`: Error
- `404`: Error
- `409`: Error
- `422`: Error
- `429`: Error
- `500`: Error

---

[API](https://skmtc.dev/fuseai/apis/fuse-business-api.md) · [All operations](https://skmtc.dev/fuseai/apis/fuse-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fuseai/apis/fuse-business-api/revisions/50d95e0536f4?raw)
