---
title: "Research the manufacturer's published data with AI"
method: POST
path: "/api/admin/components/{id}/research"
tags: ["admin-components"]
---

# Research the manufacturer's published data with AI

`POST /api/admin/components/{id}/research`

## Request

- Base URL: `https://voltplan.app`
- URL: `https://voltplan.app/api/admin/components/{id}/research`
- Auth: HTTP bearer

Looks up the component's datasheet figures with a web-search-backed model (OpenRouter `web` plugin, up to 120 s) and returns them for the editor to review. **Writes nothing**: the publishing drawer fills its form, and the editor still has to save with `PATCH /api/admin/components/{id}`.

- Rate limit: 60 calls per hour per client IP (`x-forwarded-for`, else `x-real-ip`), checked before anything else.
- Needs `OPENROUTER_RESEARCH_MODEL` (fallback `OPENROUTER_LOAD_ASSISTANT_MODEL`) and `OPENROUTER_API_KEY`; otherwise 502.
- 422 when the model found no summary, specs or safety notes.
- `images` are verified product-photo candidates: what the model saw plus the `og:image` of every cited page.
- Any other failure (PocketBase, unknown `id`, model call, unparseable answer) answers 502.

## Response `200`

Research result.

- AdminComponentResearchResult: Unsaved research result for the editor to review.
  - `success` unknown, required
  - `model` string, required: OpenRouter model that answered.
  - `summary` string, required
  - `specs` AdminComponentSpecRow[], required
    - `k` string, required
    - `v` string, required
  - `safetyNotes` string[], required
  - `downloads` AdminComponentDownload[], required
    - `ext` string, required: Badge text, e.g. `PDF`.
    - `name` string, required
    - `meta` string: E.g. `1.2 MB · rev. 2026-03`.
    - `url` string, uri, required
  - `images` AdminComponentResearchImage[], required
    - `url` string, uri, required
    - `caption` string, required
    - `source` string, required: Page the image was found on; `""` for a URL the model supplied directly.
  - `sources` string[], required
  - `confidence` 'high' | 'medium' | 'low', required
  - `note` string, required: The model's remark, e.g. why data is missing.

## Other responses

- `400`: The component has no name.
- `403`: Admin access required. Returned for a missing, invalid or expired bearer token as well as for a valid token whose user lacks `is_admin=true`; admin endpoints never answer 401.
- `422`: Nothing found; the message is the model's `note` when it gave one.
- `429`: Rate limit exceeded.
- `502`: Research not configured or failed.

---

[API](https://skmtc.dev/voltplan/apis/voltplan-api.md) · [All operations](https://skmtc.dev/voltplan/apis/voltplan-api/llms.txt) · [OpenAPI document](https://skmtc.dev/voltplan/apis/voltplan-api/revisions/575b86a7af92?raw)
