> ## Documentation Index
> Fetch the complete documentation index at: https://docs.remyx.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Research and recommendations

> Research Interests, recommendations, and search.

## Research Interests

Manage your Research Interests, the context that drives personalized resource recommendations. Scope: `interests:read` / `interests:write`.

> [!NOTE]
>
> Two interests surfaces exist. The programmatic API uses **`/interests`** (documented here). `/research-interests` is the slimmer v1 surface the Outrider action reads (`GET /research-interests`, `GET /research-interests/<id>`, `POST /research-interests/<id>/refresh`, `DELETE /research-interests/<id>`); an automation key's resource-qualified `interests:read:<id>` grant is what it checks. When calling with a personal key, use `/interests`.

### List Interests

```
GET /api/v1.0/interests
```

**Response:** Array of Research Interest objects with `name`, `context`, `daily_count`, `is_active`.

### Create Interest

```
POST /api/v1.0/interests
```

| Field | Type | Required | Description |
| - | - | - | - |
| `name` | string | Yes | Interest label (e.g., "Retrieval-Augmented Generation") |
| `context` | string | Yes | URLs and descriptions defining the interest |
| `daily_count` | integer | No | Recommendations per day (default: 3) |
| `is_active` | boolean | No | Whether the interest is active (default: true) |

### Get Interest

```
GET /api/v1.0/interests/<interest_id>
```

**Response:** The full interest object. Includes an additive `experiment_history` field, a bullet list summarizing the experiments linked to this interest.

### Update Interest

```
PUT /api/v1.0/interests/<interest_id>
```

Accepts same fields as Create. Updating `context` invalidates the recommendation pool and triggers re-ranking.

### Delete Interest

```
DELETE /api/v1.0/interests/<interest_id>
```

Deletes the interest and cascading recommendations.

### Toggle Interest

```
POST /api/v1.0/interests/<interest_id>/toggle
```

Toggles the `is_active` status without deleting the interest or its history.

### Interests from a repo

```
POST /api/v1.0/interests/analyze-repo                 # {repo_url} → 202 {task_id, status_url}
GET  /api/v1.0/interests/analyze-repo/<task_id>       # poll; returns the report + structured analysis when complete
POST /api/v1.0/interests/<interest_id>/regenerate     # re-run analysis on the interest's source repo (optional {repo_url})
GET  /api/v1.0/interests/<interest_id>/project-experiments   # a project-mode interest's experiments, with included/excluded flags
GET  /api/v1.0/interests/github/repos                 # repos reachable through your GitHub connection ({connected: false, repos: []} when none)
```

### Provision an agent (Outrider)

```
POST /api/v1.0/interests/<interest_id>/provision-action
```

