Updates existing entity(ies) or adds new one when not found. This command provides ways to find one or more existing entities and then lets an application add, change or remove properties. The local id allows an application to chain this command with following operations or associate with a previous search


  • [optional] class: name of entity class or empty string to search across multiple classes.
  • [optional] _ref: for reference.


  • [optional] properties
  • [optional] remove_props
  • [optional] constraints

** At least one of _ref or class + constraints are required for searching. **

If _ref is provided, it essentially refers to the search results of a previous FindEntity or AddEntity. Since the Upsert call just results in updating the property values inline within those entities or adding new entities, we keep the same _ref value. The call can result in an update to multiple entities depending on the search criteria. Unique is not assumed to be true in this case.

Class and property keys are case sensitive and are matched exactly when searching for entities or updating properties.

If search results are empty, this will lead to an AddEntity but only one entity is added. “remove_props” block is ignored.


# From the retail schema above, add the entity representing Jane Doe

"UpsertEntity" : {
    "_ref": 1234
    "properties" : {
        "Name" : "Janice Doe",
        "Ethnicity" : "European"

# From the retail schema above, remove the ethnicity,
# assuming the "Email" property uniquely identifies
# a person.

"UpsertEntity" : {
    "class" : "Person",
    "_ref": 1234
    "constraints" : {
        "Email": [ "==", "" ],
    "remove_props" : [ "Ethnicity" ]