Geni API – missing or errors in documentation

Started by Private User on Thursday, April 13, 2023
Problem with this page?

Participants:

Related Projects:

Showing all 18 posts

This is a thread where I will document errors or missing documentation and ask for clarification for the Geni API as a part of a systematic test and implementation of a complete C# SDK for the API.

Please keep the thread clean for none API software comments

Profile API

Additional usage: If your acess point to the tree is a regular profile, the first number is a GUID (globally unique identifier), you can prefix this GUID with a g to access the API record:
   https://www.geni.com/api/profile-g6000000012102785219

This API analysis is mainly based on the profile of Charlemagne: https://www.geni.com/api/profile-1693836?field_group=all&only_ids=true&master_profile=true

Parameters

The documentation for the parameter field_group=all is missing, - this is the option I have used as a base for this report.
Error: The master_profile field is NOT returned when using field_group=all, but it is implicit true if the curator field have a value.

  • Wish: I would also like to have a language parameter option on requests so that my app can get profiles in another language without having to change my logged-in user profile language.

Returned Fields

Fields listed with (missing documentation) will be documented later in this thread.

birth_order, number, Profile's birth order (missing documentation)

current_residence - for deceased persons the field is used for: Last Residence

data_conflict, Boolean, True if the profile have data conflicts(missing documentation)

deleted, Boolean, True if the profile is deleted (missing documentation)

detail_strings, Hash, Nested maps of locales to details fields (eg. about me) to values (must be requested)
Example:

 "detail_strings" : { "en-US" : { "about_me" : "US English" }, "fr" : { "about_me" : "French" } }

language, String, Profile's language.
Error: Can see any places where it is returned. For user profile I would expect the user selected language. For multi-lingual profiles this value should tell which language the displayed values is using (display_name, names, etc). See above the request for a language request argument.

locked, Boolean, True if the profile has been locked down by a curator.
Obsolete? Will only be returned if there is no other locks. In my opinion the locked=true should give the undocumented value locked_fields an all:true option, or returning locked=true even if locked_fields is used as well, since locked_fields also lock the profile fields for a curator.

locked_fields, LockedFields, - List over specific locked fields in the profile. (missing documentation)

marriage_orders, Hash, List over Union GUID:number pairs where number is married order (missing documentation)

Example from Charlemagne:
 "marriage_orders": {
    "6000000008568039331" : 1,
    "6000000008568026367" : 2,
    "6000000002349731751" : 3,
    "6000000008567983715" : 4,
    "6000000008567983698" : 5,
    "6000000007834583056" : 6,
    "6000000008248679887" : 7,
    "6000000018556076868" : 8,
    "6000000000351174125" : 9,
    "6000000003796990098" : 10
 }

Since referred marriage union is a GUID (globally unique identifier) you can, as with profiles, get the record by prefixing the number with the letter g.

    https://www.geni.com/api/union-g6000000008568039331

merge_note, Array or String, Note explaining the profile's merge status.
Error? : Should be renamed to curator_note? I doubt it can be an array, and in any case array of what?

names, Hash, Nested maps of locales to name fields to values
Should be documented with example:
   "names": {
    "en-US": { "display_name": "Charlemagne" },
    "no" : { "display_name" : "Karl den store" }
   }
