Skip to main content
    Developer

    QHSE Tech Public API

    Programmatic access to the QHSE & ESG software directory. Free, JSON over HTTPS, Bearer-token authentication.

    Base URL

    https://nypdfolwwyubfqqljmxj.functions.supabase.co/public-api

    All requests require an Authorization: Bearer YOUR_API_KEY header. Generate a key below.

    Get an API key

    View your keys

    For security, listing or revoking keys requires a 6-digit code we email to your address. Codes expire in 15 minutes.

    Try it live in the API Explorer

    OpenAPI 3.1 spec & Postman

    Import /api-docs/openapi.json into Swagger UI / OpenAPI Generator, or run the pre-configured collection in Postman.

    Endpoints

    GET /v1/software

    List all software products. Supports ?category=, ?q= (name search), ?limit= (max 100), ?offset=.

    curl https://nypdfolwwyubfqqljmxj.functions.supabase.co/public-api/v1/software?limit=5 \
      -H "Authorization: Bearer YOUR_API_KEY"

    Response shape:

    {
      "data": [
        {
          "id": "tekmon",
          "name": "Tekmon",
          "tagline": "...",
          "category": "QHSE Platform",
          "rating": 4.9,
          "review_count": 187,
          "website": "https://...",
          ...
        }
      ],
      "pagination": { "limit": 25, "offset": 0, "total": 142 }
    }

    GET /v1/software/:id

    Fetch a single product by its slug ID with the full record (pros, cons, features, certifications, pricing details).

    curl https://nypdfolwwyubfqqljmxj.functions.supabase.co/public-api/v1/software/tekmon \
      -H "Authorization: Bearer YOUR_API_KEY"

    GET /v1/categories

    List all distinct categories with the number of products in each.

    curl https://nypdfolwwyubfqqljmxj.functions.supabase.co/public-api/v1/categories \
      -H "Authorization: Bearer YOUR_API_KEY"

    Code samples

    Same request — list software products — across five languages. Click the language tab and copy.

    curl https://nypdfolwwyubfqqljmxj.functions.supabase.co/public-api/v1/software?limit=5 \
      -H "Authorization: Bearer YOUR_API_KEY"

    Official SDKs

    Drop-in single-file clients for TypeScript and Python. Same API surface, fully typed, minimal dependencies.

    Install

    npm install @qhsetech/sdk

    Prefer zero-install? Download the single-file builds: qhsetech.ts · qhsetech.py

    Quick start

    import { QhseTechClient, QhseTechApiError } from "@qhsetech/sdk";
    
    const client = new QhseTechClient({
      apiKey: process.env.QHSE_API_KEY!, // qhse_live_*
    });
    
    // List products
    const { data, pagination } = await client.software.list({
      category: "Incident Management",
      limit: 10,
    });
    console.log(`${pagination?.total} products total`);
    
    // Single product
    const { data: product } = await client.software.get("tekmon");
    
    // Semantic search (AI-ranked)
    const { data: results } = await client.search.products({
      q: "permit to work for confined spaces",
      limit: 5,
    });
    
    // Typed error handling
    try {
      await client.software.get("does-not-exist");
    } catch (e) {
      if (e instanceof QhseTechApiError) {
        console.error(e.code, e.status, e.requestId);
      }
    }

    Available methods

    MethodEndpoint
    client.software.list(...)GET /v1/software
    client.software.get(id)GET /v1/software/:id
    client.categories.list()GET /v1/categories
    client.reviews.list(softwareId)GET /v1/reviews/:id
    client.glossary.list(q?)GET /v1/glossary
    client.search.products(q=...)GET /v1/search

    Fair use

    • Free unlimited access during preview — please be reasonable (avoid hammering the API).
    • Each request is logged with the API key for analytics. We may revoke keys behaving abusively.
    • Cache results when possible — the directory updates daily, not per-second.
    • Attribution appreciated: link back to qhsetech.com.

    Errors & status codes

    StatusMeaning
    401Missing or invalid API key
    403API key revoked
    404Resource not found
    405Method not allowed (only GET supported)
    500Server error — please retry