Manage users using Graph API

Query a logged-in user

See also how to use /user/info under OAuth 2.0 / OpenID Connect. It’s a limited but “standard” approach to query a logged-in user’s information.

URL Description
/graph/me() The preconfigured version of the logged-in user query using a flat/compact response JSON
/graph/me The generic version of the logged-in user query using the default 10Duke SDK2 JSON format
/graph/me.jwt A variant that queries the logged-in user and the response is a signed JSON web token (JWT)

Query a user profile

A graph query to retrieve a user profile by id.

GET /graph/Profile[@id='profile id']

Query a user by preconfigured id query

Includes the contact information and response in a flat compact form.

GET 
/graph/profile('profile id')

Reads the user profile with related person and contact information.

GET /graph/Profile[@id='profileid']?/~ManyToOne/Person&/~OneToMany/ContactInformation/~OneToMany/EmailAddress

Note: We recommend using this type of a call variant when the client application is in a CRUD cycle. The client application may want to include more related objects depending on the case.

Preconfigured named query to request a user profile by email address

GET /graph/emailAndProfile('email address')

This query asks for a user profile including Person, all ContactInformation and Recovery EmailAddress objects as relations.

GET /graph/me?/~ManyToOne/Person&/~OneToMany/ContactInformation/~OneToMany/EmailAddress&/~OneToMany/ContactInformation/~OneToMany/TelephoneNumber&/~OneToMany/ContactInformation/~OneToMany/PostalAddress&/~OneToMany/RecoveryEmailAddress

Query a user’s recovery email addresses

GET /graph/me/~OneToMany/RecoveryEmailAddress

Register a user

POST /graph?operation=RegisterUser

