Initiating a quote-based transaction
Most transactions are RFQ (Request for Quote) based. This applies to:- Withdrawals: Moving funds out to external accounts or crypto addresses.
- Trades: Converting between different assets.
- Transfers: Moving funds between accounts of the same asset.
- Pull deposits: Deposits where you initiate the transaction (e.g., credit or debit card deposits).
Anatomy of a quote request
The Create Quote request has three fundamental properties:origin: The origin node of the transaction.destination: The destination node of the transaction.denomination: The denomination of the transaction.
origin and destination nodes can be of various types:
Account
Account
Account nodes refer to the user’s accounts, which are containers of funds of a given asset, stored in Uphold.
External Account
External Account
External accounts refer to the user’s external accounts, which allow users to deposit and withdraw funds associated with an external source.
Crypto Address
Crypto Address
Crypto addresses enable the use of crypto wallet addresses as transaction nodes within the platform.Crypto transactions can be executed in different modes depending on the destination and environment. Most transactions are processed on-chain, directly on the blockchain network. However, when both parties are Uphold users, crypto withdrawals can be processed off-chain within Uphold’s infrastructure, eliminating network fees and reducing processing time.For development and testing purposes, transactions can be simulated without affecting actual blockchain state (user balances will be affected though). The execution mode applied to each transaction is indicated by the
execution.mode property in the crypto address node of the API response.Requirements
Some transactions need additional information before they can be executed. When you create a quote, the response includes arequirements array that tells you what extra information is needed — if it’s empty, no extra information is needed.
Check out the Quote Requirements flow for a detailed walkthrough.
Related flows
Check out the following flows for more information on handling quote-based transactions.Initiating an external transaction
Some deposits (push deposits) are initiated externally when funds arrive from outside sources:- Crypto deposits: Occur when crypto is sent to a deposit address generated via Set Up Account Deposit Method.
- Bank deposits: Occur when funds are sent to the deposit details (account number, sort code, iban, etc.) generated via Set Up Account Deposit Method.
Requests for information (RFIs)
When a transaction is placed on hold with reasonpending-requests-for-information, that means it requires additional information to proceed. The pending requests for information (RFIs) can be managed using the Requests for Information endpoints.
Check out the Transaction RFIs flow for a detailed walkthrough.
Related flows
Check out the following flows for more information on handling external transactions.Transaction lifecycle
Once a transaction is created, it goes through a series of statuses:processing: The transaction is being processed. This is the initial status of a transaction.on-hold: The transaction is on hold and requires further action by Uphold agents. Once the hold is resolved, the transaction will continue processing.completed: The transaction has been successfully completed.failed: The transaction has failed.
Transaction types
Transactions do not have a type per se, but they can be classified based on the nodes involved in the transaction. The following are the most common types of transactions:- Deposit: A transaction in which the origin is external, such as an external account or a crypto address.
- Withdrawal: A transaction in which the destination is external, such as an external account or a crypto address.
- Trade: A transaction in which the origin and destination are accounts of different assets.
- Transfer: A transaction in which the origin and destination are accounts of the same asset.
Relation with capabilities
A transaction can require one or more capabilities to be in a valid state:trades: Required when the underlying origin and destination assets are different.crypto-deposits: Required when the underlying origin is a crypto address.bank-deposits: Required when the underlying origin is an external account of typebank.deposits: Required when the underlying origin is external, such as an external account of typecard.receives: Required when the user receives funds from another user.sends: Required when the user sends funds to another user.crypto-withdrawals: Required when the underlying destination network is of typecrypto.bank-withdrawals: Required when the underlying destination network is of typebank.card-withdrawals: Required when the underlying destination network is of typecard.