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 5th birthday party because he is having sex with his boss Miranda (Amanda Donohoe). Max makes a birthday wish that: "I wish that for just one day... Dad can't tell a lie". Immediately, that wish actually and magically comes true.
Fletcher, through a series of embarrassing incidents, finds that he is unable to lie, mislead, or even withhold a true answer. He blurts out exactly what he is thinking, like a Tourette's Syndrome twitch. Some of these instances include: Immediately after Max makes his wish, Fletcher has just had sex with Miranda and when she asks "was it good for you?" "I've had better," he responds.
(The plot is reminiscent of The Twilight Zone episode "The Whole Truth," which involves a used car salesman being forced into uninhibited honesty by a haunted car.)
The next morning, when an attractive girl says everyone is so nice to her, he says "Well, that's because you have big jugs! I mean... your boobs are huge! I mean... I wanna squeeze em'!"
Also when he walks out of the elevator at his office and everyone is plugging their nose, he admits "It was me!". When an obese man asks "What's up?," he says, "Your cholesterol! Dead man walkin'!" He also tells a co-worker he doesn't know his name because he's not important enough. When he tries to explain his situation to his secretary Greta (Anne Haney), she doesn't believe him so he sets himself up good. He tells her to ask him something she thinks he would normally lie about. Greta asks him about a raise she wanted a couple months ago. Fletcher had told her if he gave her a raise from his own pocket it would make the other secretaries jealous so the company wouldn't allow it. She asks if that was true or if he just didn't want to "pony up the dough". Greta immediately quits.
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) a young woman who wants a quick divorce after 14 years of marriage. 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. It is here that Fletcher learns about Max's birthday wish and goes to confront him. Fletcher tries to convince Max that adults need to lie as a part of their daily lives, but he cannot give any type of answer at why he should continue to lie to his son. Fletcher also figures out that since Max wished for him to tell the truth for only one day, he tries to do what he can to delay Samantha's case since the magic wish will expire at 8:15 p.m.... 24 hours after Max made the wish.
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, Fletcher discovers a loophole in his case: he realizes that Samantha had lied about her age and therefore had signed her prenuptial agreement while she was only 17... still a minor, thus 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 Greta, who forgives him for his earlier rude truth-tellings after hearing he "went all noble" in front of their firm's senior partner.
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, Fletcher sneaks onto the tarmac by hiding in a piece of luggage, steals a motorized staircase, and manages to gain the pilot's attention by throwing his shoe at the cockpit window, forcing him to abort the flight. However, Fletcher's victory is cut short when he crashes into a barrier and is sent flying into a baggage tug, which causes a chain reaction that leaves Fletcher unconscious and with both of his legs broken. After waking up, he tells Max how much he cares about him and how sorry he was for breaking his promises. Despite realizing now that it is 8:30 pm and no longer being under the wish's influence, Fletcher means what he says and adds that Max is his priority, and Max convinces Audrey to stay in Los Angeles.
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".
Over the end credits, a montage of bloopers and outtakes from the movie is shown.