In Los Angeles, California Fletcher Reede (Jim Carrey) is a career-focused lawyer and divorced father. He loves spending time with his young son Max (Justin Cooper); they often play a game where Fletcher makes his hand into "the Claw" and pretends to chase Max with it. But Fletcher has a habit of giving precedence to his job, breaking promises to Max and his ex-wife Audrey (Maura Tierney), and then lying about the reasons. Fletcher's compulsive lying has also built him a reputation as one of the best defense lawyers in the state of California as he is climbing the ladder in the firm for which he works. Ultimately, Fletcher misses his son's fifth birthday party because he is having sex with his boss Miranda (Amanda Donohoe). Max makes a birthday wish that his father would be unable to tell a lie for an entire day; a wish that immediately becomes true.
Fletcher soon discovers, through a series of embarrassing incidents, such as when he tells Miranda that he has "had better" sex than he just did with her, that he is unable to lie, mislead, or even withhold a true answer. These incidents are inconvenient, as he is fighting a divorce case in court which, should he win, could be a huge boost to his career. His client is Samantha Cole (Jennifer Tilly). His main witness is willing to commit perjury to win, but Fletcher discovers that he cannot even ask a question if he knows the answer will be a lie; during the case he even objects to himself when he tries to lie to get the desired information. Meanwhile, Audrey is planning to move to Boston with her new boyfriend Jerry (Cary Elwes), and decides that Max is going with them so that she can protect him from getting hurt by Fletcher.
Fletcher tries desperately to delay the case, even beating himself up, but he cannot conceal that he is able to continue, so Judge Marshall Stevens (Jason Bernard) insists that he does. Finally he realizes that his client had lied about her age and therefore had signed her prenuptial agreement while a minor, rendering it invalid. This allows him to win his case truthfully, but the repercussions become a catalyst to his understanding of what he himself is about to lose. Samantha, who only cared about her ex-husband's money, takes custody of her children purely so her ex-husband would be forced to continue paying her for child care and literally snatches the children out of the arms of their good and caring father. Fletcher then has a crisis of conscience and shouts at the judge to reverse the decision, and is taken to jail for contempt of court. Audrey refuses to pay his bail, which is eventually paid by his secretary Greta (Anne Haney), who forgives him for his earlier rude truth-tellings after hearing he "went all noble" in front of their firm's senior partner.
Fletcher is fired from the firm but apparently he does not care and is now considering starting his own. And now recognizing his son Max as his highest priority, Fletcher struggles to keep him. He hurries to the airport, but Audrey and Max's plane has already left the terminal. Desperate, he hijacks a mobile stairway and pursues the plane onto the runway. The plane finally stops, but Fletcher is injured. On his way to the hospital, he vows to his son to spend more time with him and never hurt him again. Even though the 24 hours of truth are up, Max knows he means it, and Audrey decides not to move to Boston with Jerry.
One year later, Fletcher and Audrey are celebrating Max's birthday. The lights go off when Max blows out his birthday candles. When they go back on, Fletcher and Audrey are kissing. Fletcher asks Max if he wished for his mother and his dad to get back together and Max replies "No, I wished for roller blades!" The family seemingly returns to normal as Fletcher chases Audrey and Max around the house with "the Claw."