---
title: "Find an amazon.de product link for a component"
method: POST
path: "/api/admin/search-amazon"
tags: ["admin-catalog-tools"]
---

# Find an amazon.de product link for a component

`POST /api/admin/search-amazon`

## Request

- Base URL: `https://voltplan.app`
- URL: `https://voltplan.app/api/admin/search-amazon`
- Auth: HTTP bearer

Exact matches (`isExactMatch: true`, one link):
- `originalUrl` on amazon.de containing an ASIN (trusted without a request);
- `originalUrl` on another Amazon marketplace whose ASIN `HEAD https://www.amazon.de/dp/<ASIN>` confirms;
- `searchTerms` that is a bare 10-character ASIN.

Otherwise a full-text search: SearxNG (`search.yuzuhub.com`, engines brave, google, duckduckgo, bing), then Jina Reader on amazon.de's own search page (20 s timeout, optional `JINA_API_KEY`). Returns up to 5 candidates with `isExactMatch: false`. Upstream failures never produce an error; they yield `links: []` and `link: null`.

## Request body

- AdminCatalogAmazonSearchRequest: At least one of `searchTerms` and `originalUrl` must be non-empty (otherwise 400).
  - `searchTerms` string, nullable: Free-text query or a bare ASIN.
  - `originalUrl` string, nullable: Product URL on any Amazon marketplace.

## Response `200`

Search result (possibly empty).

- AdminCatalogAmazonSearchResponse
  - `searchTerms` string, nullable: Echo of the request value; omitted when not sent.
  - `links` AdminCatalogAmazonSearchResult[], required
    - `url` string, required: `https://www.amazon.de/dp/<ASIN>`.
    - `country` 'de', required
    - `title` string, required
    - `isExact` boolean, required
    - `name` string, required
    - `image` string, nullable, required
  - `link` AdminCatalogAmazonSearchResult, required
    - `url` string, required: `https://www.amazon.de/dp/<ASIN>`.
    - `country` 'de', required
    - `title` string, required
    - `isExact` boolean, required
    - `name` string, required
    - `image` string, nullable, required
  - `isExactMatch` boolean, required

## Other responses

- `400`: Neither `searchTerms` nor `originalUrl` was given.
- `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.
- `500`: Unexpected error, e.g. a malformed JSON body; `error` carries the message.

---

[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)
