Public REST API · v1

PrestaShield Vulnerability API

A free, read-only JSON API over the largest database of PrestaShop vulnerabilities: core and modules, CVE and GHSA, with the affected version ranges you need to know whether a shop is exposed. It feeds the PrestaShield connector and panel, and you can use it too.

385published advisories
94in PrestaShop core
209modules affected
193critical (CVSS ≥ 9)
2026-10-30latest advisory

Basics

Base URL

https://api.prestashield.com/v1 · JSON, UTF-8 · no auth · open CORS (Access-Control-Allow-Origin: *) · OpenAPI 3.0.

Rate limits

POST /v1/check is limited to 60 requests per minute per IP. Read endpoints are cached for 5 minutes; please cache on your side too and send a descriptive User-Agent (for example MyTool/1.2 (+https://example.com)).

Languages

Add lang=es or lang=en (default en) to get the headline, the summary and the affected ranges in that language. The long advisory text is served in the language of its source, usually English, with a translation when one exists.

Versions

PrestaShop versions have four numbers on the 1.x branch (1.7.8.11) and three from 8 on (8.2.1, 9.1.5). Module versions are whatever the module declares.

Endpoints

EndpointWhat it returns
GET /v1/vulnerabilities?type=core&version=8.2.1Core advisories affecting that version (all core advisories without version).
GET /v1/vulnerabilities?type=module&slug=ps_facetedsearch&version=3.0.0Advisories of one module affecting that version. slug is the module's technical name (its folder).
GET /v1/vulnerabilities?type=php&version=8.2.30Advisories for the PHP interpreter itself (recent, severe, excluding Windows-only ones) affecting that version. Only the numeric part is compared: "8.2.29-nmm1" works.
GET /v1/vulnerabilities/{slug|CVE|GHSA}One advisory with description, references, CWE and CVSS metrics. Any identifier works: cve-2026-44212, CVE-2026-44212, GHSA-w9f3-qc75-qgx9.
POST /v1/checkEverything affecting one shop in a single call: the core, all its modules and, when php_version is sent, PHP itself. The recommended way to integrate.
GET /v1/catalog?page=1&per_page=100The whole catalogue with full detail, paginated. Meant for builds and mirrors, not for per-request use.
GET /v1/modules · GET /v1/modules/{slug}Modules that have advisories, with counts; and all advisories of one module.
GET /v1/connector/latestLatest version of the veoprestashield connector and its ZIP.

Check a whole shop

Request
curl -X POST https://api.prestashield.com/v1/check \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyTool/1.0 (+https://example.com)" \
  -d '{"ps_version":"8.2.1","php_version":"8.2.30","lang":"en","modules":[{"slug":"ps_facetedsearch","version":"3.0.0"},{"slug":"productcomments","version":"4.1.0"}]}'
Response (trimmed)
{
  "core": [ { "slug": "cve-2026-44212", "cve": "CVE-2026-44212", "score": 9.3, "severity": "critical",
              "affected": ["…"], "url": "https://www.prestashield.com/en/vulnerabilities/cve-2026-44212/", "…": "…" } ],
  "php": [ { "slug": "cve-2026-109618", "score": 9.2, "…": "…" } ],
  "modules": { "ps_facetedsearch": [ { "slug": "cve-2026-54159", "score": 10, "…": "…" } ],
               "productcomments": [ "…" ] },
  "meta": { "ps_version": "8.2.1", "modules_checked": 2, "modules_vulnerable": 2, "generated_at": "2026-10-25T12:00:00+00:00" }
}

Fields of an advisory

FieldMeaning
slug, cve, ghsaStable identifier (the URL one) and the public identifiers it maps to. A GHSA that later gets a CVE keeps its slug.
type, modulecore, module (+ technical name) or php (the interpreter; ranges are PHP versions). dependency and other exist for edge cases.
score, severityCVSS base score (highest available, v4 > v3.1 > v3.0) and its label: none, low (<4), medium (<7), high (<9), critical.
ranges, affectedMachine-readable ranges and the same in plain words. A range has unique (exactly that version) or bounds: start (inclusive), included (inclusive upper), excluded (exclusive upper). Matching evaluates only the ranges of the installed major branch when there are any: with "< 8.2.6" and "< 9.1.1", an 8.2.7 shop is not affected.
has_patch, patchesWhether a fix exists and, for core issues, modules that patch it without upgrading.
back_officeExploitable only with high privileges (an employee account): lower urgency than a front-office issue.
urlPublic page of the advisory on www.prestashield.com, in the requested language.
description, references, weaknesses, metricsDetail endpoints only. description is HTML; metrics follows NVD's structure for all sources.

Where the data comes from

Three sources, merged into one record per advisory: NVD (CVE, CVSS, CPE ranges; refreshed continuously), the GitHub Security Advisories of the PrestaShop organisation (the vendor's own advisories, including those without a CVE) and Friends of Presta (third-party module advisories with the module's technical name). New entries are added daily; entries whose module cannot be identified automatically are reviewed by hand before they are published.

Found an error, a missing advisory or a wrong range? Write to hola@kebes.es.

Legacy WordPress endpoints

Connectors installed before the API moved still call /wp-json/wp/v2/vulnerability?vulnerability_core=true&version=… and ?vulnerability_module_slug=…&version=…. Those URLs keep working with the same response shape (title.rendered, content.rendered, acf.base_score), now backed by this database. They are deprecated: new integrations must use /v1.

Fair use and privacy

The API is free for any use, including commercial, as long as you don't hammer it: cache responses, batch with /v1/check, and use /v1/catalog for mirrors. For security and usage control we log each request (endpoint, parameters, IP address, origin host and user agent). Raw logs are deleted after 90 days; only aggregated counts without IP addresses are kept. Legal basis: legitimate interest (GDPR art. 6.1.f).

Changelog

2026-10 · v1 — New API on a dedicated backend with a single version-matching engine (per-branch ranges), three merged sources, POST /v1/check, catalogue and OpenAPI spec. The WordPress endpoints became a compatibility layer.