Montessori Glossary API
A reference for developers and integrators
https://vocabulary.montessoriglossary.org/vocab/services.php
The Montessori Glossary Community Project is a collaborative, open-access initiative to co-create a community-driven glossary of Montessori concepts. Incubated at the Center for Montessori Studies, it brings together an international network of educators working toward a multilingual linked-data vocabulary. All content is shared under a Creative Commons Attribution 4.0 license.
Important Notes
4 Critical Gotchas
-
JSON Output Parameter is Broken
Theoutput=JSONparameter is not functional — the server always returns XML regardless of this parameter. Use an XML parser for all responses. -
Definitions Require Two API Calls
Thesearchendpoint returns term IDs and names, but not definitions. To get the definition, you must follow up withfetchNotesusing the term ID returned from search. -
Definition Text Contains HTML Tags
Thenote_textfield in fetchNotes responses contains HTML tags (e.g.,<b>,<i>,<p>). Strip these tags before displaying to end users unless you intentionally want formatted output. -
All Arguments Passed as Query Parameters
Every endpoint follows the pattern?task=TASKNAME&arg=VALUE. There is no POST body or JSON payload — everything is query string parameters.
1. search
SearchFind terms by keyword. Returns all terms whose name contains the query string.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=search&arg=sensitive"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
date_create | date | Creation date |
4. suggest
AutocompleteAutocomplete/typeahead for terms starting with a prefix. Returns simpler XML structure with plain string text nodes (no term_id).
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=suggest&arg=sen"suggestDetails instead.
4b. suggestDetails
AutocompleteAutocomplete with full term structure including term_id. Same as suggest but returns complete term objects. Use this when you need the term_id for follow-up operations.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=suggestDetails&arg=sen"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
5. fetch
LookupExact match lookup for a term by its complete name. Use + or %20 for spaces in the term name.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetch&arg=Sensitive+Period"fetchNotes using the returned term_id.
Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
date_create | date | Creation date |
6. match
Fuzzy MatchNatural language / fuzzy matching. Use this as a fallback when search returns no results or for more flexible term matching.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=match&arg=sensitive+period"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
2. fetchNotes
DefinitionsThe most important endpoint. Retrieves the full definition and metadata for a term by its ID. Always called after search, fetch, or suggestDetails.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchNotes&arg=68"Response Fields
| Field | Type | Description |
|---|---|---|
string | string | The term name |
note_type | string | Type of note; "DF" = definition |
note_text | string | Definition text (HTML tags present — strip before displaying) |
note_src | string | Citation / source for the definition |
note_text field contains raw HTML. Use a regex or HTML parser to strip tags: re.sub(r'<[^>]+>', '', text)
3. Two-Step Pattern
WorkflowThe standard workflow for getting definitions: (1) call search to get term IDs, then (2) call fetchNotes on each ID to get the definition.
Python Pipe Script
This script searches for terms and fetches definitions in one go:
curl -s "https://vocabulary.montessoriglossary.org/vocab/services.php?task=search&arg=QUERY" | python3 -c "
import sys, json, re, xml.etree.ElementTree as ET, urllib.request
root = ET.parse(sys.stdin).getroot()
terms = []
for t in root.findall('.//term'):
term_id = t.findtext('term_id')
name = t.findtext('string')
url = f'https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchNotes&arg={term_id}'
with urllib.request.urlopen(url) as r:
notes_root = ET.parse(r).getroot()
note = notes_root.find('.//note')
if note is not None:
raw_note = note.findtext('note_text') or ''
definition = re.sub(r'<[^>]+>', '', raw_note).strip()
source = note.findtext('note_src') or ''
else:
definition = ''
source = ''
terms.append({'id': term_id, 'name': name, 'definition': definition, 'source': source})
print(json.dumps(terms, indent=2))
"Python Function
Reusable function for queries:
import re, xml.etree.ElementTree as ET, urllib.request
def query(task, arg=None):
url = f'https://vocabulary.montessoriglossary.org/vocab/services.php?task={task}'
if arg:
url += f'&arg={arg}'
with urllib.request.urlopen(url) as r:
return ET.parse(r).getroot()
def strip_html(text):
return re.sub(r'<[^>]+>', '', text or '').strip()
# Example: search + fetch definitions
root = query('search', 'sensitive period')
for t in root.findall('.//term'):
term_id = t.findtext('term_id')
name = t.findtext('string')
notes_root = query('fetchNotes', term_id)
note = notes_root.find('.//note')
if note is not None:
definition = strip_html(note.findtext('note_text'))
print(f'{name}: {definition}')
else:
print(f'{name}: (no definition available)')17. searchNotes
DefinitionsSearch within definition text. Returns terms whose definitions contain the query string.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=searchNotes&arg=child"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
date_create | date | Creation date |
7. fetchTopTerms
BrowseBrowse top-level categories in the vocabulary hierarchy. No argument required. Returns root terms that have no parents.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchTopTerms"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
hasDownDegree | integer | Number of narrower terms (children) |
8. fetchUp
HierarchyGet parent / broader terms. Returns the hierarchy chain upward from a term.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchUp&arg=68"relation_type: parents have BT (broader term), the queried term has NT (narrower term) to distinguish them.
Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
relation_type | string | "BT" for parents, "NT" for the queried term |
9. fetchDown
HierarchyGet child / narrower terms. Returns all terms that are conceptually narrower or more specific than the queried term.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchDown&arg=68"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
relation_type | string | "NT" for narrower term, "BT" for broader, "RT" for related |
hasMoreDown | integer | 1 if term has children, 0 if leaf term |
10. fetchRelated
RelationsGet related terms (associative / thematic relationships). Returns terms that are conceptually related but not strictly hierarchical.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchRelated&arg=68"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
12. fetchAlt
RelationsGet alternative / non-preferred terms (synonyms). Returns variant names and synonyms for a term.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchAlt&arg=68"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | Alternative name / synonym |
11. fetchTerm
MetadataRetrieve full term detail and metadata. Returns term information but not definitions — use fetchNotes for definitions.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchTerm&arg=68"Response Fields
| Field | Type | Description |
|---|---|---|
string | string | The term name |
lang | string | Language code (e.g., "en") |
date_create | date | Date term was created |
code | string | Internal code / identifier |
13. randomTerm
BrowseRetrieve a random term from the vocabulary. Optionally restrict to terms with definitions.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=randomTerm"
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=randomTerm&arg=DF"Parameters
| Parameter | Optional | Description |
|---|---|---|
arg=DF | Yes | Restrict to terms with definitions only |
Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
14. fetchLast
BrowseRetrieve recently added terms. Returns the last N terms added to the vocabulary.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchLast"Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
date_create | date | Date term was created |
15. termsSince
BrowseRetrieve terms added or modified since a specific date. Useful for syncing and caching strategies.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=termsSince&arg=2024-01-01"Parameters
| Parameter | Format | Description |
|---|---|---|
arg | YYYY-MM-DD | Date to search from (inclusive) |
Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
date_create | date | Date term was created or modified |
16. letter
BrowseBrowse terms by first letter. Useful for building alphabetical indexes.
curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=letter&arg=s"Parameters
| Parameter | Description |
|---|---|
arg | Single letter (a-z) to filter terms |
Response Fields
| Field | Type | Description |
|---|---|---|
term_id | string | Unique identifier for the term |
string | string | The term name |
XML Parsing Reference
All API responses are in XML format. Here's a reusable Python function for querying the API and parsing responses:
import re, xml.etree.ElementTree as ET, urllib.request
def query(task, arg=None):
"""Query the Montessori Glossary API and return XML root element"""
url = f'https://vocabulary.montessoriglossary.org/vocab/services.php?task={task}'
if arg:
url += f'&arg={arg}'
with urllib.request.urlopen(url) as r:
return ET.parse(r).getroot()
def strip_html(text):
"""Remove HTML tags from text"""
return re.sub(r'<[^>]+>', '', text or '').strip()
# Example: Query search results
root = query('search', 'sensitive period')
for term in root.findall('.//term'):
term_id = term.findtext('term_id')
name = term.findtext('string')
print(f"ID: {term_id}, Name: {name}")
# Example: Get definition for a term
root = query('fetchNotes', '68')
note = root.find('.//note')
if note is not None:
definition = strip_html(note.findtext('note_text'))
source = note.findtext('note_src')
print(f"Definition: {definition}")
print(f"Source: {source}")Recommended Call Sequence
This is the typical workflow for searching and displaying term definitions:
User types a query
Call suggest or suggestDetails
Call search to get term IDs
Call fetchNotes for each term
Call fetchRelated and fetchDown
Show results to user
Vocabulary Structure
The Montessori Glossary is organized as a hierarchical thesaurus with the following relationship types:
Broader Terms (Parents)
fetchUp — more general concepts
Example: "Pedagogy" is broader than "Montessori Method"
Term
The concept you're looking up
Example: "Sensitive Period"
Narrower Terms (Children)
fetchDown — more specific concepts
Example: "Sensitive Period for Language" narrows "Sensitive Period"
Related Terms
fetchRelated — associative / thematic links
Terms that are conceptually connected but not hierarchically related
Alternative Names
fetchAlt — synonyms and non-preferred terms
Variant names and synonyms for the same concept
Notes & Definitions
Each term can have one or more notes. The most relevant note type is:
| Note Type | Code | Description |
|---|---|---|
| Definition | DF | Main definition of the term (retrieved via fetchNotes) |