--- /dev/null
+# API flow
+
+1. Process A that wants to listen to an add user operation calls AddUserWait and registers on the AddUserStarted signal.
+2. Process B that wants to add a user calls AddUser.
+3. sessiond emits AddUserStarted and starts to process the operation.
+4. Process A receives AddUserStarted and reacts to this. After it's done, it calls AddUserDone.
+5. Once sessiond receives all AddUserDones (or waits ~10 seconds), it emits AddUserComplete.
+
+In case of an error, methods return a DBus error.
+
+# Methods
+
+1. Add a user to the subsession:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: AddUser
+ parameters: (ii)
+ session_uid <int32> in
+ subsession_id <int32> in
+
+2. Remove a user from the subsession:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: RemoveUser
+ parameters: (ii)
+ session_uid <int32> in
+ subsession_id <int32> in
+
+3. Switch the subsession user:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: SwitchUser
+ parameters: (iii)
+ session_uid <int32> in
+ prev_subsession_id <int32> in
+ next_subsession_id <int32> in
+
+4. Register to wait for user add operation:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: AddUserWait
+ parameters: (i)
+ session_uid <int32> in
+
+5. Register to wait for user remove operation:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: RemoveUserWait
+ parameters: (i)
+ session_uid <int32> in
+
+6. Register to wait for user switch operation:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: SwitchUserWait
+ parameters: (i)
+ session_uid <int32> in
+
+7. Mark user add callback as done:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: AddUserDone
+ parameters: (ii)
+ session_uid <int32> in
+ subsession_id <int32> in
+
+8. Mark user remove callback as done:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: RemoveUserDone
+ parameters: (ii)
+ session_uid <int32> in
+ subsession_id <int32> in
+
+9. Mark user switch callback as done:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: SwitchUserDone
+ parameters: (ix)
+ session_uid <int32> in
+ switch_id <int64> in
+
+10. Get subsession user list:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: GetUserList
+ parameters: (i) -> (ai)
+ session_uid <int32> in
+ subsession_id_list <array<int32>> out
+
+# Signals
+
+1. On user add:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: AddUserStarted
+ parameters: (ii)
+ session_uid <int32>
+ subsession_id <int32>
+
+2. On user removal:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: RemoveUserStarted
+ parameters: (ii)
+ session_uid <int32>
+ subsession_id <int32>
+
+3. On user switch:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: SwitchUserStarted
+ parameters: (ixii)
+ session_uid <int32>
+ switch_id <int64>
+ prev_subsession_id <int32>
+ next_subsession_id <int32>
+
+4. On user add completed:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: AddUserCompleted
+ parameters: (ii)
+ session_uid <int32>
+ subsession_id <int32>
+
+5. On user removal completed:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: RemoveUserCompleted
+ parameters: (ii)
+ session_uid <int32>
+ subsession_id <int32>
+
+6. On user switch completed:
+
+ objpath: /org/tizen/sessiond
+ interface: org.tizen.sessiond.subsession.Manager
+ member: SwitchUserCompleted
+ parameters: (ix)
+ session_uid <int32>
+ switch_id <int64>