---
title: Searching the registry
path: guides/searching
status: published
---

# Searching the registry

Find models across every namespace you can see.

## Search models

```python
from scaiatlas import ScaiAtlas
client = ScaiAtlas.from_env()

# Simple query
for m in client.search.models("llama"):
    print(m.full_name, m.type)

# With filters
results = client.search.models(
    "instruct",
    type="llm",                 # a model type; see the reference
    tag="llama",                # models carrying this tag
    namespace="poolnoodle",     # restrict to one namespace
    sort="downloads",           # updated | created | name | downloads
    order="desc",               # asc | desc
)
print(results.pagination.total_count, "matches")
for m in results:
    print(m.full_name, m.download_count)
```

Iterate every page automatically:

```python
for m in client.search.models_all("embedding", type="embedding"):
    print(m.full_name)
```

## Search namespaces

```python
for ns in client.search.namespaces("pool"):
    print(ns.name, ns.visibility)
```

## What you can see

Search results are scoped to what you're allowed to read: **public** namespaces plus
those in your **tenant** (and any you're an explicit member of). You'll never see
models in namespaces you can't access.

## Notes

- Query text is matched against model names, display names, descriptions, and tags.
- `sort` controls ordering; combine with pagination (`page`, `per_page`).
- Results validate into the same `Model` objects returned elsewhere, so
  `m.full_name`, `m.type`, `m.download_count`, etc. are all available.

## Under the hood (REST)

- `GET /api/v1/search/models` — query params `q`, `type`, `namespace`, `tag`, `sort`, plus pagination.
- `GET /api/v1/search/namespaces` — query param `q` plus pagination.

See the [REST API reference](/docs/scaiatlas/reference/rest-api#search).
