---
title: "Search → ranked canonical URI hits"
method: GET
path: "/api/v1/search"
tags: ["search"]
---

# Search → ranked canonical URI hits

`GET /api/v1/search`

## Request

- Base URL: `https://kvasir.legal`
- URL: `https://kvasir.legal/api/v1/search`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer
  - none

## Query parameters

- `q` string, required
- `kinds` string
- `quellen` string
- `limit` integer
- `offset` integer

## Response `200`

Ranked hits

- object
  - `count` integer
  - `degraded` string[]: present when sub-searches failed — results incomplete, retry
  - `has_more` boolean
  - `limit` integer
  - `offset` integer
  - `query` string
  - `results` SearchHit[]
    - `editorial_title` string: Present only when the source carries NO official heading for this norm and kvasir supplies an editorial one. It is part of `title`; this field lets you tell the two apart. An official heading always wins and removes this field.
    - `kind` string
    - `score` number
    - `snippet` string
    - `title` string
    - `uri` string

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key
- `429`: Rate limit (120/min default), monthly quota or sandbox cap reached — `code` distinguishes; honor Retry-After

---

[API](https://skmtc.dev/kvasir/apis/kvasir-legal-grounding-api.md) · [All operations](https://skmtc.dev/kvasir/apis/kvasir-legal-grounding-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kvasir/apis/kvasir-legal-grounding-api/revisions/87f32370cf06?raw)
