A transaction is pre-staged by providing transaction preferences, such as a financial instrument, a transaction type, and a transaction amount, to a user device. The user device captures a visual code at a terminal, such as an ATM. The visual code includes terminal attributes, including a signed hash and call-back URI. The user device authenticates the visual code using the signed hash and requests the transaction through the issuer server. The issuer server creates and sends the card data to the call-back URI. The terminal uses the card data to create a transaction request it routes to through its acquirer server.