Перейти к основному содержанию

API Documentation

Drevo exposes a full GraphQL API for querying genealogy data. Use it to build mobile apps, custom visualizations, or integrate with other platforms.

GraphQL 4.x Live REST — Coming Soon
POST /graphql/drevo Content-Type: application/json

Send a JSON body with query and optional variables. Anonymous access is enabled for read operations.

Queries

person(id)

Fetch a single person by their Drupal node ID.

Request
{
  person(id: "16") {
    id
    name
    birthYear
    deathYear
    birthPlace
    biography
    gender
    photo
    parents { id name }
    children { id name birthYear }
    spouses { id name }
  }
}
Response
{
  "data": {
    "person": {
      "id": "16",
      "name": "Queen Victoria",
      "birthYear": 1819,
      "deathYear": 1901,
      "gender": "female",
      "children": [
        { "id": "17", "name": "Princess Victoria", "birthYear": 1840 },
        ...
      ]
    }
  }
}

persons(filter, limit, offset)

List persons with optional filtering and pagination.

Request
{
  persons(
    filter: { name: { contains: "Victoria" } }
    limit: 10
    offset: 0
  ) {
    total
    items {
      id
      name
      birthYear
      gender
    }
  }
}
Response
{
  "data": {
    "persons": {
      "total": 3,
      "items": [
        { "id":"16", "name":"Queen Victoria", "birthYear":1819 },
        ...
      ]
    }
  }
}

Schema

schema { query: Query }

type Query {
  person(id: ID!): Person
  persons(filter: PersonFilter, limit: Int = 20, offset: Int = 0): PersonConnection
}

type Person {
  id:          ID!
  name:        String!
  birthYear:   Int
  deathYear:   Int
  birthPlace:  String
  biography:   String
  photo:       String
  gender:      String      # "male" | "female"
  parents:     [Person]
  children:    [Person]
  spouses:     [Person]
  siblings:    [Person]
}

type PersonConnection {
  total: Int!
  items: [Person!]
}

input PersonFilter {
  id:        IDFilter
  name:      StringFilter
  birthYear: IntFilter
}

input StringFilter { contains: String; eq: String }
input IntFilter    { eq: Int; gt: Int; lt: Int }
    

Try it live

The GraphQL endpoint is live and open for anonymous reads. You can use any GraphQL client (GraphQL Playground, Insomnia, Postman, curl).

curl -X POST https://drevo.artlogic.studio/graphql/drevo \
  -H "Content-Type: application/json" \
  -d '{"query":"{ persons(limit:5) { total items { id name birthYear } } }"}'

API Roadmap

✅ Live
GraphQL Queries
Read persons, relations, photos
🔜 Q3 2026
GraphQL Mutations
Create/update persons and relations
🔜 Q3 2026
REST/JSON:API
Standard Drupal REST endpoints
🔜 Q4 2026
Webhooks
Event push for new persons/relations
🔜 Q4 2026
GEDCOM Import API
Upload GEDCOM files via API
🔜 2027
OAuth 2.0
Token auth for write operations