Research Agent

Get Research Agent session events

Changed on

Get a reduced view of a Research Agent session's activity.

Streaming text, thinking, and tool-input deltas are collapsed into complete typed entries. With no cursor, the response contains the full reduced history. Pass the returned cursor unchanged on the next poll to receive immutable event occurrences not observed at that checkpoint.

The public event kinds are user_message, agent_message, methods, question, activity, artifacts_delivered, delivered_outputs, error, session_idle, session_paused, session_resumed, stop_requested, and session_stopped. Internal tool names, sandbox paths, raw tool results, and candidate counters are never returned.

Every event includes a stable eventId and an ISO 8601 createdAt timestamp when available. Events are immutable and append-only. A resource can have several snapshots: for example, an activity may first be started and later completed. Those occurrences share an activityId but have distinct eventId values. Append incremental responses in response order and deduplicate retries by eventId.

The top-level status has exactly the same meaning and value as the list and detail endpoints. Lifecycle facts that are not part of the shared session status vocabulary are represented by explicit events: the agent becomes ready for more input with session_idle, a stop completes with session_stopped, and pause/resume use session_paused/session_resumed.

Methods

A methods event follows the answer it describes and refers to it with messageId. It describes how the answer was produced: an approach sentence, a short summary, headed sections, the keyJudgments made along the way, the searches that were run, an evidenceBase summarizing the cited literature, and any artifacts the method produced.

searches is a deduplicated list of the queries that were run, in execution order. source is a stable corpus key rather than a display label — academic (Elicit's academic corpus), pubmed, clinical_trials, press_release, or web, with more possible as corpora are added. Together, searchedAt, maxResults, and the number of entries reproduce the search summary shown in the web interface. summary and evidenceBase are nullable: an answer can be described without either, and sections, keyJudgments, searches and artifacts are empty arrays rather than null when there is nothing to report. evidenceBase.sourceCount counts distinct sources, so it is lower than the answer's citation count whenever one source supports several citations. It counts a source as cited when a quote names it or a table row links to it in an artifact the answer produced or referenced — delivery is not the criterion — so for a session with a source-table column it can exceed the count shown on the Methods card in the web interface, which counts only quoted sources.

Citations

Every citation carries its source inline, including citationCount, fullTextAvailable, studyTypeTags, journalQuartile, and elicitId. fullTextAvailable here reports only what the session itself recorded, so it is frequently null; read it from the cited-sources endpoint, which resolves the unknowns. Abstracts are not on this feed — a message is re-emitted with a new eventId whenever its citations change, so an abstract would be repeated on each re-emission. Fetch them once from the cited-sources endpoint instead and join on sourceRef, which identifies the same source everywhere it appears in a session.

Polling example

# Full history
curl https://elicit.com/api/v2/sessions/agents/{sessionId}/events \
  -H "Authorization: Bearer elk_live_your_key_here"

# Only event occurrences not observed at the cursor checkpoint
curl "https://elicit.com/api/v2/sessions/agents/{sessionId}/events?cursor={cursor}" \
  -H "Authorization: Bearer elk_live_your_key_here"

Poll every 3–10 seconds while status is processing. The agent is ready for another request when a session_idle event appears and the status returns to completed (idle, awaiting input). A question event indicates that the agent needs input. A session_stopped event confirms that a stop request was processed. If a cursor is rejected, refetch once without a cursor and rebuild local event state.

get/sessions/agents/{sessionId}/events

Request

  • Base URL
    https://elicit.com/api/v2
  • URL
    https://elicit.com/api/v2/sessions/agents/{sessionId}/events
  • Auth
    HTTP bearer

Path parameters

sessionIdstring uuid required

Query parameters

cursorstring

Opaque cursor from a previous response. When provided, only immutable event occurrences after that checkpoint are returned. Omit it to receive the full history.

Response

Full or incremental reduced session activity.

sessionIdstring required

Unique identifier for the research agent session.

status'processing' | 'pausedForInsufficientQuota' | 'completed' | 'failed' | 'unknown' required

Current status of the session. Uses exactly the same value and semantics as the list and detail endpoints.

cursorstring required

Opaque session-bound checkpoint. Always present. Pass it unchanged as the cursor query param on the next poll to receive later event occurrences.

urlstring required

URL to view the session in the Elicit web interface. Only the owner can continue it.

Example response

{
  "events": [
    {
      "artifacts": [
        {
          "createdAt": "2025-06-15T14:30:00.000Z"
        }
      ]
    }
  ]
}

Changes

    • warning

      added the new file enum value to the ///// response property for the response status

    • warning

      added the new file enum value to the /// response property for the response status

    • info

      added the optional property /// to the response with the status