Montessori Glossary API

A reference for developers and integrators

https://vocabulary.montessoriglossary.org/vocab/services.php

Curated by the Montessori Glossary Community Project · Powered by TemaTres v3.6

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

  1. JSON Output Parameter is Broken
    The output=JSON parameter is not functional — the server always returns XML regardless of this parameter. Use an XML parser for all responses.
  2. Definitions Require Two API Calls
    The search endpoint returns term IDs and names, but not definitions. To get the definition, you must follow up with fetchNotes using the term ID returned from search.
  3. Definition Text Contains HTML Tags
    The note_text field 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.
  4. 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.

4. suggest

Autocomplete

Autocomplete/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"
Note: This endpoint returns a simplified XML structure with only term names as text nodes, without term_id fields. If you need term_id for a follow-up call, use suggestDetails instead.

4b. suggestDetails

Autocomplete

Autocomplete 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name

5. fetch

Lookup

Exact 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"
Important: This endpoint returns the term metadata but does NOT include the definition. To get the definition, follow up with fetchNotes using the returned term_id.

Response Fields

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
date_createdateCreation date

6. match

Fuzzy Match

Natural 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name

2. fetchNotes

Definitions

The 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

FieldTypeDescription
stringstringThe term name
note_typestringType of note; "DF" = definition
note_textstringDefinition text (HTML tags present — strip before displaying)
note_srcstringCitation / source for the definition
HTML Tags: The note_text field contains raw HTML. Use a regex or HTML parser to strip tags: re.sub(r'<[^>]+>', '', text)

3. Two-Step Pattern

Workflow

The 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

Definitions

Search 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
date_createdateCreation date

7. fetchTopTerms

Browse

Browse 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
hasDownDegreeintegerNumber of narrower terms (children)

8. fetchUp

Hierarchy

Get parent / broader terms. Returns the hierarchy chain upward from a term.

curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchUp&arg=68"
Important Caveat: The response includes both parent terms AND the queried term itself. Filter by relation_type: parents have BT (broader term), the queried term has NT (narrower term) to distinguish them.

Response Fields

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
relation_typestring"BT" for parents, "NT" for the queried term

9. fetchDown

Hierarchy

Get 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
relation_typestring"NT" for narrower term, "BT" for broader, "RT" for related
hasMoreDowninteger1 if term has children, 0 if leaf term

10. fetchRelated

Relations

Get 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name

12. fetchAlt

Relations

Get 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

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringAlternative name / synonym

11. fetchTerm

Metadata

Retrieve 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

FieldTypeDescription
stringstringThe term name
langstringLanguage code (e.g., "en")
date_createdateDate term was created
codestringInternal code / identifier

13. randomTerm

Browse

Retrieve 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

ParameterOptionalDescription
arg=DFYesRestrict to terms with definitions only

Response Fields

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name

14. fetchLast

Browse

Retrieve recently added terms. Returns the last N terms added to the vocabulary.

curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=fetchLast"

Response Fields

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
date_createdateDate term was created

15. termsSince

Browse

Retrieve 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

ParameterFormatDescription
argYYYY-MM-DDDate to search from (inclusive)

Response Fields

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe term name
date_createdateDate term was created or modified

16. letter

Browse

Browse terms by first letter. Useful for building alphabetical indexes.

curl "https://vocabulary.montessoriglossary.org/vocab/services.php?task=letter&arg=s"

Parameters

ParameterDescription
argSingle letter (a-z) to filter terms

Response Fields

FieldTypeDescription
term_idstringUnique identifier for the term
stringstringThe 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}")

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 TypeCodeDescription
DefinitionDFMain definition of the term (retrieved via fetchNotes)