{
  "__objType": "Profile",
  "referenceFields": {
    "__objType": "HashMap",
    "Entries": [{
      "__objType": "KeyValue",
      "value": {
        "__objType": "UUID",
        "value": "${PERSON_ID}"
      },
      "key": {
        "__objType": "String",
        "value": "ref_Person_id"
      }
      }]
  },
  "nickname": "${NICK_NAME}",
  "id": "${PROFILE_ID}",
  "rel_Relations": [{
    "rel_Relation": {
      "__objType": "ObjectRelation",
      "multiplicity": "MANY_TO_ONE",
      "relatedObjectType": "com.tenduke.sdk2.objectmodel.identity.Person"
      },
    "rel_RelatedObjectList": {
      "__objType": "RelatedObjectList",
      "rel_RelatedObjects": [{
        "__objType": "Person",
        "lastName": "${LAST_NAME}",
        "firstName": "${FIRST_NAME}",
        "id": "${PERSON_ID}",
        "rel_Relations": [{
          "rel_Relation": {
            "__objType": "ObjectRelation",
            "multiplicity": "ONE_TO_MANY",
            "relatedObjectType": "com.tenduke.sdk2.objectmodel.credential.EmailAndPassword"
		      },
          "rel_RelatedObjectList": {
            "__objType": "RelatedObjectList",
            "rel_RelatedObjects": [{
              "__objType": "EmailAndPassword",
              "referenceFields": {
                "__objType": "HashMap",
                "Entries": [{
                  "__objType": "KeyValue",
                  "value": {
                    "__objType": "UUID",
                    "value": "${PERSON_ID}"
                  },
                  "key": {
                    "__objType": "String",
                    "value": "ref_Person_id"
                  }
                }]
              },
              "userName": "${EMAIL}",
              "id": "${CREDENTIAL_ID}",
              "passwordPlain": "${PASSWORD}"
             }]
           }
         }]
      }]
    }
  },{
    "rel_Relation": {
      "__objType": "ObjectRelation",
      "multiplicity": "ONE_TO_MANY",
      "relatedObjectType": "com.tenduke.sdk2.objectmodel.identity.Account"
      },
    "rel_RelatedObjectList": {
      "__objType": "RelatedObjectList",
      "rel_RelatedObjects": [{
        "__objType": "Account",
        "accountType": "personal",
        "referenceFields": {
          "__objType": "HashMap",
          "Entries": [{
            "__objType": "KeyValue",
            "value": {
              "__objType": "UUID",
              "value": "${PROFILE_ID}"
			      },
            "key": {
              "__objType": "String",
              "value": "ref_Profile_id"
			      }
		      }]
	      },
        "accountIdentifier": "${ACCOUNT_ID}",
        "id": "${ACCOUNT_ID}"
      }]
      }
	}, {
    "rel_Relation": {
      "__objType": "ObjectRelation",
      "multiplicity": "ONE_TO_MANY",
      "relatedObjectType": "com.tenduke.sdk2.objectmodel.contact.ContactInformation"
      },
    "rel_RelatedObjectList": {
      "__objType": "RelatedObjectList",
      "rel_RelatedObjects": [{
        "__objType": "ContactInformation",
        "referenceFields": {
          "__objType": "HashMap",
          "Entries": [{
            "__objType": "KeyValue",
            "value": {
              "__objType": "UUID",
              "value": "${PROFILE_ID}"
			      },
            "key": {
              "__objType": "String",
              "value": "ref_Profile_id"
            }
          }]
        },
        "id": "${CONTACT_INFO_ID}",
        "rel_Relations": [{
          "rel_Relation": {
            "__objType": "ObjectRelation",
            "multiplicity": "ONE_TO_MANY",
            "relatedObjectType": "com.tenduke.sdk2.objectmodel.contact.PostalAddress"
		      },
          "rel_RelatedObjectList": {
            "__objType": "RelatedObjectList",
            "rel_RelatedObjects": [{
              "__objType": "PostalAddress",
              "referenceFields": {
                "__objType": "HashMap",
                "Entries": [{
                  "__objType": "KeyValue",
                  "value": {
                    "__objType": "UUID",
                    "value": "${CONTACT_INFO_ID}"
                  },
                  "key": {
                    "__objType": "String",
                    "value": "ref_ContactInformation_id"
                  }
                }]
              },
              "countryCode": "$COUNTRY_CODE",
              "streetAddress2": "street 2",
              "streetAddress3": "street 2",
              "streetAddress": "street 1",
              "city": "Vantaa",
              "postalCode": "007",
              "id": "${POSTAL_ADDRESS_ID}"
            }]
          }
        }, {
          "rel_Relation": {
            "__objType": "ObjectRelation",
            "multiplicity": "ONE_TO_MANY",
            "relatedObjectType": "com.tenduke.sdk2.objectmodel.contact.EmailAddress"
           },
          "rel_RelatedObjectList": {
            "__objType": "RelatedObjectList",
            "rel_RelatedObjects": [{
              "__objType": "EmailAddress",
              "referenceFields": {
                "__objType": "HashMap",
                "Entries": [{
                  "__objType": "KeyValue",
                  "value": {
                    "__objType": "UUID",
                    "value": "${CONTACT_INFO_ID}"
                  },
                  "key": {
                    "__objType": "String",
                    "value": "ref_ContactInformation_id"
                  }
                }]
              },
              "id": "${EMAIL_ID}",
              "value": "${EMAIL}"
            }]
          }
        }]
      }]
    }
  }]
}

Update a user

(If you missed it, check out the introduction to updating objects.)

Note: Make sure to retain object and reference identifiers logically, so that updating data doesn’t introduce duplicate objects into a graph (or switch a reference from an existing object to a new one, creating “ghost” objects). Look for the pattern ${..._ID} in the JSON below.

PUT /graph
   