Provisions the [Outrider action](https://docs.remyx.ai/platform/agents/outrider-action.md) on a repo: issues an automation (`rmxa_`) key, pushes it to the repo's Actions secrets, enables Actions PR permissions, writes the workflow file, and opens a setup PR. Requires `provisioning:write`. Returns `202 { task_id, status_url }`.

| Field | Type | Description |
| - | - | - |
| `repo_url` | string | GitHub URL. Defaults to the interest's source repo |
| `agent` | string | Coding agent CLI: `claude` (default), `codex`, or `backboard`. Validated against the model provider up front; an impossible pair is a `400` |
| `model_provider` | string | Provider id (`claude_code`, `zai`, `moonshot`, `openai`, `openrouter`). Defaults to the first connected provider the agent can use |
| `phases` | object | Two-tier drafter/refiner configuration (see [Model backends](https://docs.remyx.ai/platform/agents/backends.md#the-two-tier-drafter-refiner-pattern)) |
| `branch` | string | Base branch for the setup PR |
| `workflow_filename` | string | Override the workflow file name |
| `auto_merge` | boolean | Merge the setup PR automatically (default `true`) |
| `dispatch` | boolean | Fire the first run once installed (defaults to `auto_merge`) |
| `first_run` | string | `"user"` to own the first run yourself; otherwise the engine fires a cold run when recommendations land |
| `force` | boolean | Re-drive an already-enabled repo so new `phases` rewrite the YAML, without revoking its key |
| `sealed_provider_secrets` | array | BYOK relay: `[{secret_name, key_id, encrypted_value}]` sealed against the repo's Actions public key (below). Remyx forwards the ciphertext and stores no credential |
| `reclaim_key_custody` | boolean | Hand a BYOK repo back to Remyx-held keys on re-provision |

The task result carries `pr_url`, `secret_set`, `key_label`, and, for a two-tier install with a tier whose provider has no connected key, `providers_missing_keys`.

```
GET /api/v1.0/interests/<interest_id>/provision-action/<task_id>   # poll one task
GET /api/v1.0/interests/<interest_id>/provision-action             # latest state; {provisioned: false} if none
GET /api/v1.0/interests/<interest_id>/provision-action/actions-public-key?repo_url=
```

`actions-public-key` returns `{repo, key_id, key, sealable_secret_names}`: the repo's GitHub Actions public key, so a client can seal a provider key locally before sending it as `sealed_provider_secrets`. A stale `key_id` on the POST returns `409`. Requires `provisioning:read`.

```
POST /api/v1.0/interests/<interest_id>/provision-cli-token
```

Mints the scoped automation key for a CLI-installed Outrider (`remyxai outrider setup-local`). Body `{repo_full_name}`; the plaintext key is returned once. Requires `provisioning:write`.

> [!NOTE]
>
> The provisioned workflow keys its GitHub Actions concurrency group per target (pinned paper, start-from ref, run id), so dispatches at different targets run in parallel instead of cancelling each other. Installs provisioned before this change should be re-provisioned with `force: true`.

***

## Recommendations

Get personalized resource recommendations based on your Research Interests. Scope: `recommendations:read` / `recommendations:write`.

### List Recommendations

```
GET /api/v1.0/papers/recommended
```

| Parameter | Type | Description |
| - | - | - |
| `interest_id` | string | Filter by interest UUID |
| `limit` | integer | Max results |
| `period` | string | `today`, `week` |

**Response:** Array of recommended resources with titles, abstracts, relevance scores, and links.

### Get Digest

```
GET /api/v1.0/papers/recommended/digest
```

| Parameter | Type | Description |
| - | - | - |
| `limit` | integer | Max results per interest; `0` returns every alerted recommendation with a `truncated` flag |
| `period` | string | `today`, `week` |

**Response:** Structured digest grouped by Research Interest.

### Refresh Recommendations

```
POST /api/v1.0/papers/recommended/refresh
```

| Field | Type | Description |
| - | - | - |
| `interest_id` | string | Refresh a specific interest (optional; refreshes all if omitted) |
| `num_results` | integer | Number of results to generate |

Returns `202 Accepted` with a task reference for polling.

### Poll Refresh Status

```
GET /api/v1.0/papers/recommended/refresh/<task_id>
```

Returns the status of an async recommendation refresh task.

***

## Search

Search across research assets with hybrid retrieval. Scope: `papers:read`.

### Search Assets

```
POST /api/v1.0/search/assets
```

| Field | Type | Description |
| - | - | - |
| `query` | string | Natural language search query |
| `max_results` | integer | Max results to return |
| `has_docker` | boolean | Filter for resources with runnable Docker environments |
| `categories` | array | Filter by categories |
| `use_llm` | boolean | Enable LLM-enhanced search |

**Response:** Array of matching assets with titles, abstracts, categories, Docker availability, and relevance scores.

### Get Asset Details

```
GET /api/v1.0/search/assets/<arxiv_id>
```

Returns detailed information for a specific asset: full abstract, Docker status, Dockerfile, reference summary.

### List Recent Assets

```
GET /api/v1.0/search/assets/list?limit=20&offset=0&category=cs.LG&category=cs.CV&has_docker=true
```

| Parameter | Type | Description |
| - | - | - |
| `limit` | integer | Page size (default 20, max 100) |
| `offset` | integer | Pagination offset |
| `category` | string | Repeatable; a paper matches if any requested category hits |
| `has_docker` | boolean | `true` or `false`; applied in the database query, so paging and `total` stay correct |

**Response:** `{ assets, total, limit, offset }`, newest first.

### Get Asset Statistics

```
GET /api/v1.0/search/stats
```

Returns aggregate statistics: total assets, counts by Docker availability, by category, and citation classification coverage.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.