Sign inGet started
Developers

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 /searchSearch all types at once.
q (required, 2+ characters) · type (models, datasets, papers, repos) · limit (1 to 20 per type, default 5)
GET /statsNumber of entries per type and the time of the last refresh.
GET /modelsList models. q, task (for example text-generation), library, license, sort (popularity, likes, newest, updated), page, per_page
GET /datasetsList datasets. q, task, language, size, license, sort (same as models), page, per_page
GET /papersList arXiv papers. q, category (for example cs.LG), sort (newest, updated, relevance with q), page, per_page
GET /reposList 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-LimitRequests allowed per minute
X-RateLimit-RemainingRequests left in the current minute
X-RateLimit-ResetSeconds until the minute window frees up
X-RateLimit-Day-LimitRequests allowed per day (UTC)
Retry-AfterOn 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_requestA parameter is missing or not allowed
401 account_required / invalid_keyNo key, or the key is wrong or revoked
403 account_suspendedThe account is suspended
404 not_foundUnknown collection or entry
429 rate_limitedMinute or daily limit reached
500 server_errorTry again shortly
503 api_disabledThe 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.