Everything the museum publishes for readers is also published for machines. Every record — person, place, building, work, event — has a permanent web page and a JSON twin at a stable address, and the whole collection is served as one connected graph: records (nodes) and the sourced relationships between them (edges).
There is no API key, no account and no rate card. The underlying data is CC0 1.0 — public domain, yours to download, keep and build on. The written articles are CC BY-SA 4.0, as with Wikipedia. If your system can open a web address, it can read the museum.
The living collection, right now: 47,718 records · 38,862 sourced connections · 22 record classes · 1,852 records still stubs, growing into full entries.
What makes this different
Many collections hold pieces of the Islamic past. The museum's claim is narrower and, we believe, unmatched in combination — no comparable combination is known:
One graph, every surface
The museum is not a website with an API attached. Its primary form is a single knowledge graph — records as structured data, articles as text — kept in a public git repository. The website, this API, the search, the timeline, the embeds and the children's wing are all renderings of that one graph. Correct a fact once, and every surface corrects.
Sources inside the structure
In most datasets, evidence lives in footnotes. Here it lives in the data model: connections carry the sources they rest on, summaries carry their citations, and contested points keep their readings, labelled rather than flattened. You can query not only what the museum says, but what it rests on.
Arabic first, three editions throughout
The graph is written Arabic-first — the Arabic labels and summaries are the original, not a translation — with full English and Urdu editions of everything, records and interface alike. Most collections in this field are English with translations, or Arabic alone.
Fourteen centuries, one connected web
Twenty-two classes — people, places, buildings, objects, books, Qur'anic and hadith passages, concepts, events, journeys — share one graph, so a question can travel from a scholar to a book, to its manuscripts, to a city, to a century. Encyclopaedias divide all this by discipline and by volume; the graph crosses it.
Time as data, in two calendars
Dates are structured values in EDTF, the library standard for historical dates, with Hijri years recorded beside Gregorian ones — so timelines, centuries and anniversaries are computed from the data, not written page by page.
Open at every layer — and reproducible
Data CC0, prose CC BY-SA, code MIT: no key, no tracking, no server answering each visitor — the site is static files, and the complete dataset is two downloads. Any institution can mirror the entire museum, verify it independently, and rebuild on it. Nothing is held back to make you depend on this website.
Others are larger in one dimension: a bigger encyclopaedia, a deeper single text corpus, a wider graph with no prose and no curation. What does not exist elsewhere, to our knowledge, is the combination — a sourced, Arabic-first, openly licensed graph of the whole Islamic past, published as a museum that anyone can read, query, embed and take.
Three ways in, from an afternoon to a platform
Choose the depth that suits your institution. Each level includes everything above it.
Level 1 — Link it
Add the museum to your catalogue and e-resources list, and deep-link to any record: every page address is permanent, in Arabic, English and Urdu. The British Library's Asian and African collections team is in touch with the museum about this step. Zero development work.
Level 2 — Embed it
Drop a living piece of the museum into your own pages with one snippet of HTML: a fact card and a guided trail of the week, in any of the three languages. The content updates on our side; your page simply frames it.
Level 3 — Build on the data
Download the graph itself — every record and every sourced connection as plain JSON files — and build your own search, exhibits, school resources or research tools on top. CC0 means the copy is yours outright; the living source keeps growing and correcting, and you can re-sync whenever you like.
Endpoints
Base address: https://api.islam.museum/api/v1/ — the same paths on islam.museum redirect here. Plain HTTPS GET requests; responses are JSON, or NDJSON (one JSON object per line) for the two graph files, so they can be processed as a stream. CORS is open (Access-Control-Allow-Origin: *), so browsers may call the API directly.
| Endpoint | What it returns |
|---|---|
| https://api.islam.museum/api/v1/meta/index.json | The API index: version, the 22 record classes, and the licences in machine-readable form. |
| https://api.islam.museum/api/v1/meta/coverage.json | Live totals: how many records exist, and how many per class. |
| https://api.islam.museum/api/v1/{class}/index.json | Every record of one class in a single JSON array — for example all 10,884 people. |
| https://api.islam.museum/api/v1/{class}/{slug}.json | One complete record: labels and summaries in three languages, its structured data, its sources, and its precomputed connections. |
| https://api.islam.museum/api/v1/graph/nodes.ndjson | The whole graph's records, one JSON object per line (49,570 lines). |
| https://api.islam.museum/api/v1/graph/edges.ndjson | Every connection between records, one per line (38,862) — each carries the sources it rests on. |
| https://islam.museum/{lang}/embed/fact/ · /{lang}/embed/trail-of-the-week/ | Embeddable widgets for your own pages: a fact card and the trail of the week, in Arabic, English or Urdu. |
| https://doi.org/10.5281/zenodo.23692511 | The archived dataset on Zenodo, with a permanent DOI for citation: 10.5281/zenodo.23692511. |
Example queries, with real results
Everything below was returned by the live API in November 2026, trimmed only for length.
How large is the collection?
GET https://api.islam.museum/api/v1/meta/coverage.json
{
"entities": 47718,
"stubs": 1852,
"byClass": { "person": 10884, "passage": 10079, "source": 7599,
"building": 5664, "event": 4960, … }
} One full record
GET https://api.islam.museum/api/v1/person/ibn-khaldun.json
{
"id": "person/ibn-khaldun",
"class": "person",
"slug": "ibn-khaldun",
"label": { "ar": "ابن خلدون", "en": "Ibn Khaldun" },
"summary": { "ar": "عبد الرحمن بن محمد بن خلدون الحضرمي، مؤلف المقدمة…", … },
"data": { … the full structured record … },
"connections": [ … ],
"license": { … }
} The graph files: a node and some edges
// one line of graph/nodes.ndjson — a record (a node)
{"id":"building/99-domes-mosque","class":"building",
"label":{"ar":"مسجد القباب التسع والتسعون","en":"99 Domes Mosque, Makassar"},
"summary":{"ar":"…","en":"…"},"wings":["objects"],
"regions":["southeast-asia"],"wikidata":"Q116827711","status":"draft"}
// two lines of graph/edges.ndjson — connections (edges), each with its sources
{"from":"person/muhammad-ali-jauhar","to":"person/abadi-bano-begum",
"type":"child_of","inverse":false,
"sources":["source/wikipedia-abadi-bano-begum-en","source/wikipedia-abadi-bano-begum-ur"]}
{"from":"person/a-k-fazlul-huq","to":"place/dhaka","type":"died_in","inverse":false,
"sources":["source/wikipedia-a-k-fazlul-huq-en","source/wikipedia-a-k-fazlul-huq-ar",
"source/wikidata-a-k-fazlul-huq"]} Walking the graph (Python) — who was Muhammad Ali Jauhar connected to?
Muhammad Ali Jauhar
child_of -> Abadi Bano Begum | sources: 2 Responses are trimmed with … where they continue.
Schema
Two shapes cover almost everything: the node (a record, in the graph files and class indexes) and the edge (a connection). A single-record response adds the record's full structured data and precomputed neighbourhood.
Node — one record
| Field | Type | Meaning |
|---|---|---|
| id | string | The record's permanent identifier, class/slug. |
| class | string | One of the 22 classes: person, place, building, work, event, passage, source… |
| label | { ar, en, ur } | The record's name in Arabic, English and Urdu, as available. |
| summary | { ar, en, ur } | A short sourced summary in up to three languages. |
| wings | string[] | Which of the museum's nine wings the record belongs to (a record may sit in several). |
| regions | string[] | Geographic regions the record belongs to. |
| status | string | published, or draft (ingested, still being enriched). Stubs carry no status. |
| wikidata | string (QID) | The record's Wikidata identifier (QID), where one exists — use it to match records against your own catalogue. |
| born · died · date | EDTF string | Date fields where they apply — born, died, or a single date — as EDTF values. |
Edge — one connection
| Field | Type | Meaning |
|---|---|---|
| from | string (id) | The record the connection starts from (an id). |
| to | string (id) | The record it points to (an id). |
| type | string | The kind of connection — one of 55 types (see below). |
| inverse | boolean | Whether this edge is the inverse reading of a stored relation. |
| sources | string[] (ids) | The sources this connection rests on — every edge is sourced. |
Single record — the full form
A single-record response carries these keys: id, class, slug, label, summary, stub, wings, regions, periods, tags, aliases, themes, span, display, data, prose, degree, contemporaries, updated, connections, related, license. The data key holds the record's complete structured content (dates, places, occupations, faith where attested, and more); connections and related are its precomputed neighbourhood in the graph; degree is its connection count.
There are 55 kinds of connection. The most frequent: part_of (9,845), mentions (9,504), participated_in (5,317), basis_for (3,749), occurred_at (2,120), about (1,825), died_in (750), member_of (726), born_in (608), child_of (570). Dates use EDTF (the Extended Date/Time Format, ISO 8601-2 — the library and archive standard for historical dates), with Hijri years recorded alongside Gregorian ones.
Sample code
The three patterns most integrations need. All run against the live API exactly as written.
JavaScript
// Fetch one full record — no key needed, CORS is open.
const res = await fetch("https://api.islam.museum/api/v1/person/ibn-khaldun.json");
const rec = await res.json();
console.log(rec.id); // "person/ibn-khaldun"
console.log(rec.label.en); // "Ibn Khaldun"
console.log(rec.label.ar); // "ابن خلدون"
console.log(rec.summary.en); // short sourced biography (also .ar / .ur) Python
import json, urllib.request
BASE = "https://api.islam.museum/api/v1"
def lines(url):
with urllib.request.urlopen(url) as r:
for raw in r:
if raw.strip():
yield json.loads(raw)
# 49,570 records and 38,862 sourced connections
nodes = {n["id"]: n for n in lines(f"{BASE}/graph/nodes.ndjson")}
edges = list(lines(f"{BASE}/graph/edges.ndjson"))
person = "person/muhammad-ali-jauhar"
print(nodes[person]["label"]["en"]) # Muhammad Ali Jauhar
for e in edges:
if e["from"] == person: # everything he connects to
other = nodes.get(e["to"], {})
name = other.get("label", {}).get("en", e["to"])
print(e["type"], "->", name, "| sources:", len(e["sources"])) HTML — embeds
<!-- "Fact" card, Arabic (use /en/ or /ur/ for the other editions) -->
<iframe src="https://islam.museum/ar/embed/fact/"
width="360" height="220" style="border:0" loading="lazy"
title="islam.museum — fact"></iframe>
<!-- "Trail of the week" — a guided path through connected records -->
<iframe src="https://islam.museum/ar/embed/trail-of-the-week/"
width="360" height="480" style="border:0" loading="lazy"
title="islam.museum — trail of the week"></iframe> Shell — the whole dataset
# The two graph files are the complete museum data (CC0 — keep them, reuse them):
curl -O https://api.islam.museum/api/v1/graph/nodes.ndjson
curl -O https://api.islam.museum/api/v1/graph/edges.ndjson
# Or fetch the archived preservation copy by its DOI:
open "https://doi.org/10.5281/zenodo.23692511" Start with an AI agent
Hand one of these prompts to your coding assistant — Claude, Devin, Copilot, or any other — together with this page's address. Each prompt is self-contained: it names the endpoints, the licence, and the result to produce. The prompts are given in English, as working text.
Prompt 1 — Add museum widgets to our library portal
You are helping a public library add islam.museum content to its website.
The museum offers two embeddable widgets, no API key needed:
https://islam.museum/ar/embed/fact/ (a daily fact card)
https://islam.museum/ar/embed/trail-of-the-week/ (a guided trail)
Task: create a self-contained HTML page section that embeds both widgets
in iframes (Arabic by default, with a small ar/en/ur switcher that swaps
the iframe language), keeps our existing layout intact on phone, tablet
and desktop, adds no cookies or tracking, and shows a plain link to
https://islam.museum if an iframe fails to load. Data licence: CC0. Prompt 2 — Build catalogue entries from the open data
You are a library systems developer. islam.museum publishes every record
as JSON, no key needed: https://api.islam.museum/api/v1/{class}/{slug}.json for one
record, https://api.islam.museum/api/v1/{class}/index.json for a whole class (22 classes).
Task: write a script that downloads the person index and produces a CSV
for our catalogue with one row per published person: id, label (ar, en,
ur), one-line summary (en), canonical page URL
https://islam.museum/en/person/{slug}/, and the Wikidata QID where the
record has one. Skip records whose status is not "published". Data is
CC0 1.0; add the credit line "Data: islam.museum (CC0)" to the output. Prompt 3 — Answer questions from the graph, with sources
You are a data analyst. Download the museum's graph (CC0, no key):
https://api.islam.museum/api/v1/graph/nodes.ndjson (one record per line)
https://api.islam.museum/api/v1/graph/edges.ndjson (one connection per line; each lists sources)
Task: load both files and answer, as a sourced table: which people are
connected to person/ibn-khaldun, by what type of connection, and which
sources support each connection? Then generalise your code so a librarian
can ask the same question for any record id. Never state a connection the
edges file does not contain; report the source ids with every row. Prompt 4 — A local mirror with search, for our reading rooms
You are a web developer. islam.museum's full dataset is CC0 and published
as two NDJSON files (nodes and edges) at https://api.islam.museum/api/v1/graph/.
Task: build a small static website we can host ourselves that loads a
local copy of nodes.ndjson and offers fast search and filters by class,
region and century, in Arabic and English. Every result links back to the
record's canonical page on islam.museum. The site must work offline once
the data file is downloaded, use no tracking, and credit
"Data: islam.museum (CC0)" in the footer. How much remains — why the living source matters
Of the 47,718 records already ingested, only about a quarter (11,907) are published; the rest are drafts still being enriched, and 1,852 are stubs awaiting their full build. A download today is a photograph of a workshop, not the finished shelves.
Beyond that, the museum's own gap map names the corpora not yet harvested: the Turkish DİA encyclopaedia (~16,800 articles, so far used only for single records), Nadwi's 57-volume dictionary of women hadith scholars (~9,000–10,000 teachers, almost none yet in the museum), the great narrator dictionaries behind the hadith transmitter graph, the Encyclopaedia of Islam backlog, a census of manuscripts and the libraries that hold them, and regional sweeps across Southeast Asia, Africa, China and the Americas that have barely begun. Three named dictionaries alone hold roughly 36,000 more entries than the museum has records today.
So take the data — that is what it is for. But build against the living source where you can: it corrects errors as scholars report them, adds thousands of records a month, and keeps one canonical address for everything. The copy is a snapshot; the museum is the garden.
What is not here yet
Stated plainly, so your planning rests on fact: there is no OpenAPI/Swagger document, no SPARQL endpoint, and no OAI-PMH or MARC export yet. The JSON shapes above are stable and versioned (v1 in every address), and the meta index announces the version and licences. Formal API documentation and library-standard exports are on the roadmap.
Licence, citation and contact
Data: CC0 1.0 — no permission needed; a credit line such as “Data: islam.museum (CC0)” is appreciated. Articles: CC BY-SA 4.0 — reuse with credit. Code: MIT. For citation, the dataset's DOI is 10.5281/zenodo.23692511. The museum is a personal, non-commercial initiative, offered free to libraries, schools and readers everywhere; questions, corrections and collaboration: discover@islam.museum.