Search parameters
Every parameter GET /v1/search accepts, and what each one does to the result set.
The same names work either way. On a GET they are query parameters; on a POST they are keys in
a JSON body, either at the top level or nested under filters. Use whichever fits — a handful of
constraints reads better in a URL, a generated set reads better as JSON.
The query
| Parameter | Type | Default | Notes |
|---|---|---|---|
q | string | required | What you are looking for, in plain language. query is accepted as an alias. |
kind | string, repeatable | all kinds | Restrict to one or more entity kinds. |
limit | integer | 20 | Rows to return, up to 50. Asking for more returns the maximum rather than an error. |
rerank | boolean | true | Set false to skip reranking and get the fused order instead. |
kind accepts model, dataset, paper, repo, package, mcp_server, skill and
framework. An unrecognised value is ignored rather than rejected, so a client that learns a new
kind before you do does not start failing.
Reranking is on for a reason. A short query — three or four words — puts almost no signal in the embedding, and the fused order reflects that. Reranking reads the candidates against the actual question and reorders them, which is most of the difference between a plausible list and a useful one. Turn it off when you are going to rank the rows yourself and want the latency back.
Filters
Filters narrow the candidate set before ranking. They are exact constraints, not hints: a row that fails one is not returned at a lower score, it is not returned.
| Parameter | Type | Matches |
|---|---|---|
license | string, repeatable | Licence identifier, e.g. apache-2.0, mit |
format | string, repeatable | Weight format the entity is published in, e.g. safetensors, gguf, mlx |
pipeline_tag | string, repeatable | Task, e.g. text-generation, automatic-speech-recognition |
library_name | string, repeatable | Library the entity is built for, e.g. transformers, mlx |
author | string, repeatable | Publishing account or organisation |
language | string, repeatable | Language code the entity covers |
family_root | string | The model this one is derived from — a quantisation, a fine-tune, a conversion |
min_params / max_params | integer | Total parameter count |
min_size_bytes / max_size_bytes | integer | Size of the weights on disk |
has_chat_template | boolean | Only entities that ship a chat template |
gated | boolean | Whether access requires accepting terms |
Repeat a parameter to pass several values, and they are combined as or: license=mit plus
license=apache-2.0 returns either. Different parameters are combined as and.
curl -G https://api.bighugger.com/v1/search \
-H "authorization: Bearer $BIGHUGGER_KEY" \
--data-urlencode 'q=speech to text' \
--data-urlencode 'kind=model' \
--data-urlencode 'format=gguf' \
--data-urlencode 'license=apache-2.0' \
--data-urlencode 'license=mit' \
--data-urlencode 'max_params=2000000000'
The same call as a body:
{
"q": "speech to text",
"kind": ["model"],
"filters": {
"format": ["gguf"],
"license": ["apache-2.0", "mit"],
"max_params": 2000000000
}
}
Sizes are numbers, not buckets
max_params and max_size_bytes take an exact figure because you have one. If a model has to fit
in 8GB of memory, that is a number you already know, and rounding it into a "small" band loses the
only information that mattered. Pass the number.
The response
| Field | Type | Notes |
|---|---|---|
object | string | Always list |
query | string | The query as it was interpreted |
reranked | boolean | Whether the returned order came from reranking |
took_ms | integer | Server-side time for the call |
count | integer | Rows in data |
data | array | The results |
Each row carries id, kind, title, url, snippet, score and facts.
facts is the structured record for that entity — the fields read out of its own configuration
rather than out of its description. It is the same schema the filters above are named after, which
means anything you can filter on you can also read back and display. Fields are present when they
are known and absent when they are not; treat a missing field as unknown rather than as zero,
because for a parameter count those are very different claims.
Related
- Quickstart — the first call
- Errors — what a refused request looks like