A naive male prostitute and his sickly friend struggle to survive on the streets of New York City.
As the film opens, Joe Buck (Jon Voight), a young Texan working as a dishwasher, dresses in new cowboy clothing, packs a suitcase, and quits his job. He heads to New York City hoping to succeed as a male prostitute for women. Initially unsuccessful, he succeeds in bedding a well-to-do middle-aged New Yorker (Sylvia Miles), but Joe ends up giving her money.
Joe then meets Enrico Salvatore “Ratso” Rizzo (Dustin Hoffman), a street con man with a limp who takes $20 from Joe by offering to introduce him to a known pimp (John McGiver). Joe flees the encounter in pursuit of Ratso. Joe spends his days wandering the city and sitting in his hotel room. Soon broke, he is locked out of his hotel room and most of his belongings are impounded.
He tries to make money by agreeing to receive oral sex from a young man (Bob Balaban) in a movie theater. When Joe learns that the young man has no money, Joe threatens him and asks for his watch, but eventually lets him go. The following day, Joe spots Ratso and angrily shakes him down. Ratso offers to share the apartment in which he is squatting in a condemned building. Joe accepts reluctantly, and they begin a “business relationship” as hustlers. As they develop a bond, Ratso’s health, which has never been good, grows steadily worse…