Techniques for performing flow control in Universal Serial Bus (USB) are described. In one design, a USB host sends token packets to a USB device to initiate data exchanges with the USB device. The USB device determines that it is incapable of exchanging data with the USB host, e.g., because there is no data to send or because its buffer is full or near full. The USB device then sends a "flow off' notification to the USB host to suspend data exchanges. The USB host receives the flow off notification and suspends sending token packets to the USB device. Thereafter, the USB device determines that it is capable of exchanging data with the USB host. The USB device then sends a "flow on" notification to the USB host to resume data exchanges. The USB host receives the flow on notification and resumes sending token packets to the USB device.