Skip to main content
Plans: Every plan, and Free: published advisories stay in the feed. Who: public; no sign-in or token.
Every workspace has a public CSAF 2.0 feed of its published TLP:WHITE advisories. Your customers’ security tools and CSAF aggregators read it to learn, for each of your product versions, whether a vulnerability affects it. The feed serves the same documents as your public advisories page.

Endpoints

All endpoints answer GET without authentication. The base is https://app.pharussecurity.com/csaf/<your-slug>. Only the white directory exists. TLP:GREEN, AMBER and RED advisories are never served here. Every successful response carries these headers:
A new version can therefore take up to five minutes to show. An unknown slug, a directory other than white or a file that isn’t published returns 404 with the body Not found, as text/plain, with Cache-Control: no-store.

provider-metadata.json

The entry point for CSAF tools. It is served for every workspace, also before you have published anything.
The metadata lists no OpenPGP keys, and the documents aren’t OpenPGP-signed: there are no .asc files. A tool that requires signatures reports the documents as unsigned. Integrity comes from the hash files and HTTPS.

index.txt

One <yyyy>/<file>.json path per line, relative to the directory, newest first:
The body is empty when nothing is published.

changes.csv

One line per document, newest change first, with no heading row. Each line holds the path and the document’s current_release_date, both quoted:
Poll this file to see what changed since your last run.

Documents

GET /csaf/<your-slug>/white/<yyyy>/<file>.json returns the latest published version of one advisory, byte for byte the document that was hashed when it was published.
  • File name: the tracking ID in lower case, with every run of characters other than a–z, 0–9, + and - replaced by _, then .json. NORDLYS-2026-0001 becomes nordlys-2026-0001.json.
  • Folder: the year of the advisory’s first publication (initial_release_date).
  • Versions: a new version replaces the file at the same address. Superseded versions aren’t in the feed; your team downloads them from the advisory’s Releases tab.
  • Headers: besides the common ones, ETag is the document’s SHA-256 in quotes, and Last-Modified is when this version was published.
Each document is a CSAF 2.0 csaf_vex document in English: Every published version has passed the CSAF 2.0 schema and the VEX profile tests.

Hash files

<file>.json.sha256 and <file>.json.sha512 hold the hex digest of the document, two spaces and the file name, in the format sha256sum and sha512sum read:

Publisher namespace

CSAF identifies a document by its publisher namespace together with its tracking ID. Pharus sets the namespace from Settings → Disclosure:
  • With a Canonical URL set, the namespace is that URL’s origin, for example https://nordlys.no.
  • Without one, it is https://app.pharussecurity.com/csaf/<your-slug>.
The namespace is written into each version as it is published. Set Canonical URL before you publish your first advisory and leave it, so every version carries the same namespace.

Read the feed

Give your customers the provider metadata address, or let their tools discover it. A CSAF tool looks for a provider’s metadata at https://<domain>/.well-known/csaf/provider-metadata.json, in the CSAF field of the domain’s security.txt, or through DNS. Pharus writes the CSAF field into your security.txt, so once you serve that file from your own domain, tools given your domain can follow it to the feed. A typical client:
  1. Reads provider-metadata.json and takes the directory_url.
  2. Reads changes.csv and picks the paths changed since its last run.
  3. Downloads each document and checks it against its .sha256 or .sha512 file.
The same by hand:
The endpoints allow requests from any origin, so tools that run in a browser can read them too.
  • security.txt. The CSAF line appears by itself once you publish a TLP:WHITE advisory. Serve the file from your own domain. See security.txt.
  • The advisories page. https://app.pharussecurity.com/disclose/<your-slug>/advisories links “Machine-readable feed (CSAF)” and declares the provider metadata as its JSON alternate, as each advisory page does for its own document.
  • Your customers. Put the provider metadata address in your product documentation, security page or customer agreements, where their security teams look for it.

Security advisories

Draft and publish the documents the feed serves.

security.txt

The file that points tools to the feed.

Disclosure page

Canonical URL and the other disclosure settings.

API introduction

The rest of the Pharus API.