Les fichiers sont transférés paquet par paquet. Quand le paquet est reçu, le destinataire calcule la somme de contrôle des données et la compare à l'octet de contrôle. Si les deux correspondent, le destinataire envoie l'ASCII ACK à l'émetteur, qui peut alors émettre le prochain paquet. S'il y a un problème, le destinataire envoie dans ce cas l'ASCII NAK. Sur réception de ce caractère, l'émetteur va alors renvoyer le paquet mal transmis, et peut essayer plusieurs fois, normalement 10 fois, avant d'interrompre le transfert.
Un NAK était également envoyé si le destinataire ne recevait pas un paquet valide pendant dix secondes, alors qu'il attend toujours des données en l'absence du caractère de fin de fichier. Un time-out de 7 secondes est également observé pendant la transmission d'un paquet afin de détecter une coupure de la connexion.
Les numéros de blocs sont aussi vérifiés comme un moyen simple de vérifier les erreurs. Après la réception correcte d'un paquet, le paquet suivant devait avoir le numéro de bloc suivant (+1). Si un paquet avec le même numéro de bloc était reçu, il était considéré que l'émetteur n'avait pas reçu de confirmation et qu'il renvoie donc le même paquet.
Les transferts sont à l'initiative du destinataire, l'émetteur n'envoyant aucune donnée tant qu'il n'a pas reçu un NAK. Cela s'explique par la façon avec laquelle l'utilisateur interagissait avec la machine envoyant le fichier : l'utilisateur cherche le fichier sur la machine puis demande le transfert. Ensuite l'utilisateur doit exécuter une commande locale pour recevoir les données envoyées. Puisque ce délai entre la demande et l'exécution de la commande locale est inconnu, Xmodem attend jusqu'à 90 secondes que le destinataire demande l'envoi des paquets de données.