Developers

Publish once. Read everything.

Keep one feed up to date and every listing, comparison and ranking follows it. The same catalog is open to read over a JSON API.

How publishing works

Every source goes through the same four steps. Nothing is published before a person on our team reviews the first import.

  1. Host a feed

    A PAD file, a repository or an OpenAPI document on your own domain.

  2. Validate

    The schema is checked field by field and fetched only from public addresses.

  3. Review

    New listings wait in moderation until an administrator publishes them.

  4. Stay in sync

    Scheduled re-syncs pick up new versions and the rank recomputes on each one.

PAD JSON 2.0

PAD JSON 2.0

PAD JSON 2.0 is the recommended format: one document per product, descriptions per locale, pricing in minor units and an optional webhook.

lanternly.pad.json
{
  "$schema": "https://mysoftrank.com/schemas/msr-2.0.json",
  "protocol": {
    "name": "MSR JSON",
    "version": "2.0",
    "author": "Antonio Santos",
    "specification_license": "CC-BY-4.0",
    "reference_implementation_license": "MIT",
    "canonical_url": "https://mysoftrank.com/schemas/msr-2.0.json"
  },
  "pad_version": "2.0",
  "vendor": {
    "name": "Lanternly Labs",
    "website": "https://lanternly.dev",
    "country_code": "BR"
  },
  "software": {
    "slug": "lanternly",
    "name": "Lanternly",
    "kind": "saas",
    "category": "observability",
    "license_type": "freemium",
    "platforms": [
      "web",
      "linux"
    ],
    "homepage": "https://lanternly.dev",
    "integrations": [
      "kubernetes",
      "slack",
      "python"
    ],
    "pricing": {
      "model": "usage",
      "price_from_cents": 0,
      "currency": "USD"
    },
    "descriptions": {
      "en": {
        "summary": "Uptime checks that open the exact failing trace."
      },
      "pt-BR": {
        "summary": "Checagens de disponibilidade que abrem o trace exato da falha."
      },
      "es": {
        "summary": "Chequeos de disponibilidad que abren la traza exacta del fallo."
      }
    }
  },
  "release": {
    "version": "3.4.0",
    "released_on": "2026-09-15",
    "release_type": "minor",
    "notes_url": "https://lanternly.dev/changelog#3.4.0"
  },
  "webhook": {
    "url": "https://lanternly.dev/hooks/mysoftrank",
    "events": [
      "listing.published",
      "rank.changed"
    ]
  }
}

Required: pad_version, vendor.name, software.slug, software.name and release.version. Prices are integers in minor units with an ISO 4217 currency. Contact names, e-mails and phone numbers are ignored and never stored.

Licenciamento e Governança do Protocolo: A especificação do MSR JSON é de autoria de Antonio Santos e licenciada sob Creative Commons Atribuição 4.0 Internacional (CC-BY 4.0). Ferramentas, validadores e bibliotecas de referência sob Licença MIT.

PAD XML (legacy)

PAD XML
PAD XML keeps working Existing PAD XML files import as they are, through the same validation. New fields such as per-locale descriptions and webhooks exist only in PAD JSON 2.0.
<XML_DIZ_INFO>
  <Company_Info><Company_Name>Lanternly Labs</Company_Name></Company_Info>
  <Program_Info>
    <Program_Name>Lanternly</Program_Name>
    <Program_Version>3.4.0</Program_Version>
    <Program_Release_Year>2026</Program_Release_Year>
  </Program_Info>
</XML_DIZ_INFO>

GitHub, GitLab and OpenAPI

No PAD file? Point us at what you already publish and we map it to the same listing fields.

GitHub

Releases become versions, the README summary becomes the description and topics suggest the category.

GitLab

Same mapping as GitHub, including self-managed instances reachable on a public address.

OpenAPI

For API products: info.version drives freshness and the document earns the OpenAPI badge on the listing.

Signed webhooks

We notify your endpoint when a listing is published or its rank changes. Every delivery is signed with HMAC-SHA256 in the X-MySoftRank-Signature header.

  1. Read the X-MySoftRank-Signature and X-MySoftRank-Timestamp headers and the raw request body, before any JSON parsing.
  2. Compute HMAC-SHA256 over the timestamp, a dot and the raw body, using your webhook secret.
  3. Compare with a constant-time function. Reject the delivery when they differ.
  4. Reject timestamps older than five minutes to stop replays.
Example delivery
POST /hooks/mysoftrank HTTP/1.1
Content-Type: application/json
X-MySoftRank-Event: rank.changed
X-MySoftRank-Timestamp: 1789660800
X-MySoftRank-Signature: sha256=d96595d15c50f9f26d0e8a3b0f7a3fcdae6ca69ae2c3df80f829d82b591ee0da

{"event":"rank.changed","software":"lanternly","rank":{"previous":14,"current":9,"score":71.4},"computed_on":"2026-09-17"}
Verifying the signature in Python
import hashlib, hmac

def is_valid(secret: bytes, timestamp: str, body: bytes, header: str) -> bool:
    signed = timestamp.encode() + b"." + body
    expected = "sha256=" + hmac.new(secret, signed, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, header)

Read API

Published listings only. Responses are JSON, paginated with page and per_page.

Public API endpoints
Endpoint Returns Authentication Rate limit
GET /.well-known/msr.json Authoritative MySoftRank MSR JSON manifest and metadata None Set by your API plan
GET /schemas/msr-2.0.json Official MSR JSON 2.0 JSON Schema (Draft 2020-12) None Set by your API plan
GET /api/v1/software Published software, filtered by category and search text None Set by your API plan
GET /api/v1/software/{slug} One listing with versions, sources and descriptions None Set by your API plan
GET /api/v1/categories Every category with its listing count None Set by your API plan
POST /api/v1/submit/pad Submit a PAD document by URL or body for moderation Bearer token 10 requests per minute per address

API plans

Reading the catalog is free for small projects. Paid plans raise limits and add bulk data licensing.

Free

Free
  • 10,000 requests per month
  • Up to 60 requests per minute
  • Attribution link required
Talk to us

Data license

Custom
  • No monthly cap
  • Up to 3,000 requests per minute
  • Monthly full exports and market reports
Talk to us

API plans buy access to data, never a better position in it.