---
title: "List Research Agent session cited sources"
method: GET
path: "/sessions/agents/{sessionId}/sources"
tags: ["Research Agent"]
---

# List Research Agent session cited sources

`GET /sessions/agents/{sessionId}/sources`

## Request

- Base URL: `https://elicit.com/api/v2`
- URL: `https://elicit.com/api/v2/sessions/agents/{sessionId}/sources`
- Auth: HTTP bearer

List every source a Research Agent session cited, once each, with the abstract that the events feed omits.

Sources in the response were actually cited in the session — those backing a message citation plus those cited by an artifact the answer produced or referenced, delivered or not — not every search result the agent looked at.

Each entry carries the same fields as a citation's `source` on the events feed, plus `abstract`. Join the two on `sourceRef`, which identifies the same source everywhere it appears in a session. The whole list is returned in one response; there is no cursor.

`fullTextAvailable` on this endpoint executes a query against Elicit's retrieved-full-text store. The events feed reports only the verdict the session itself recorded at the time.

`abstract` is the source's own summary — the abstract for a paper, or an adapter-provided summary for a web or press-release source. It is `null` when unavailable, and also for the publishers whose abstracts Elicit cannot redistribute; the paper search endpoint applies the same exclusion.

### Example

```bash
curl https://elicit.com/api/v2/sessions/agents/{sessionId}/sources \
  -H "Authorization: Bearer elk_live_your_key_here"
```

## Path parameters

- `sessionId` string, uuid, required

## Response `200`

Sources cited in the session.

- GetAgentSessionSourcesResponse
  - `sessionId` string, required: Unique identifier for the research agent session.
  - `sources` PublicAgentSessionSource[], required: Every source the session cited, listed once each, with the abstract that the events feed omits. Join to citations on the events feed by `sourceRef`.
    - `sourceRef` string, required: Opaque identifier for the underlying source, stable everywhere it appears in a session (message citations, table cells, and the cited-sources endpoint). Use it to deduplicate citations and to join a citation to its entry from the session's cited-sources endpoint, which additionally carries the abstract. Never a raw internal id; do not construct or decode it.
    - `title` string, nullable, required: Title of the cited work.
    - `authors` string[], required: Authors of the cited work, in display order.
    - `year` integer, nullable, required: Publication year.
    - `doi` string, nullable, required: Digital Object Identifier (DOI), when available.
    - `url` string, nullable, required: Best available URL for the cited work.
    - `venue` string, nullable, required: Journal, conference, repository, or other publication venue.
    - `citationCount` integer, nullable, required: Number of works citing this source, when known.
    - `fullTextAvailable` boolean, nullable, required: Whether the source's full text (rather than the abstract alone) is available. Null when the session recorded no verdict — most often on the events feed, which reports only what the session itself recorded. The cited-sources endpoint resolves those unknowns and is the reliable place to read this field.
    - `studyTypeTags` string[], required: Study-design tags for the source, when classified (e.g. "Randomized Controlled Trial", "Meta-Analysis").
    - `journalQuartile` integer, nullable, required: Journal ranking quartile from 1 (highest) to 4, when known.
    - `elicitId` string, nullable, required: Elicit's identifier for the source, when it is in the Elicit corpus.
    - `abstract` string, nullable, required: The source's own summary — the abstract for a paper, or the adapter-provided summary for a web or press-release source. Null when unavailable, and also for publishers whose abstracts Elicit cannot redistribute (the same copyright exclusion applied by the paper search endpoint).
  - `url` string, required: URL to view the session in the Elicit web interface. Only the owner can continue it.

## Other responses

- `400`: The request body, query parameters, or path ID failed validation.
- `401`: Authentication failed. The API key is missing, invalid, revoked, or expired.
- `403`: API access is not available on your current plan. Upgrade to Pro or above to use the API.
- `404`: The session does not exist or is not accessible to you for this operation.
- `429`: Rate limit exceeded. More than 100 requests per minute were received from your IP address; further requests are blocked for 5 minutes.
- `500`: An unexpected error occurred. Retry reads with backoff; before retrying a write, check whether it took effect. See Error Handling for retry guidance.

## Changes

- **2026-10-13** `27c80b9a3470`: 5 info
  - added the optional property `error/details` to the response with the `400` status
  - added the optional property `error/details` to the response with the `401` status
  - added the optional property `error/details` to the response with the `403` status
  - added the optional property `error/details` to the response with the `404` status
  - …1 more
- **2026-09-27** `9b5b75b828ab`: 5 info
  - added the optional property `error/sessionId` to the response with the `400` status
  - added the optional property `error/sessionId` to the response with the `401` status
  - added the optional property `error/sessionId` to the response with the `403` status
  - added the optional property `error/sessionId` to the response with the `404` status
  - …1 more
- **2026-09-24** `9c069291b449`: 1 info
  - added the non-success response with the status `400`
- **2026-09-24** `282a68222364`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/elicit/apis/elicit-api/changes/sessions/agents/:sessionId/sources/get.md)

---

[API](https://skmtc.dev/elicit/apis/elicit-api.md) - [All operations](https://skmtc.dev/elicit/apis/elicit-api/llms.txt) - [OpenAPI document](https://skmtc.dev/elicit/apis/elicit-api/revisions/78db836edb9c?raw)