{
  "__objType": "Profile",
  "referenceFields": {
    "__objType": "HashMap",
    "Entries": [{
      "__objType": "KeyValue",
      "value": {
        "__objType": "UUID",
        "value": "${PERSON_ID}"
      },
      "key": {
        "__objType": "String",
        "value": "ref_Person_id"
      }
    }]
  },
  "nickname": "${NICK_NAME}",
  "id": "${PROFILE_ID}",
  "rel_Relations": [{
    "rel_Relation": {
      "__objType": "ObjectRelation",
      "multiplicity": "MANY_TO_ONE",
      "relatedObjectType": "com.tenduke.sdk2.objectmodel.identity.Person"
      },
    "rel_RelatedObjectList": {
      "__objType": "RelatedObjectList",
      "rel_RelatedObjects": [{
        "__objType": "Person",
        "lastName": "${LAST_NAME}",
        "firstName": "${FIRST_NAME}",
        "id": "${PERSON_ID}",
        "rel_Relations": []
      }]
    }
  }, {
    "rel_Relation": {
      "__objType": "ObjectRelation",
      "multiplicity": "ONE_TO_MANY",
      "relatedObjectType": "com.tenduke.sdk2.objectmodel.contact.ContactInformation"
      },
    "rel_RelatedObjectList": {
      "__objType": "RelatedObjectList",
      "rel_RelatedObjects": [{
        "__objType": "ContactInformation",
        "referenceFields": {
          "__objType": "HashMap",
          "Entries": [{
            "__objType": "KeyValue",
            "value": {
              "__objType": "UUID",
              "value": "${PROFILE_ID}"
            },
            "key": {
              "__objType": "String",
              "value": "ref_Profile_id"
            }
          }]
        },
        "id": "${CONTACT_INFO_ID}",
        "rel_Relations": [{
          "rel_Relation": {
            "__objType": "ObjectRelation",
            "multiplicity": "ONE_TO_MANY",
            "relatedObjectType": "com.tenduke.sdk2.objectmodel.contact.PostalAddress"
          },
          "rel_RelatedObjectList": {
            "__objType": "RelatedObjectList",
            "rel_RelatedObjects": [{
              "__objType": "PostalAddress",
              "referenceFields": {
                "__objType": "HashMap",
                "Entries": [{
                  "__objType": "KeyValue",
                  "value": {
                    "__objType": "UUID",
                    "value": "${CONTACT_INFO_ID}"
                  },
                  "key": {
                    "__objType": "String",
                    "value": "ref_ContactInformation_id"
                  }
                }]
              },
              "countryCode": "$COUNTRY_CODE",
              "id": "${POSTAL_ADDRESS_ID}"
            }]
          }
        }, {
          "rel_Relation": {
            "__objType": "ObjectRelation",
            "multiplicity": "ONE_TO_MANY",
            "relatedObjectType": "com.tenduke.sdk2.objectmodel.contact.EmailAddress"
          },
          "rel_RelatedObjectList": {
            "__objType": "RelatedObjectList",
            "rel_RelatedObjects": [{
              "__objType": "EmailAddress",
              "referenceFields": {
                "__objType": "HashMap",
                "Entries": [{
                  "__objType": "KeyValue",
                  "value": {
                    "__objType": "UUID",
                    "value": "${CONTACT_INFO_ID}"
                  },
                  "key": {
                    "__objType": "String",
                    "value": "ref_ContactInformation_id"
                  }
                }]
              },
              "id": "${EMAIL_ID}",
              "value": "${EMAIL}"
            }]
          }
        }]
      }]
    }
  }]
}

Change login email

POST /graph HTTP/1.1
Host: {IDP_HOST}
Content-Type: application/x-www-form-urlencoded

operation=ChangeLoginEmail&profileId=[PROFILE_ID]&recoveryEmailId=[EMAIL_ID]
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "__objType": "ChangeLoginEmailResult", 
  "resultCode": "Success"
}

Change contact email

POST /graph

operation=ChangeContactInfoEmail&profileId=[PROFILE_ID]&recoveryEmailId=[EMAIL_ID]

{
  "__objType": "ChangeContactInfoEmailResult", 
  "resultCode": "Success"
}