---
title: "List library sources"
method: GET
path: "/library/sources"
tags: ["Library"]
---

# List library sources

`GET /library/sources`

## Request

- Base URL: `https://elicit.com/api/v2`
- URL: `https://elicit.com/api/v2/library/sources`
- Auth: HTTP bearer

Returns your own sources, newest first. To list a shared collection's papers, pass its id in the `collectionId` query parameter; those papers are not included in the unfiltered list. Each returned source carries your `role` and its visible collection memberships in `collectionIds`.

Filters combine with AND. `q` matches each term as a case-insensitive substring of the title, authors, abstract, venue, or Elicit id. A DOI-shaped term matches the DOI. `doi` and `elicitId` are exact filters. `fullTextStatus` filters by whether parsed full text is attached.

Default page size 50, maximum 100. `totalCount` counts all matches, not the page.

### Example

```bash
curl "https://elicit.com/api/v2/library/sources?q=semaglutide&fullTextStatus=available" \
  -H "Authorization: Bearer elk_live_your_key_here"
```

## Query parameters

- `q` string: Search query: whitespace-separated words and "quoted phrases" (max 10 terms). Every term must match the title, an author, the abstract, the venue, the Elicit id, or — for DOI-shaped terms — the DOI (case-insensitive substring). Terms are ANDed; there is no OR — run one request per alternative.
- `doi` string: Exact DOI match; doi.org URLs and doi: prefixes are accepted.
- `elicitId` string
- `collectionId` string, uuid: Restrict to one collection.
- `yearMin` integer
- `yearMax` integer
- `fullTextStatus` 'pending' | 'available' | 'unavailable': Only sources whose fullTextStatus matches.
- `cursor` string: Pagination cursor from a previous response's nextCursor.
- `limit` integer

## Response `200`

One page of matching sources.

- ListLibrarySourcesResponse
  - `sources` LibrarySource[], required
    - `id` string, uuid, required: Stable id of the source.
    - `title` string, nullable, required
    - `authors` string[], required
    - `year` integer, nullable, required
    - `venue` string, nullable, required
    - `abstract` string, nullable, required: Abstract as markdown.
    - `doi` string, nullable, required
    - `url` string, nullable, required
    - `elicitId` string, nullable, required: Elicit corpus id, present once the paper has been matched to the corpus.
    - `pdfUrls` string[], required
    - `collectionIds` string[], required: Collections this source belongs to that are visible to you.
    - `role` 'writer' | 'reader', required: Your role on this source: `writer` for your own sources and for a shared collection's papers when you own or can edit that collection; `reader` for a shared collection's papers you can only view. Any role can read the source and use it in reviews. Writers edit metadata, attach a PDF, delete, and add to collections.
    - `fullTextStatus` 'pending' | 'available' | 'unavailable', required: Whether parsed full text is attached: pending — a PDF is still parsing, or none has been looked for yet; available — parsed and attached; unavailable — looked for, none found.
    - `createdAt` string, required
    - `updatedAt` string, required
    - `links` object, required
      - `self` string, required: API URL of this source.
      - `fullText` string, required: API URL of the parsed full text; 404s until fullTextStatus is available.
  - `nextCursor` string, nullable, required: Pass as ?cursor= to fetch the next page; null on the last page.
  - `totalCount` integer, required: Total matches for the query across all pages.

## Other responses

- `400`: A malformed id, or an unknown or invalid query parameter.
- `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.
- `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`: 4 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 `500` status
- **2026-09-27** `9b5b75b828ab`: 4 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 `500` status
- **2026-09-15** `69b6844982c1`: 1 breaking, 1 info
  - removed the required property `sources/items/ownedByMe` from the response with the `200` status
  - added the required property `sources/items/role` to the response with the `200` status
- **2026-09-11** `acdbab329322`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/elicit/apis/elicit-api/changes/library/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)
