A TypeScript library for interacting with LeetCode's API. Supports both LeetCode.com and LeetCode.cn, with authenticated and unauthenticated access, rate limiting, caching, and custom GraphQL queries.
npm install @leetnotion/leetcode-api
# or
pnpm add @leetnotion/leetcode-api- Get public user profile
- Get user's recent submissions (max: 20)
- Get user contest records
- Get problem list with optional filters (difficulty, tags)
- Get problem detail by slug
- Get daily challenge
- Get problem types for all questions
- Get title slug to question number mapping
- Get topic tags for all questions
- Get company tags
- Get all submissions of the authenticated user
- Get submission details (code, percentiles)
- Check in to collect a coin
- Get and collect easter eggs
- Get user's LeetCode lists and questions within a list
- Get company tags per question (premium)
LeetCodeAdvancedclass with detailed problem fetching, custom problem properties, and batch operationsLeetCodeCNclass for LeetCode.cn- Customizable GraphQL query API
- Customizable rate limiter (default: 20 req / 10 sec)
- Customizable fetcher (e.g., use Playwright for browser-based requests)
- In-memory TTL cache (replaceable)
import { LeetCode } from '@leetnotion/leetcode-api';
const leetcode = new LeetCode();
const user = await leetcode.user('username');import { LeetCode } from '@leetnotion/leetcode-api';
const leetcode = new LeetCode();
const daily = await leetcode.daily();import { LeetCode } from '@leetnotion/leetcode-api';
const leetcode = new LeetCode();
const problem = await leetcode.problem('two-sum');import { LeetCode } from '@leetnotion/leetcode-api';
const leetcode = new LeetCode();
const problems = await leetcode.problems({
category: 'algorithms',
offset: 0,
limit: 50,
filters: { difficulty: 'MEDIUM' },
});import { LeetCode, Credential } from '@leetnotion/leetcode-api';
const credential = new Credential();
await credential.init('YOUR-LEETCODE-SESSION-COOKIE');
const leetcode = new LeetCode(credential);
const submissions = await leetcode.submissions({ limit: 100, offset: 0 });import { LeetCodeAdvanced } from '@leetnotion/leetcode-api';
const leetcode = new LeetCodeAdvanced();
const problemTypes = await leetcode.getProblemTypes();
// { "1": "algorithms", "595": "database", ... }import { LeetCodeAdvanced } from '@leetnotion/leetcode-api';
const leetcode = new LeetCodeAdvanced();
const mapping = await leetcode.getTitleSlugQuestionNumberMapping();
// { "two-sum": "1", "add-two-numbers": "2", ... }You can use your own fetcher, for example, fetch through a real browser.
import { LeetCode, fetcher } from '@leetnotion/leetcode-api';
import { chromium } from 'playwright-extra';
import stealth from 'puppeteer-extra-plugin-stealth';
const _browser = chromium.use(stealth()).launch();
const _page = _browser
.then((browser) => browser.newPage())
.then(async (page) => {
await page.goto('https://leetcode.com');
return page;
});
fetcher.set(async (...args) => {
const page = await _page;
const res = await page.evaluate(async (args) => {
const res = await fetch(...args);
return {
body: await res.text(),
status: res.status,
statusText: res.statusText,
headers: Object.fromEntries(res.headers),
};
}, args);
return new Response(res.body, res);
});
const lc = new LeetCode();
const daily = await lc.daily();
console.log(daily);
await _browser.then((browser) => browser.close());- NPM Package: https://www.npmjs.com/package/@leetnotion/leetcode-api
- GitHub Repository: https://github.com/codewithsathya/leetcode-api