---
title: "Search"
description: "Simple title search via GET or powerful fielded search via POST. Full filter reference and pagination patterns."
canonical_url: "https://www.scholarxiv.com/developers/docs/papers-api/search"
markdown_url: "https://www.scholarxiv.com/developers/docs/papers-api/search.md"
---

# Search
URL: /developers/docs/papers-api/search
LLM index: /llms.txt
Description: Simple title search via GET or powerful fielded search via POST. Full filter reference and pagination patterns.

# Search

Two modes. Same response shape.

**Simple** (`GET`) — fast title-only search.  
**Advanced** (`POST`) — combine any of the supported fields.

Both return:

```ts title="response.ts"
{
  data: Paper[],
  pagination: { page: number, limit: number, hasMore: boolean, nextPage: number | null }
}
```

## Simple Search (GET)

```http
GET /api/v1/papers/search?q=your+query&page=0&limit=20
```

| Param  | Required | Default | Description |
|--------|----------|---------|-------------|
| `q`    | Yes      | —       | Searches paper titles (case-insensitive, word-aware) |
| `page` | No       | 0       | Zero-based page index |
| `limit`| No       | 20      | 1–100 (capped by your plan) |

**Tip:** Use simple search for autocomplete, quick lookups, or when users type into a single search box.

## Advanced Search (POST)

Send a JSON body. At least one filter in `searchFilterString` must be non-empty.

```http title="endpoint"
POST /api/v1/papers/search
```

### Request Body Fields

| Field                | Type   | Notes |
|----------------------|--------|-------|
| `searchFilterString` | object | The filters (see table below). Required to be non-empty. |
| `page` / `startIndex`| number | Zero-based page (both aliases accepted) |
| `limit` / `maxResults` | number | Page size (1–100) |
| `sortBy`             | string | `relevance` (default), `submittedDate`, or `lastUpdatedDate` |
| `sortOrder`          | string | `ascending` (default) or `descending` (also accepts `asc`/`desc`/`dsc`) |

### Available Filters

| Filter | What it matches |
|--------|-----------------|
| `all`  | Title, abstract, authors, submitter, journal ref, categories, comments, DOI, report number |
| `id`   | arXiv ID fields (`id`, `extractedID`, `baseArxivID`) |
| `ti`   | Title only |
| `au`   | Authors (supports comma-separated list) |
| `abs`  | Abstract / summary |
| `cat`  | Primary category or any category |
| `jr`   | Journal reference |
| `co`   | Comment field |
| `rn`   | Report number |

Filters are ANDed together. Several fields (`all`, `id`, `au`, `cat`) perform internal ORs across related database fields.

**Example — recent RAG papers in a specific category:**

```json title="body.json"
{
  "searchFilterString": {
    "all": "retrieval augmented generation",
    "cat": "cs.CL"
  },
  "limit": 20,
  "sortBy": "submittedDate",
  "sortOrder": "descending"
}
```

## Useful Recipes

**Exact arXiv ID**

```json
{ "searchFilterString": { "id": "2401.01234" }, "limit": 1 }
```

**Multiple authors (comma separated)**

```json
{ "searchFilterString": { "au": "Vaswani, Shazeer" } }
```

**Fielded topic + sort**

```json
{
  "searchFilterString": { "all": "contrastive learning", "cat": "cs.CV" },
  "sortBy": "lastUpdatedDate",
  "sortOrder": "descending"
}
```

## Sorting

- `relevance` — internal order (default for simple search)
- `submittedDate` — paper publication / submission date
- `lastUpdatedDate` — last time the record was updated

Invalid values fall back to `relevance` / `ascending`.

## Pagination

See the [Code Examples](/developers/docs/papers-api/examples) page for the recommended full pagination loop pattern.

> [!IMPORTANT]
> Always drive pagination from `nextPage` / `hasMore` in the response. Hard-coded loops or guessing often miss or duplicate results.

## Empty Results

A successful search with no matches returns HTTP 200 with an empty array. This is normal — not an error.

```json
{ "data": [], "pagination": { "page": 0, "limit": 20, "hasMore": false, "nextPage": null } }
```

## Performance Tips

- Keep `limit` as high as you need but respect the 100 cap (see [Rate Limits & Quotas](/developers/docs/papers-api/limits)).
- Use the most specific filters possible for faster results.
- For very large result sets, page aggressively and consider storing IDs locally.
- Use the Playground to tune queries before coding.

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
Docs-scoped sitemap: [/docs/sitemap.md](/docs/sitemap.md).
Well-known sitemap: [/.well-known/sitemap.md](/.well-known/sitemap.md).
