{"openapi":"3.1.0","info":{"title":"npm Registry API","version":"1.0.0","description":"Everything about npm packages in one clean API. Look up a package’s latest metadata — version, description, license, homepage, repository, author, keywords, dist-tags, dependencies and maintainers — list its full version history with release dates, pull download statistics for the last day, week, month or year, and search the registry across more than three million packages. Sourced live from the public npm registry and returned as tidy JSON through a fast, reliable API. Ideal for developer dashboards and tooling, package and dependency analytics, supply-chain and security checks, CI/CD and documentation sites.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/npm-api","description":"oanor gateway"}],"tags":[{"name":"npm"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/downloads":{"get":{"operationId":"get_v1_downloads","tags":["npm"],"summary":"Download statistics","description":"","parameters":[{"name":"name","in":"query","required":true,"description":"Package name","schema":{"type":"string"},"example":"lodash"},{"name":"period","in":"query","required":false,"description":"last-day | last-week | last-month | last-year","schema":{"type":"string"},"example":"last-month"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"end":"2026-05-29","name":"lodash","start":"2026-04-30","period":"last-month","downloads":650868178},"meta":{"timestamp":"2026-05-30T18:16:50.220Z","request_id":"63d67709-06d7-4151-9a7c-68b44534e874"},"status":"ok","message":"Downloads retrieved","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/package":{"get":{"operationId":"get_v1_package","tags":["npm"],"summary":"Package metadata","description":"","parameters":[{"name":"name","in":"query","required":true,"description":"Package name (scoped ok, e.g. @types/node)","schema":{"type":"string"},"example":"express"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"express","author":"TJ Holowaychuk","created":"2010-12-29T19:38:25.450Z","license":"MIT","npm_url":"https://www.npmjs.com/package/express","homepage":"https://expressjs.com/","keywords":["express","framework","sinatra","web","http","rest","restful","router","app","api"],"modified":"2026-05-19T12:28:53.443Z","dist_tags":{"latest":"5.2.1","latest-4":"4.22.2"},"repository":"https://github.com/expressjs/express","description":"Fast, unopinionated, minimalist web framework","maintainers":["wesleytodd","jonchurch","ctcpip","ulisesgascon","sheplu"],"dependencies":{"qs":"^6.14.0","depd":"^2.0.0","etag":"^1.8.1","once":"^1.4.0","send":"^1.1.0","vary":"^1.1.2","debug":"^4.4.0","fresh":"^2.0.0","cookie":"^0.7.1","router":"^2.2.0","accepts":"^2.0.0","type-is":"^2.0.1","parseurl":"^1.3.3","statuses":"^2.0.1","encodeurl":"^2.0.0","mime-types":"^3.0.0","proxy-addr":"^2.0.7","body-parser":"^2.2.1","escape-html":"^1.0.3","http-errors":"^2.0.0","on-finished":"^2.4.1","content-type":"^1.0.5","finalhandler":"^2.1.0","range-parser":"^1.2.1","serve-static":"^2.2.0","cookie-signature":"^1.2.1","merge-descriptors":"^2.0.0","content-disposition":"^1.0.0"},"latest_version":"5.2.1","total_versions":288,"dependency_count":28},"meta":{"timestamp":"2026-05-30T18:16:50.389Z","request_id":"c2549096-d3de-4bdb-9fd8-b91183f6213e"},"status":"ok","message":"Package retrieved","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/search":{"get":{"operationId":"get_v1_search","tags":["npm"],"summary":"Search the registry","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"Search terms","schema":{"type":"string"},"example":"test framework"},{"name":"limit","in":"query","required":false,"description":"1-50 (default 10)","schema":{"type":"string"},"example":"10"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":10,"query":"test framework","total":457412,"results":[{"date":"2026-05-21T11:11:59.551Z","name":"mocha","links":{"npm":"https://www.npmjs.com/package/mocha","bugs":"https://github.com/mochajs/mocha/issues/","homepage":"https://mochajs.org/","repository":"git+https://github.com/mochajs/mocha.git"},"score":463.619,"version":"11.7.6","keywords":["mocha","test","bdd","tdd","tap","testing","chai","assertion","ava","jest","tape","jasmine","karma"],"publisher":"joshuakgoldberg","description":"simple, flexible, fun test framework"},{"date":"2018-07-30T13:57:31.472Z","name":"should","links":{"npm":"https://www.npmjs.com/package/should","bugs":"https://github.com/shouldjs/should.js/issues","homepage":"https://github.com/shouldjs/should.js","repository":"git+https://github.com/shouldjs/should.js.git"},"score":396.675,"version":"13.2.3","keywords":["test","bdd","assert","should"],"publisher":"btd","description":"test framework agnostic BDD-style assertions"},{"date":"2025-12-22T21:26:03.989Z","name":"chai","links":{"npm":"https://www.npmjs.com/package/chai","bugs":"https://github.com/chaijs/chai/issues","homepage":"http://chaijs.com","repository":"git+https://github.com/chaijs/chai.git"},"score":353.317,"version":"6.2.2","keywords":["test","assertion","assert","testing","chai"],"publisher":"GitHub Actions","description":"BDD/TDD assertion library for node.js and the browser. Test framework agnostic."},{"date":"2023-11-01T12:24:51.600Z","name":"@web/test-runner-mocha","links":{"npm":"https://www.npmjs.com/package/@web/test-runner-mocha","bugs":"https://github.com/modernweb-dev/web/issues","homepage":"https://github.com/modernweb-dev/web/tree/master/packages/test-runner-mocha","repository":"git+https://github.com/modernweb-dev/web.git"},"score":324.654,"version":"0.9.0","keywords":["web","test","runner","testrunner","mocha","framework"],"publisher":"modern-web","description":"Mocha test framework for Web Test Runner"},{"date":"2026-05-26T13:27:20.339Z","name":"webdriverio","links":{"npm":"https://www.npmjs.com/package/webdriverio","bugs":"https://github.com/webdriverio/webdriverio/issues","homepage":"https://webdriver.io","repository":"git+https://github.com/webdriverio/webdriverio.git"},"score":318.318,"version":"9.27.2","keywords":["webdriverio","webdriver","selenium","appium","saucelabs","sauce","labs","mocha","nodeUnit","buster","puppeteer","vows","jasmine","assert","cucumber","testingbot"],"publisher":"GitHub Actions","description":"Next-gen browser and mobile automation test framework for Node.js"},{"date":"2017-05-02T19:57:50.293Z","name":"mocha-nightwatch","links":{"npm":"https://www.npmjs.com/package/mocha-nightwatch","bugs":"https://github.com/nightwatchjs/mocha-nightwatch/issues","homepage":"https://mochajs.org","repository":"git://github.com/nightwatchjs/mocha-nightwatch.git"},"score":282.095,"version":"3.2.2","keywords":["mocha","test","bdd","tdd","tap","nightwatch"],"publisher":"beatfactor","description":"simple, flexible, fun test framework"},{"date":"2021-07-13T11:30:36.270Z","name":"rxjs-marbles","links":{"npm":"https://www.npmjs.com/package/rxjs-marbles","bugs":"https://github.com/cartant/rxjs-marbles/issues","homepage":"https://github.com/cartant/rxjs-marbles","repository":"git+https://github.com/cartant/rxjs-marbles.git"},"score":274.206,"version":"7.0.1","keywords":["ava","jasmine","jest","marble","marbles","mocha","rxjs","tape","test","testing"],"publisher":"cartant","description":"An RxJS marble testing library for any test framework"},{"date":"2017-11-11T00:54:47.044Z","name":"cordova-plugin-test-framework","links":{"npm":"https://www.npmjs.com/package/cordova-plugin-test-framework","bugs":"https://issues.apache.org/jira/browse/CB","homepage":"https://github.com/apache/cordova-plugin-test-framework#readme","repository":"git+https://github.com/apache/cordova-plugin-test-framework.git"},"score":272.348,"version":"1.1.6","keywords":["cordova","test","ecosystem:cordova"],"publisher":"stevegill","description":"Cordova Test Framework Plugin"},{"date":"2026-02-12T04:04:10.315Z","name":"@contract-case/case-plugin-base","links":{"npm":"https://www.npmjs.com/package/@contract-case/case-plugin-base","bugs":"https://github.com/case-contract-testing/case/issues","homepage":"https://case.contract-testing.io","repository":"git+ssh://git@github.com/case-contract-testing/case.git"},"score":258.132,"version":"0.28.2","keywords":["testing","api","pact","contracttesting","contract-testing","contractcase"],"publisher":"timothyjones","description":"Plugin framework for writing plugins for the ContractCase test framework"},{"date":"2026-05-18T11:47:55.097Z","name":"@luminati-io/mocha","links":{"npm":"https://www.npmjs.com/package/@luminati-io/mocha","bugs":"https://github.com/mochajs/mocha/issues","homepage":"https://github.com/mochajs/mocha#readme","repository":"git://github.com/mochajs/mocha.git"},"score":252.562,"version":"2.4.2-lum.3","keywords":["mocha","test","bdd","tdd","tap"],"publisher":"luminati.io","description":"simple, flexible, fun test framework"}]},"meta":{"timestamp":"2026-05-30T18:16:50.769Z","request_id":"e71d0a0f-e7fe-4b98-af02-3922501bfaaa"},"status":"ok","message":"Search completed","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/versions":{"get":{"operationId":"get_v1_versions","tags":["npm"],"summary":"Version history","description":"","parameters":[{"name":"name","in":"query","required":true,"description":"Package name","schema":{"type":"string"},"example":"react"},{"name":"limit","in":"query","required":false,"description":"1-1000 (default 100)","schema":{"type":"string"},"example":"100"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"react","total":2812,"latest":"19.2.6","versions":[{"version":"0.0.0-experimental-f0dfee38-20260529","released":"2026-05-29T18:04:30.566Z"},{"version":"19.3.0-canary-f0dfee38-20260529","released":"2026-05-29T18:03:01.274Z"},{"version":"0.0.0-experimental-6b5ea125-20260528","released":"2026-05-28T17:29:37.019Z"},{"version":"19.3.0-canary-6b5ea125-20260528","released":"2026-05-28T17:28:00.869Z"},{"version":"0.0.0-experimental-c0cd4d5d-20260527","released":"2026-05-27T17:19:56.607Z"},{"version":"19.3.0-canary-c0cd4d5d-20260527","released":"2026-05-27T17:18:14.237Z"},{"version":"0.0.0-experimental-75b0945b-20260526","released":"2026-05-26T17:19:54.857Z"},{"version":"19.3.0-canary-75b0945b-20260526","released":"2026-05-26T17:18:39.786Z"},{"version":"0.0.0-experimental-d5736f09-20260507","released":"2026-05-08T16:45:09.229Z"},{"version":"19.3.0-canary-d5736f09-20260507","released":"2026-05-08T16:43:16.457Z"},{"version":"0.0.0-experimental-dd453071-20260506","released":"2026-05-06T17:50:46.546Z"},{"version":"19.3.0-canary-dd453071-20260506","released":"2026-05-06T17:48:54.490Z"},{"version":"19.0.6","released":"2026-05-06T16:18:02.201Z"},{"version":"19.1.7","released":"2026-05-06T16:17:22.822Z"},{"version":"19.2.6","released":"2026-05-06T16:16:47.653Z"},{"version":"0.0.0-experimental-9635257c-20260502","released":"2026-05-04T16:49:28.090Z"},{"version":"19.3.0-canary-9635257c-20260502","released":"2026-05-04T16:47:38.036Z"},{"version":"0.0.0-experimental-f4e0d4ed-20260429","released":"2026-04-30T16:45:52.109Z"},{"version":"19.3.0-canary-f4e0d4ed-20260429","released":"2026-04-30T16:43:47.850Z"},{"version":"0.0.0-experimental-ad5dfc82-20260427","released":"2026-04-28T16:50:52.231Z"},{"version":"19.3.0-canary-ad5dfc82-20260427","released":"2026-04-28T16:48:48.163Z"},{"version":"0.0.0-experimental-561ed529-20260423","released":"2026-04-24T16:35:05.765Z"},{"version":"19.3.0-canary-561ed529-20260423","released":"2026-04-24T16:32:46.630Z"},{"version":"0.0.0-experimental-142cfde8-20260422","released":"2026-04-22T16:37:57.351Z"},{"version":"19.3.0-canary-142cfde8-20260422","released":"2026-04-22T16:35:40.622Z"},{"version":"0.0.0-experimental-94643c3b-20260421","released":"2026-04-21T16:36:45.189Z"},{"version":"19.3.0-canary-94643c3b-20260421","released":"2026-04-21T16:34:48.979Z"},{"version":"0.0.0-experimental-da9325b5-20260417","released":"2026-04-17T16:33:13.072Z"},{"version":"19.3.0-canary-da9325b5-20260417","released":"2026-04-17T16:31:03.928Z"},{"version":"0.0.0-experimental-00f063c3-20260415","released":"2026-04-15T16:36:31.842Z"},{"version":"19.3.0-canary-00f063c3-20260415","released":"2026-04-15T16:34:22.880Z"},{"version":"0.0.0-experimental-56824423-20260414","released":"2026-04-14T16:40:55.461Z"},{"version":"19.3.0-canary-56824423-20260414","released":"2026-04-14T16:38:47.969Z"},{"version":"0.0.0-experimental-fef12a01-20260413","released":"2026-04-13T16:40:59.232Z"},{"version":"19.3.0-canary-fef12a01-20260413","released":"2026-04-13T16:39:08.128Z"},{"version":"0.0.0-experimental-705268dc-20260409","released":"2026-04-09T16:43:37.092Z"},{"version":"19.3.0-canary-705268dc-20260409","released":"2026-04-09T16:41:32.235Z"},{"version":"0.0.0-experimental-404b38c7-20260408","released":"2026-04-08T19:18:57.795Z"},{"version":"19.3.0-canary-404b38c7-20260408","released":"2026-04-08T19:16:45.001Z"},{"version":"19.0.5","released":"2026-04-08T18:40:53.768Z"},{"version":"19.1.6","released":"2026-04-08T18:40:12.691Z"},{"version":"19.2.5","released":"2026-04-08T18:39:24.455Z"},{"version":"0.0.0-experimental-1b45e243-20260402","released":"2026-04-03T16:25:10.313Z"},{"version":"19.3.0-canary-1b45e243-20260402","released":"2026-04-03T16:23:03.655Z"},{"version":"0.0.0-experimental-80b1cab3-20260331","released":"2026-04-01T16:33:49.594Z"},{"version":"19.3.0-canary-80b1cab3-20260331","released":"2026-04-01T16:31:52.024Z"},{"version":"0.0.0-experimental-044d56f3-20260330","released":"2026-03-31T16:36:08.982Z"},{"version":"19.3.0-canary-044d56f3-20260330","released":"2026-03-31T16:33:51.623Z"},{"version":"0.0.0-experimental-74568e86-20260328","released":"2026-03-30T16:35:07.258Z"},{"version":"19.3.0-canary-74568e86-20260328","released":"2026-03-30T16:32:54.932Z"},{"version":"0.0.0-experimental-9627b5a1-20260327","released":"2026-03-27T22:12:50.759Z"},{"version":"19.3.0-canary-9627b5a1-20260327","released":"2026-03-27T22:11:00.871Z"},{"version":"0.0.0-experimental-3cb2c420-20260324","released":"2026-03-25T16:40:02.078Z"},{"version":"19.3.0-canary-3cb2c420-20260324","released":"2026-03-25T16:38:06.636Z"},{"version":"0.0.0-experimental-c0d218f0-20260324","released":"2026-03-24T16:36:33.551Z"},{"version":"19.3.0-canary-c0d218f0-20260324","released":"2026-03-24T16:34:21.964Z"},{"version":"19.3.0-canary-ed69815c-20260323","released":"2026-03-23T16:31:00.581Z"},{"version":"0.0.0-experimental-8b2e903a-20260320","released":"2026-03-20T16:27:05.233Z"},{"version":"19.3.0-canary-8b2e903a-20260320","released":"2026-03-20T16:25:03.864Z"},{"version":"0.0.0-experimental-b4546cd0-20260318","released":"2026-03-18T16:37:54.009Z"},{"version":"19.3.0-canary-b4546cd0-20260318","released":"2026-03-18T16:35:35.442Z"},{"version":"0.0.0-experimental-3f0b9e61-20260317","released":"2026-03-17T16:38:12.720Z"},{"version":"19.3.0-canary-3f0b9e61-20260317","released":"2026-03-17T16:36:07.214Z"},{"version":"0.0.0-experimental-c80a0750-20260312","released":"2026-03-13T16:23:59.056Z"},{"version":"19.3.0-canary-c80a0750-20260312","released":"2026-03-13T16:22:01.489Z"},{"version":"0.0.0-experimental-5e9eedb5-20260312","released":"2026-03-12T18:29:05.050Z"},{"version":"19.3.0-canary-5e9eedb5-20260312","released":"2026-03-12T18:27:01.438Z"},{"version":"0.0.0-experimental-46103596-20260305","released":"2026-03-06T16:24:02.658Z"},{"version":"19.3.0-canary-46103596-20260305","released":"2026-03-06T16:22:07.907Z"},{"version":"0.0.0-experimental-3bc2d414-20260304","released":"2026-03-04T16:27:07.333Z"},{"version":"19.3.0-canary-3bc2d414-20260304","released":"2026-03-04T16:24:59.445Z"},{"version":"0.0.0-experimental-4cc5b7a9-20260303","released":"2026-03-03T16:29:33.445Z"},{"version":"19.3.0-canary-4cc5b7a9-20260303","released":"2026-03-03T16:27:19.952Z"},{"version":"0.0.0-experimental-e0cc7202-20260227","released":"2026-02-27T16:24:54.206Z"},{"version":"19.3.0-canary-e0cc7202-20260227","released":"2026-02-27T16:22:41.655Z"},{"version":"0.0.0-experimental-98ce535f-20260226","released":"2026-02-26T16:34:04.059Z"},{"version":"19.3.0-canary-98ce535f-20260226","released":"2026-02-26T16:31:26.776Z"},{"version":"0.0.0-experimental-e33071c6-20260224","released":"2026-02-25T16:39:15.198Z"},{"version":"19.3.0-canary-e33071c6-20260224","released":"2026-02-25T16:37:16.274Z"},{"version":"0.0.0-experimental-c0060cf2-20260224","released":"2026-02-24T16:36:27.546Z"},{"version":"19.3.0-canary-c0060cf2-20260224","released":"2026-02-24T16:34:29.347Z"},{"version":"0.0.0-experimental-ab18f33d-20260220","released":"2026-02-21T03:13:46.096Z"},{"version":"19.3.0-canary-ab18f33d-20260220","released":"2026-02-21T03:11:49.678Z"},{"version":"0.0.0-experimental-2ba30655-20260219","released":"2026-02-20T00:03:59.157Z"},{"version":"19.3.0-canary-2ba30655-20260219","released":"2026-02-20T00:01:56.957Z"},{"version":"0.0.0-experimental-3a2bee26-20260218","released":"2026-02-19T16:31:57.085Z"},{"version":"19.3.0-canary-3a2bee26-20260218","released":"2026-02-19T16:29:48.604Z"},{"version":"0.0.0-experimental-4842fbea-20260217","released":"2026-02-18T16:34:40.609Z"},{"version":"19.3.0-canary-4842fbea-20260217","released":"2026-02-18T16:32:38.522Z"},{"version":"0.0.0-experimental-47d1ad14-20260216","released":"2026-02-17T16:33:39.861Z"},{"version":"19.3.0-canary-47d1ad14-20260216","released":"2026-02-17T16:31:35.465Z"},{"version":"0.0.0-experimental-e8c63626-20260213","released":"2026-02-16T16:27:14.392Z"},{"version":"19.3.0-canary-e8c63626-20260213","released":"2026-02-16T16:25:00.981Z"},{"version":"0.0.0-experimental-03ca38e6-20260213","released":"2026-02-13T16:28:12.682Z"},{"version":"19.3.0-canary-03ca38e6-20260213","released":"2026-02-13T16:26:14.329Z"},{"version":"0.0.0-experimental-6066c782-20260212","released":"2026-02-12T20:00:22.174Z"},{"version":"19.3.0-canary-6066c782-20260212","released":"2026-02-12T19:58:01.714Z"},{"version":"0.0.0-experimental-272441a9-20260209","released":"2026-02-09T18:32:27.647Z"},{"version":"19.3.0-canary-272441a9-20260209","released":"2026-02-09T18:30:23.659Z"},{"version":"19.3.0-canary-b07aa7d6-20260209","released":"2026-02-09T16:32:05.805Z"}]},"meta":{"timestamp":"2026-05-30T18:16:51.092Z","request_id":"dcbda20f-645d-4881-b712-ed0b6c176ea7"},"status":"ok","message":"Versions retrieved","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":5000,"rps_limit":2,"hard_limit":true},{"slug":"basic","name":"Basic","price_cents_month":300,"monthly_call_quota":60000,"rps_limit":5,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1200,"monthly_call_quota":400000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3200,"monthly_call_quota":2000000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/npm-api"}