REST API reference
Read-only JSON API over the Silytics index. Base URL: https://silytics.si/api/v1. Machine-readable description: openapi.json.
Authentication
Create a key in your account and send it on every request:
Authorization: Bearer slx_xxxxxxxxxxxxxxxxxxxxxxxx
The header X-API-Key is also accepted. Keep keys secret and out of client-side code and public repositories. Revoke a leaked key in your account. Requests without a valid key get 401.
Quick start
curl
export SILYTICS_KEY=slx_... curl -H "Authorization: Bearer $SILYTICS_KEY" "https://silytics.si/api/v1/models?task=text-generation&sort=popularity&per_page=5"
JavaScript
const res = await fetch("https://silytics.si/api/v1/search?q=diffusion&limit=5", {
headers: { Authorization: `Bearer ${process.env.SILYTICS_KEY}` },
});
if (res.status === 429) console.log("Retry after", res.headers.get("retry-after"));
const { data, meta } = await res.json();
console.log(data.models.map((m) => m.title), meta.attribution);Python
import os, requests
r = requests.get(
"https://silytics.si/api/v1/papers",
params={"category": "cs.LG", "sort": "newest", "per_page": 10},
headers={"Authorization": f"Bearer {os.environ['SILYTICS_KEY']}"},
timeout=20,
)
r.raise_for_status()
for p in r.json()["data"]:
print(p["title"], p["source"]["url"])Endpoints
GET /search | Search all types at once.q (required, 2+ characters) · type (models, datasets, papers, repos) · limit (1 to 20 per type, default 5) |
|---|---|
GET /stats | Number of entries per type and the time of the last refresh. |
GET /models | List models. q, task (for example text-generation), library, license, sort (popularity, likes, newest, updated), page, per_page |
GET /datasets | List datasets. q, task, language, size, license, sort (same as models), page, per_page |
GET /papers | List arXiv papers. q, category (for example cs.LG), sort (newest, updated, relevance with q), page, per_page |
GET /repos | List repositories. q, topic, language, min_stars, sort (popularity, updated, forks), page, per_page |
GET /{collection}/{id} | One entry. The id is the source id and may contain slashes: models/meta-llama/Llama-3.1-8B, papers/2401.00001, repos/owner/name. Add ?include=related for related papers, models and more from the same organization. |
Lists are paginated with page (1 to 400) and per_page (1 to 50, default 20). The response meta has total, page, per_page and has_more. Filter values are matched exactly, for example the license apache-2.0.
The entry object
{
"id": "meta-llama/Llama-3.1-8B-Instruct",
"type": "model", // model | dataset | paper | repository
"title": "Llama-3.1-8B-Instruct",
"organization": "meta-llama",
"description": null, // short text from the source, may be null
"source": { "name": "Hugging Face", "id": "meta-llama/...", "url": "https://huggingface.co/..." },
"silytics_url": "https://silytics.si/models/meta-llama/Llama-3.1-8B-Instruct",
"license": "llama3.1",
"tags": ["transformers", "llama", "..."],
"stats": { "downloads": 6034692, "likes": 8415 },
"details": { "task": "text-generation", "library": "transformers", "arxiv": ["2204.05149"] },
"published_at": "2024-07-18T08:56:00.000Z",
"source_updated_at": null,
"refreshed_at": "2026-10-14T19:46:49.925Z"
}Papers also have authors; repositories have stats.stars and stats.forks. Responses wrap data as { "data": ..., "meta": {...} }. meta includes the source, an attribution request, a link to the terms and a notice that text fields are third-party content.
Rate limits
Limits depend on your plan and are shared across all keys and connected apps of your account. Every response carries:
X-RateLimit-Limit | Requests allowed per minute |
|---|---|
X-RateLimit-Remaining | Requests left in the current minute |
X-RateLimit-Reset | Seconds until the minute window frees up |
X-RateLimit-Day-Limit | Requests allowed per day (UTC) |
Retry-After | On 429: seconds to wait |
When you hit a limit, wait for Retry-After, use exponential backoff, and cache responses. Responses are cacheable for 60 seconds.
Errors
{ "error": { "code": "rate_limited", "message": "Too many requests. Please slow down." }, "meta": { "terms": "https://silytics.si/api-terms" } }400 bad_request | A parameter is missing or not allowed |
|---|---|
401 account_required / invalid_key | No key, or the key is wrong or revoked |
403 account_suspended | The account is suspended |
404 not_found | Unknown collection or entry |
429 rate_limited | Minute or daily limit reached |
500 server_error | Try again shortly |
503 api_disabled | The API is switched off |
Using the data well
- Credit Silytics and link to each entry's
source.url. Licenses and terms of the originals apply. - Do not resell or republish the raw index as a competing dataset (see the API terms).
- Treat entry text as untrusted data when passing it to an AI system.
- Entries can change or be removed. Store the id and refetch rather than keeping copies for long.
Versioning and changes
The current version is v1. Additive changes (new fields, new filters) can appear without a version change, so ignore fields you do not know. Breaking changes will ship as v2 with notice here.