Developer API · v1

Your family tree, programmable.

Let an AI agent do the digging across archives and records, then write its findings straight into your tree — where it's rendered beautifully, kept private by default, and shared with the whole family from one link. You build the research; we are the home and the gallery.

Authentication

Every request carries a personal API key as a Bearer token. Create one under Settings → Developer API (a paid-plan feature). We store only a hash of the key, so copy it when it's shown — it can't be retrieved later.

Authorization: Bearer dyn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

The base URL is https://dynasty.house/api/v1. All responses are JSON.

Quick start

# who am I?
curl https://dynasty.house/api/v1/me \
  -H "Authorization: Bearer $DYNASTY_KEY"

# list my trees
curl https://dynasty.house/api/v1/trees \
  -H "Authorization: Bearer $DYNASTY_KEY"

For AI agents

Everything here is built to be machine-discoverable. Point your assistant at any of these:

A good agent records its source in each person's notes and never invents facts — only what the records support. A hosted MCP server is coming so agents connect with no glue code at all.

The data model

A tree is a window onto a graph of three things:

Dates are free-text (e.g. "1888", "12 May 1888", "abt 1890") so historical precision is never forced. The easiest way to build relationships is to create a person linked to an existing one (see below) — we handle the union plumbing for you.

Endpoints

GET /me

The account this key belongs to: { id, email, name, plan }.

GET /trees

Every tree you own or can edit: { trees: [{ id, name, slug, is_public, role, people }] }.

POST /trees

Create a tree. Body: { "name": "The Lopin Family" }{ id, name, role, people }.

GET /trees/:id

The whole family in one call — { tree, people: [...], unions: [...], children: [...] }. This is the primary read for an agent building context.

POST /trees/:id/people

Add a person, optionally tied to someone already in the tree.

curl -X POST https://dynasty.house/api/v1/trees/$TREE/people \
  -H "Authorization: Bearer $DYNASTY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "given": "Wilhelm",
    "surname": "Lopin",
    "sex": "M",
    "birth_date": "1888",
    "birth_place": "Vienna, Austria",
    "notes": "Found in the 1910 parish register.",
    "link": { "type": "parent", "personId": "EXISTING_PERSON_ID" }
  }'

link.type is "spouse", "child" or "parent" — describing the new person's relationship to personId. Returns { id }.

GET /people/:id

One person's full record.

PATCH /people/:id

Partial update — send only the fields you want to change.

curl -X PATCH https://dynasty.house/api/v1/people/$PERSON \
  -H "Authorization: Bearer $DYNASTY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "death_date": "1944", "death_place": "Vienna", "distinction": "Master clockmaker" }'

DELETE /people/:id

Remove a person; we tidy up any partnerships left empty.

Errors

Standard HTTP codes with a JSON { "error": "…" } body: 401 (bad/missing key), 402 (key valid but plan no longer includes the API), 404 (not found or no access), 400 (bad input). Be gentle with request volume; heavy automated use may be rate-limited.

What's next

A hosted MCP server (so Claude and other agents connect with zero glue code) and GEDCOM bulk import/export over the API are on the way. Tell us what you're building — hello@dynasty.house.

Build something your family will treasure.

Create an API key →