
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
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.
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"
}
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?
Missing documentation on returned field:
formatted_date, String
Example:
"formatted_date" : "circa April 2, 747"
Missing documentation on returned field:
formatted_location, String
Example:
"formatted_location" : "Aachen, Cologne, North Rhine-Westphalia, Germany"
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
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
}
---
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
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
When requesting all fields of a profile you get the following duplicates (earlier version?) or missing:
Undocumented field of Project:
strings Hash List of localized variants of the name and description fields.
'"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..."
}
}
Applies also on the return fields in the POST actions of
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
Missing a way to get a list of the combination "Profile", "Facts" and "Source Information" when the document is used as a source.
This is a label on the document page, but I cannot see anything beneath it.
Missing documentation on returned fields:
country_code String Country code according to the ISO 3166 standard
formatted_location String Formatted Location - location as displayed
"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)"
},
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.
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.
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)....