Hi @darylsze,
I left an answer on your other question here.
Message thread works exactly the way you described.
For sending a reply, we allow you to set the parentMessageId in UserMessageParams, FileMessageParams.
For fetching reply messages, we have parentMessageObject.getThreadedMessagesByTimestamp which will fetch all reply messages of a message.
If you only have a parent message ID, not an object, you can retrieve the parent message object first, using
BaseMessage.getMessage(MessageRetrievalParams, GetMessageHandler),
then use the message object to get reply messages.