Fletcher Reede (Jim Carrey) is a particularly career-focused lawyer and divorced father. He has a habit of giving precedence to his job, breaking promises to his young son Max, and then lying to both Max (Justin Cooper) and his ex-wife Audrey (Maura Tierney) about the real reason for having done so. Ultimately, Fletcher misses his son's birthday party because he is having sex with his partner Miranda (Amanda Donohoe), and Max wishes while blowing out his cake candles that his father couldn't 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" just after having sex with her—that he is unable to lie 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 threatening to move to Boston with her new boyfriend Jerry (Cary Elwes) and to take Max with them.
Over the course of the film, Fletcher recognizes his son Max as his highest priority and struggles to keep him. He manages to win the case truthfully by using a loophole in the law (namely that his client had lied about her age and was 17 when she signed the prenuptial agreement, hence meaning that she was legally unable to enter into such an agreement and thus rendering the pre-nup invalid), with the repercussions being a major catalyst to his understanding of what he is likely to lose. When he sees the results of winning the case (Samantha, takes custody of the children and literally pulls them out of the arms of their responsible and caring father, much like Audrey has with Max), he has a crisis of conscience and shouts at the judge (Jason Bernard) to reverse the decision and is put into 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 Mr Allan (the law firm's senior partner).
Near the end, Fletcher hijacks a stair escalator at the airport to stop Max's plane from taking off. He ends up stopping it abruptly and is injured. He vows to his son to spend more time with him. Even though the 24th truth hour is up, Max knows he means it. One year later, Fletcher and Audrey, who is no longer dating Jerry, 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 mom and his dad to get back together and Max replies "No, I wished for roller blades!", the family subsequently seemingly returning to a normal dynamic as Fletcher chases Audrey and Max around the house with "the Claw" (A game he and Max play where his hand allegedly becomes a "Claw" that attacks Max).