Repository navigation
Releases: thobgg/api4webtrees
Release list
api4webtrees 1.18.0 – API level 30, the interface is complete
API level 30: the interface is complete. With this release every route needed for everyday genealogy work is there:
individuals, families, events, names, sources and citations, media, places and location records, godparents, merging with
undo, and now research tasks, ordering, change history and favourites. From here on releases will be rare. Changes
and fixes are collected and published together; pull requests are merged without an immediate release, so clients built
on this API are not served a new version every few days. Everything is additive; older clients keep working.
- Bookmarks → webtrees favourites.
GET/POST Bookmarksnow use webtrees' ownfavoritetable, so the bookmarks appear
in the browser under “My page › My favourites” and survive any client.dataare the user's,treeFavoritesthe
tree's (managers set them withforTree: true), each person with anote. Bookmarks from the old user setting are
taken over once, automatically. - Research tasks.
GET Taskslists webtrees'_TODOfacts of the tree (text, date, user, note;?open=1only the
ones due);POST Taskadds or changes one (date defaults to today, user to the signed-in one); deleting with
DeleteFactmeans done.IndividualandFamilyanswer withtasks. Nothing proprietary:_TODOis what the
webtrees module “Research tasks” writes and shows. - Ordering.
POST Reordersorts children, partnerships, names or media – like the “Re-order” pages in webtrees,
only the order of the GEDCOM lines changes. - Change history.
GET Changeslists who created, changed or deleted which record and when (webtrees' change table,
pending changes included),?xref=for one record;IndividualandFamilyanswer withlastChange(CHAN). - Tests:
StufeDreissig(favourites with migration, tasks, ordering, history); the documentation is generated again.
v1.17.2
Merge preview: contained facts. No API change; API level stays 29.
A fact that is contained in a fact of the other individual – same first line, every further line present there too, but the other version has more lines (birth with date only next to birth with date and place) – is now reported as same and not suggested for keeping; the more complete version stays, whichever individual it belongs to. Before, both births would have been kept.
v1.17.1
1.17.1 – 2026-10-06
Shorter “App” page. No API change.
- Only the app for the visitor's device is open; every other app is one folded line below (before: wtWin and wtAnd
were always open, which made the page long on every device). wtWin now comes first in the list, since most people
open the page at a PC.
v1.17.0
1.17.0 – 2026-10-06
Logos on the “App” page, readable code. No API change; API level stays 29.
- The “App” and “Connect” pages show an app's logo before its name (new optional field
iconinsrc/Apps.php, file
underresources/img; the tests check that the file exists). The four apps of the module author share one logo; a
third-party app adds its own with its pull request. Under the author's apps a short note says why they come first:
app and interface are developed together. The order of the apps is unchanged. - The code was reworked for readability, with no change in behaviour: named constants instead of bare numbers,
helpers instead of repeated blocks (visibility check, fact lookup with rights, pending changes, GEDCOM sub-record
replacement), English identifiers throughout, the longest actions split into named steps, misplaced comments fixed.
The API level history now lives indocs/API.mdand this file only.
api4webtrees 1.15.0
API levels 27 and 28: houses and farms as places, pending facts. Everything is additive; older clients keep working.
- Level 27 – the whole GEDCOM-L
_LOCrecord. Houses and farms are location records of their own with a type and a
superior place (1 TYPE Hof,1 _LOC @L1@), as GEDCOM-L and local heritage books with farm lists use them.
GET Placenow gives the_LOCrecord'stype, itsparents(the hierarchy pointers with their type and date) and
itsevents(1 EVENat the place – fire, rebuilding, sale … with type, date, notes and sources).childrenare
merged from webtrees' place table and the_LOChierarchy, each withlocationandtype. A place that exists only
as a_LOCin the hierarchy (a farm without recorded residents) is listed byPlaces?list=1and answered byPlace
with 0 events instead ofnot-found.POST Placetakestypeandparent; withparenta place without events can
be created. Renaming a place takes its farms along. - Level 28 – pending facts. Facts carry
pending: truewhile a change waits for approval (only users who see
pending changes gettrue).sexis everywhere what the facts show the user, also while a change of sex is pending. - Tests:
test_hof, the test tree has two farms; the documentation is generated again.
v1.14.0
API levels 25 and 26, both from Andreas Scharf for his app webtrees mobile. Everything is additive; older clients keep working.
- Level 25 –
POST MyAccount. The signed-in user changes their own display name, as under “My account” in the
browser: body{realName}, answer{ok, realName}. User name, email and password stay with the browser. Names
longer than 64 characters (the column's limit) are refused withreal-name-too-long; line breaks and control
characters become spaces. - Level 26 –
Info.loginForm. The settings of webtrees' sign-in page:welcomeMessage,
isSelfRegistrationAllowedandregistrationTerms(nullwhen the site shows no terms), in the language of the
request, so apps can show the same welcome text and offer registration only when the site allows it. The two texts are
HTML written by the site administrator – show them as HTML only after sanitising. - Tests:
test_mein_konto,test_anmeldeseite_in_info; the documentation is generated again, with a sample that has
the terms switched on, soregistrationTermsis described as text ornull.
v1.13.1
API level 24, unchanged. iPhone and iPad get an app: webtrees mobile by Andreas Scharf (App Store, connect scheme
webtreesmobile://), the first app from another author in src/Apps.php. On iPhone and iPad the “App” page now
shows it with the App Store badge and one-tap connecting instead of the browser note; managers can untick it in the
settings like any other app.
api4webtrees 1.13.0
API levels 21–24: places, media objects, start person. Everything is additive; older clients keep working.
- Level 21 – reading places.
GET Places?list=1: every place at visible events with counts (events, individuals,
families), coordinates (from the GEDCOM-L_LOCrecord, else webtrees' geographic data, elseMAPat an event, with
coordSource), the_LOCidentifier, GOV identifier and short name.GET Place?name=: the individuals and families
with their events there, places below,eventCounts(births, marriages, deaths, other) and the_LOCwith GOV
identifier, coordinates, postal code, region, country, short name, notes, sources and media. A place finds its_LOC
by the pointer at the event, the binding of the place-register module, the GOV identifier or a unique leaf name.
Privacy as everywhere: only visible events count; restricted records take the exact (slower) path. - Level 22 – writing places.
POST Place {name, gov?, lat?, lng?, note?, media?, postalCode?, region?, country?, shortName?, mapData?}writes into the_LOCand creates it if missing (_POST/POST,_STAE,_CTRY,
2 ABBRunder the name – existing spellings stay). With an ambiguous leaf name the events get3 _LOC @L…@.
mapData: truealso writes webtrees' geographic data (site administrators only). - Level 23 – renaming and merging places.
POST PlaceRename {from, to, preview?}: every event atfromgetsto,
places below move along. Iftoalready has records it is a merge: the two_LOCbecome one (gaps filled, notes,
sources and media appended, differing GOV identifier or coordinates reported). Locked or confidential events stay and
are counted.POST MediaObject {title?, type?}changes title and type of a media object; media now carry
type/format, at a_LOCalso file size and image dimensions.POST Media {media}links an existing media
object (edit rights suffice). NOTE facts namenoteXrefwhen they point to a shared note. - Level 24 – start person. Route Info names per tree
startXref– the individual webtrees starts with for this
user (own default individual, “this is me”, the tree's default individual, else the first) – and
treeDefaultXref.POST StartPerson {xref, forTree?}sets the user's own default individual (empty removes it) or,
for managers, the family tree's. - With SQLite (nas4webtrees, the family tree on this PC) webtrees can keep one place in two spellings that differ only
in case (“Celle”, “celle”); places count both, renaming takes both along. - Tests: places (reading, writing, renaming, merging, privacy), media objects, start person; performance check with
10,000 and 50,000 individuals (docs/leistung.md).
api4webtrees 1.12.0
API level 20: write godparents and witnesses (POST Association: linked as _ASSO + RELA, free as GEDCOM-L _GODP/_WITN, 1 ASSO into the baptism), Fact.type for the type of marriage, Fact.note no longer overwrites a godparent list. Used by wtWin/wtTux 1.32. Details in CHANGELOG.md.
api4webtrees 1.11.0
API level 19: godparents and witnesses (reading), GEDCOM-L _GODP/_WITN as free entries, associatedIn,
typeLabel, CONC in notes. Shown by wtAnd/wtWin/wtTux from 1.31. Details in CHANGELOG.md.