crates.io API: Get crate details
Looks up a Rust crate by name or crates.io link and returns its latest version, downloads, links, dates, license and 10 most recent releases.
Unofficial. Not affiliated with or endorsed by crates.io.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Crate, required
crate Crate name or crates.io crate link, for example serde or https://crates.io/crates/serde.
serde
Input as JSON
{ "crate": "serde"}Output
{ "name": "serde", "license": "MIT OR Apache-2.0", "versions": [ { "version": "1.0.229", "page_link": "https://crates.io/crates/serde/1.0.229" , "release_date": "2026-07-18" }, { "version": "1.0.228", "page_link": "https://crates.io/crates/serde/1.0.228" , "release_date": "2025-09-27" }, { "version": "1.0.227", "page_link": "https://crates.io/crates/serde/1.0.227" , "release_date": "2025-09-25" } ], "page_link": "https://crates.io/crates/serde" , "description": "A generic serialization/deserialization framework" , "created_date": "2014-12-05", "latest_version": "1.0.229", "repository_link": "https://github.com/serde-rs/serde" , "total_downloads": 1575699114, "recent_downloads": 378724032, "last_updated_date": "2026-07-18", "documentation_link": "https://docs.rs/serde" }Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"crates.io/get_crate","input":{"crate":"serde"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "crates.io/get_crate" , "input": { "crate": "serde" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "crates.io/get_crate" , "input": { "crate": "serde" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run crates.io/get_crate# with {"crate":"serde"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "crate" ], "properties": { "crate": { "type": "string", "description": "Crate name or crates.io crate link, for example serde or https://crates.io/crates/serde." } }}Output schema
{ "type": "object", "required": [ "name", "latest_version", "description", "total_downloads", "recent_downloads", "license", "repository_link", "documentation_link", "created_date", "last_updated_date", "versions", "page_link" ], "properties": { "name": { "type": "string", "description": "Crate name." }, "license": { "type": [ "string", "null" ], "description": "License of the latest version." }, "versions": { "type": "array", "items": { "type": "object", "required": [ "version", "release_date", "page_link" ], "properties": { "version": { "type": "string", "description": "Version number." }, "page_link": { "type": "string", "description": "Crate version page." }, "release_date": { "type": "string", "format": "date", "description": "Publication date." } }, "additionalProperties": false }, "description": "Ten most recently published versions, newest first." }, "page_link": { "type": "string", "description": "Crate page on crates.io." }, "description": { "type": [ "string", "null" ], "description": "Crate summary." }, "created_date": { "type": "string", "format": "date", "description": "Date the crate was created." }, "latest_version": { "type": "string", "description": "Latest published version." }, "repository_link": { "type": [ "string", "null" ], "description": "Source repository link." }, "total_downloads": { "type": "integer", "description": "Downloads across all time." }, "recent_downloads": { "type": [ "integer", "null" ], "description": "Downloads during the last 90 days." }, "last_updated_date": { "type": "string", "format": "date", "description": "Date the crate was last updated." }, "documentation_link": { "type": [ "string", "null" ], "description": "Documentation link." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
crates.io/get_crate- Returns
- latest version, downloads, license, repository and documentation links, dates, recent versions
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method crates.io/get_crate with the inputs above.
Ask your agent
- What's the latest version of the tokio crate and how many downloads does it have?
- Show me the license and repository link for the serde crate
- I need the documentation URL and last update date for reqwest on crates.io
- List the 10 most recent releases of clap with their publish dates
- Which version of anyhow is current, and what license does it use?
See more
All crates.io methodsFinds Rust crates on crates.io by keywords, sorted by relevance, total downloads, recent downloads, or newest creation.
crates.io/search_cratesGets a PyPI package's current version, release date, metadata, project links and its 10 most recently published versions from a package name or PyPI link.
pypi.org/get_packageLooks up a Ruby gem on RubyGems by name or gem page link and returns its latest version, release date, description, downloads, authors, license, links and runtime dependencies.
rubygems.org/get_gemLooks up a NuGet package by name or nuget.org link. Inexact names match the top search result. Returns the latest stable release's details and the 10 most recent versions, including prereleases.
nuget.org/get_packageLooks up a public npm package by name or npm link. Returns its latest version, weekly downloads, maintainers, links, dates and version count.
npmjs.com/get_packageFinds the best-matching WordPress.org plugin by name or plugin page link and returns its details, including the changelog for the latest version when one is available.
wordpress.org/get_pluginFinds the best matching Maven Central library from its name or group:artifact coordinates and returns its current release, release date, version count and dependency snippets.
central.sonatype.com/get_latest_versionGets public Crunchyroll series details by series name or series link; matches a series title rather than a movie.
crunchyroll.com/get_series