jsDelivr APIcdn.jsdelivr.net ↗
Query prebuilt model configs from any published @mlc-ai/web-llm npm package version. Get model_id, vram_required_MB, and source excerpts in one call.
What is the jsDelivr API?
The find_model_config endpoint searches the compiled runtime bundle for any published @mlc-ai/web-llm package version and returns every prebuilt model config object whose model_id matches a given substring. Each match surfaces 4 fields: the exact model_id string, VRAM requirement in MB, a source excerpt, and a match count — making it straightforward to audit which models are bundled in a specific release without downloading and parsing the bundle yourself.
curl -X GET 'https://api.parse.bot/scraper/e3f9f698-5a56-4082-9254-cc03212a7bb8/find_model_config?model_id=SmolLM2-360M' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace cdn-jsdelivr-net-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: WebLLM prebuilt model config lookup — bounded, re-runnable."""
from parse_apis.cdn_jsdelivr_net_api import WebLlm, VersionNotFound
client = WebLlm()
# Search for all SmolLM2-360M quantisation variants in the default bundle version.
for cfg in client.model_configs.search(model_id="SmolLM2-360M", limit=5):
print(cfg.model_id, f"{cfg.vram_required_MB} MB" if cfg.vram_required_MB else "VRAM unknown")
# Drill into one specific variant to read its full source excerpt.
variant = client.model_configs.search(model_id="SmolLM2-360M-Instruct-q0f16-MLC", limit=1).first()
if variant is not None:
print(variant.model_id, variant.source_excerpt[:120])
# Look up models in an older package version; catch a bad version gracefully.
try:
for cfg in client.model_configs.search(model_id="Llama-3", version="9.9.9", limit=3):
print(cfg.model_id)
except VersionNotFound as e:
print("version not found:", e.message)
print("exercised: model_configs.search")
Fetches the compiled web-llm runtime bundle for one published package version and returns every prebuilt model config object whose source text contains the given model_id substring (case-sensitive). One row per distinct config object, in source order; each row carries the exact model_id string, the parsed vram_required_MB number, and the verbatim source excerpt of the whole object literal (CRLF normalized to LF). A substring that matches nothing yields match_count 0 and an empty matches list; a package version that does not exist on the registry yields a stale_input (input_not_found) error. Matching is capped at 50 objects per call. One round trip per call; the bundle is several megabytes.
| Param | Type | Description |
|---|---|---|
| version | string | Published @mlc-ai/web-llm package version in MAJOR.MINOR.PATCH form; confirmed on 0.2.79 and 0.2.80. |
| model_idrequired | string | Exact, case-sensitive substring to locate in the model config source, e.g. a model family prefix like SmolLM2-360M or a full id like SmolLM2-360M-Instruct-q4f16_1-MLC. |
{
"type": "object",
"fields": {
"query": "the model_id substring that was searched",
"matches": "array of {model_id (exact string from source), vram_required_MB (number parsed from source, null if absent), source_excerpt (verbatim object literal)}",
"version": "package version the bundle was read from",
"match_count": "integer number of distinct config objects matched"
},
"sample": {
"data": {
"query": "SmolLM2-1.7B",
"matches": [
{
"model_id": "SmolLM2-1.7B-Instruct-q4f16_1-MLC",
"source_excerpt": "{\n model: \"https://huggingface.co/mlc-ai/SmolLM2-1.7B-Instruct-q4f16_1-MLC\",\n model_id: \"SmolLM2-1.7B-Instruct-q4f16_1-MLC\",\n model_lib: modelLibURLPrefix +\n modelVersion +\n \"/SmolLM2-1.7B-Instruct-q4f16_1-ctx4k_cs1k-webgpu.wasm\",\n vram_required_MB: 1774.19,\n low_resource_required: true,\n required_features: [\"shader-f16\"],\n overrides: {\n context_window_size: 4096,\n },\n }",
"vram_required_MB": 1774.19
},
{
"model_id": "SmolLM2-1.7B-Instruct-q4f32_1-MLC",
"source_excerpt": "{\n model: \"https://huggingface.co/mlc-ai/SmolLM2-1.7B-Instruct-q4f32_1-MLC\",\n model_id: \"SmolLM2-1.7B-Instruct-q4f32_1-MLC\",\n model_lib: modelLibURLPrefix +\n modelVersion +\n \"/SmolLM2-1.7B-Instruct-q4f32_1-ctx4k_cs1k-webgpu.wasm\",\n vram_required_MB: 2692.38,\n low_resource_required: true,\n overrides: {\n context_window_size: 4096,\n },\n }",
"vram_required_MB": 2692.38
}
],
"version": "0.2.80",
"match_count": 2
},
"status": "success"
}
}About the jsDelivr API
What the API returns
The single find_model_config endpoint accepts a version parameter (e.g. 0.2.79 or 0.2.80) and a required model_id substring. It reads the compiled bundle for that package version and returns every prebuilt model config object whose source text contains the given substring, in source order. The response envelope contains query (the substring you passed), version (the resolved package version), match_count (integer), and matches (an array of config objects).
Response shape per match
Each element in matches includes model_id (the exact string from the bundle), vram_required_MB (a number parsed from the source, or null when the field is absent in that config), and source_excerpt (a verbatim slice of the surrounding source text). This lets you verify exact model identifiers and memory requirements as they appear in the published library, not as documented elsewhere.
Version coverage and search behavior
The version parameter is optional and defaults to the latest confirmed build. Matching is case-sensitive and substring-based, so passing SmolLM2- will match every config whose model_id contains that prefix, while passing the full exact identifier narrows results to one entry. There is no pagination; all matching configs are returned in a single response.
The jsDelivr API is a managed, monitored endpoint for cdn.jsdelivr.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cdn.jsdelivr.net changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official cdn.jsdelivr.net API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Check VRAM requirements for all models in a specific web-llm release before deploying a browser-based LLM feature
- Enumerate every model family available in a given @mlc-ai/web-llm version by filtering on a family prefix like 'Llama-'
- Compare model availability between two package versions by querying both with the same model_id substring
- Validate that a target model_id exists in a specific release before pinning that version in a dependency
- Audit which SmolLM2 or Phi variants shipped in a minor release for changelog or release note generation
- Build a model selection UI that surfaces real vram_required_MB values pulled directly from the bundled config
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does jsDelivr have an official developer API?+
What does the find_model_config endpoint return when no configs match the model_id substring?+
query, version, and match_count — but matches will be an empty array and match_count will be 0. The endpoint does not return an error for zero results.Does the API expose all fields from a model config object, such as model URL, tokenizer path, or context window size?+
model_id, vram_required_MB, and source_excerpt per match. Additional fields present in a config object (such as model URL, tokenizer details, or quantization scheme) are not individually parsed into the response. You can fork this API on Parse and revise it to extract those fields from the source_excerpt or add dedicated parsed fields.