Localized name fields supported: title, first_name, middle_name, last_name, maiden_name, suffix, display_name, nicknames (Note: Comma separated, not array of strings as the nicknames profile field.

project_ids, Array of Strings, List project ID's in which a profile is tagged (missing documentation)

Example from Charlemagne:
 "project_ids" : [
    "project-895188",
    "project-42771",
    "project-2960381",
    "project-1636100"
  }

Some notes about timestamp values like updated_at

Example from Charlemagne:
    "updated_at" : "1650996146"
The number 1650996146 is number of seconds since what old programmers like me calls The Unix Epoch, which is January 1st, 1970 00:00
Which, using C# can be converted like this using the above value:
DateTime UpdateAt = new DateTime(1970, 1, 1).AddSeconds(1650996146);
Which tell that the last update was on April 26, 2022 18:02:26

Question: Why is editing a spouse connection not flagged in updated_at?

Date Structure

Missing documentation on returned field:

  formatted_date, String

Example:
  "formatted_date" : "circa April 2, 747"

Location Structure

Missing documentation on returned field:

  formatted_location, String

Example:
  "formatted_location" : "Aachen, Cologne, North Rhine-Westphalia, Germany"

Locked Fields

Undocumented field of Profile
locked_fields :
about_me         Boolean  True if About Me is locked
all                Boolean   True if profile, all fields is locked
birth              EventLock   If fields in the birth event is lockedd
burial             EventLock  If fields in the burial event is locked
cause_of_death        Boolean       True if cause of death is locked
death                  EventLock   If fields in the death event is locked
gender             Boolean     True if the gender of the profile is locked
living              Boolean     True if the living status of the profile is locked
media             Boolean     True if the profile media is locked
name               Boolean     True if the profile name is locked
occupation         Boolean        True if the profile occupation is locked
relationship        Boolean       True if the profile relationship is locked
user_named_facts  Boolean     True if the user named facts is locked

EventLock

date     Boolean True if Event Date is locked
location Boolean True if Event Location is locked

--
Example:

 "locked_fields" : {
  "all" : true,
  "living" : true,
  "gender" : true,
  "death" : {
    "date" : true,
    "location" : true
  },
  "cause_of_death" : true,
  "burial" : {
    "date" : true,
    "location" : true
  },
  "birth" : {
    "location" : true,
    `"date" : true
  },
  "name" : true,
  "relationship" : true
  }

---

match_counts

        Profile's Match Counts

Undocumented field of Profile


record_match       Number  Profile's number of record matches
tree_match          Number  Profile's number of tree matches
smart_match        Number  Profile's number of smart matches
rm_value_score     Number  Profile's record match value score
sm_value_score     Number Profile's smart match value score
value_summary      String   Profile's match value summary
rm_value_summary  String   Profile's record match value summary
sm_value_summary  String   Profile's smart match value summary


Example

match_counts: {
      tree_match: 0,
      record_match: 1,
      smart_match: 0,
      rm_value_score: 10,
      sm_value_score: 0,
      value_summary: "Adds <strong>residence</strong>.",
      rm_value_summary: "Adds <strong>residence</strong>."
 },

Forgot this undocumented profile value which is documented under User and probably only is used on user profiles:

account_type  String  The user's account type: basic, plus, pro

Profile API

When requesting all fields of a profile you get the following duplicates (earlier version?) or missing:

  • is_curator, Boolean, - is this the profile of a curator (undocumented)
  • living is a duplicate of the documented is_alive
  • location is a duplicate of the documented current_residence
  • photo_urls is a duplicate of the documented mugshot_urls

Project API

Undocumented field of Project:
  strings  Hash  List of localized variants of the name and description fields.

Example

'"strings" : {
  "en-US" : {
    "name" : "MyHeritage LIVE 2018",
    "description" : "MyHeritage LIVE 2018: Lectures now online..."
   },
  "no" : {
    "name" : "MyHeritage LIVE 2018",
    "description" : "Møt Geni på MyHeritage LIVE..."
  },
  "nl" : {
    "description" : "Ontmoet Geni op MyHeritag..."
  }
}

profile/ancestors

Usage example is of immediate-family

document

Applies also on the return fields in the POST actions of

Undocumented fields of document

  • public Boolean True if the document is public

Unclear documentation

  • attribution - I cannot see a way to enter a value of attribution in a document under edit document. Not documentation using document/update either
  • labels - The documentation defines it as an array of strings, but I cannot see where it is entered under edit document. Under collection you can only select one. document/update tells that you can add a comma separated list (not tested), - but for what usage?

Missing values

Events

Under edit in a document you can connect a document to a specific event of one of the tagged profiles, but I cannot see a way to get that through the API. - Neither which event or for which profile. Not in the document/update API call either.

The document page also use the label "Events:", indicating that a document can be tagged to multiple events. How?

You can guess with a combination of the labels and tagged profiles in the document, but we need a more presise way, and since an event can be an extra event added to the profiles timeline we still have a problem if you have multiple added events on a profile

Document as a source

Missing a way to get a list of the combination "Profile", "Facts" and "Source Information" when the document is used as a source.

Share

This is a label on the document page, but I cannot see anything beneath it.

Location Structure

Missing documentation on returned fields:
  country_code    String Country code according to the ISO 3166 standard
  formatted_location String Formatted Location - location as displayed

Example

 "location" : {
  "city" : "Ridabu",
  "county" : "Hamar",
  "state" : "Hedmark",
  "country" : "Norge",
  "country_code" : "NO",
  "latitude" : 60.8012437,
  "longitude" : 11.1304744,
  "formatted_location" : "Ridabu, Hamar, Hedmark, Norge (Norway)"
 },

That is a lot of work Private User and a great contribution.

I assume you are looking for updates to be made by Geni to the API documentation pages? Do you have a reasonable expectation of that actually taking place?

Craig Andrew Miles - I would expect that, but I am not sure that the list is complete yet, and it is not a hurry since the missing parts is documented here. Probably more important with my questions and parts marked as unclear documentation.

I am more in doubt if I should publish my complete SDK that I have developed and used to test the complete API.

Private User

Did you observe what I created a separate post for, that private profiles return no information on connected nodes, contrary to the UI?

I was interested to see your section on matches. I was trying to find a way to find out whether a particular record_match existed for a given profile eg to Family Search.

Better would be to be able to retrieve a list of matches and then the information about a particular match.

BTW - your SDK sounds like a very valuable tool. I would love you to share!

I'm sure it is very disappointing to you Private User that there has been no response from anyone at Geni in relation to all of this valuable work you did.

I am finding that there is very limited interest in improving things across Geni as a whole but certainly in relation to the API. There is so much more that it could do, but it isnt clear who if anyone has any guardianship of it. Such a pity.

Nah, having worked with programming in over 45(?) years it is just an advantage for me that not everything is fully documented.

Bjørn, I'd love to test your API ... I find it hard to wrap my head around the current API.

For instance, I get "Permission denied" when I try to call Geni.api('profile-me/ancestors) - is the only way to get my parents to fetch the profile, look at the unions to figure out which one is the parent union, and then fetch the profiles in that union? Seems slow...

And Geni.init with cookie=true doesn't save a cookie - I still have to log in every time; what more do I need to do?

Mind you, this is only after 4 hours of trying - in another 4 hours it may all click (or not)....

Showing all 18 posts

Create a free account or login to participate in this discussion