For developers

A free API for the ITHub dataset

Every tool in the directory, as structured JSON: category, deployment, licensing and pricing model.

Endpoint

GET https://www.ithub.directory/developers/tools-v1.json

Schema version 1.0. The stable versioned endpoint is tools-v1.json. tools.json remains the current-version alias. The machine-readable contract is available as OpenAPI 3.1 JSON.

Current dataset: 332 profiles, including 107 marked open source, 135 marked self-hostable and 217 with an API recorded.

No API key, no rate limit beyond fair use, no authentication. Response is cached for one hour. CORS is open (Access-Control-Allow-Origin: *) so you can call it directly from the browser.

Response shape

{
  "schema_version": "1.0",
  "source": "https://www.ithub.directory/developers",
  "count": 332,
  "updated": "2026-10-14T00:01:13.878Z",
  "statistics": {
    "open_source": 107,
    "self_hostable": 135,
    "api_available": 217
  },
  "tools": [
    {
      "name": "Grafana",
      "slug": "grafana",
      "url": "https://www.ithub.directory/monitoring-observability/grafana",
      "category": "Monitoring & Observability",
      "tagline": "Open source dashboards and observability across many data sources",
      "description": "...",
      "website_url": "https://grafana.com",
      "is_open_source": true,
      "is_self_hostable": true,
      "has_api": false,
      "pricing_model": "freemium",
      "founded_year": 2014,
      "hq_location": "New York, USA",
      "github_url": "https://github.com/grafana/grafana",
      "docs_url": "https://grafana.com/docs/",
      "source_checked_at": null
    }
  ]
}

Quick start

curl

curl --fail --silent   https://www.ithub.directory/developers/tools-v1.json   | jq '.tools[] | select(.is_open_source == true) | .name'

JavaScript

const response = await fetch("https://www.ithub.directory/developers/tools-v1.json");
if (!response.ok) throw new Error(`ITHub API returned ${response.status}`);
const dataset = await response.json();
const selfHosted = dataset.tools.filter((tool) => tool.is_self_hostable);

Python

import requests

response = requests.get(
    "https://www.ithub.directory/developers/tools-v1.json",
    timeout=15,
)
response.raise_for_status()
tools = response.json()["tools"]
api_tools = [tool for tool in tools if tool.get("has_api")]

Freshness and compatibility

The top-level updated value is the newest profile update represented in the export. Individual profiles can include a source_checked_at value when an official source was explicitly checked. Consumers should treat unknown fields as null or absent and ignore fields they do not recognize.

Use tools-v1.json when compatibility matters. Additive fields may appear within version 1; an incompatible change will use a new versioned path and will be announced in the changelog below. Pin your import schema, log schema_version and updated, and keep the last successful copy for rollback.

Errors and availability

Validate integrations against the OpenAPI document. A basic contract check should assert HTTP 200, schema_version === "1.0", count === tools.length and a non-empty canonical url for every tool.

Changelog

2026-10-03 — version 1.0

Usage

Free to use for any purpose, commercial or not. Attribution back to ithub.directory is appreciated but not required. Data quality is best-effort: fields are left null rather than guessed when a fact could not be verified, so expect gaps.

Something wrong with an entry? Let us know or view the tool's own profile page for the sourcing note.