Skip to main content
POST
/
core
/
transactions
/
quote
curl --request POST \
  --url https://api.enterprise.sandbox.uphold.com/core/transactions/quote \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "origin": {
    "type": "account",
    "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9"
  },
  "destination": {
    "type": "account",
    "id": "555a99a1-620d-4431-a0ac-b43e1aad2bdc"
  },
  "denomination": {
    "asset": "GBP",
    "amount": "100.00",
    "target": "origin"
  }
}
'
{
  "quote": {
    "id": "623000c8-9bdf-4a2b-aa3d-6a6b44a7f6a0",
    "origin": {
      "amount": "100.00",
      "asset": "GBP",
      "rate": "47619.04761904762",
      "node": {
        "type": "account",
        "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "destination": {
      "amount": "0.0021",
      "asset": "BTC",
      "rate": "0.000021",
      "node": {
        "type": "account",
        "id": "555a99a1-620d-4431-a0ac-b43e1aad2bdc",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "denomination": {
      "amount": "100.00",
      "asset": "GBP",
      "target": "origin",
      "rate": "1"
    },
    "fees": [],
    "requirements": [],
    "expiresAt": "2024-07-24T15:22:39.000Z"
  }
}

Origin and destination

The origin and destination objects identify the source and destination of funds respectively for the transaction. Read more about the Anatomy of a quote request to understand the different types of nodes you can use as origin and destination. Refer to the API spec below to see how each node type is expressed in the request.

Denomination

The denomination object defines what is being moved, how much, and which side of the trade the amount applies to precisely.
  • asset: The currency or asset in which amount is expressed — for example, GBP, USD, or BTC. Does not need to match the asset of either account; Uphold will convert as needed.
  • amount: The amount to transfer, expressed as a decimal string (e.g. "100.00").
  • target: Controls which side of the trade receives the exact amount:
    • origin — Debits exactly amount from the origin. Fees are deducted before the destination receives funds.
    • destination — Credits exactly amount to the destination. Fees are added on top of what is debited from the origin.

Example: How target affects fee handling

Consider a trade of 500 GBP to BTC with a 2% fee:
TargetDebited from originCredited to destination
originExactly 500 GBPBTC equivalent of 490 GBP (after 10 GBP fee)
destination510 GBP (500 + 10 GBP fee)BTC equivalent of exactly 500 GBP
Use origin when you want to control exactly how much leaves the sender. Use destination when you want to control exactly how much arrives for the recipient. For a more comprehensive explanation of the denomination concept, see the Core Concepts page.

TTL

There are cases in which the default TTL may not be sufficient, such as when you are performing deposits or withdrawals through your own rails (e.g.: your own card processor). In such cases, you want a quote to remain valid for long enough to allow the user to complete the transaction on your side before it expires on our side. The ttl field allows you to extend the validity of the quote to accommodate those cases. When omitted, the platform applies a default TTL based on the transaction type.
This feature must be enabled for your organization. Contact your Account Manager to request access and agree on the maximum allowed TTL.
The expiresAt field in the response indicates the exact time when the quote will expire, which takes into account the default TTL or the custom ttl provided in the request. Use this field to drive quote refresh logic in your UI — schedule the next refresh slightly before this time (e.g. a few seconds earlier) to account for network and infrastructure latency, ensuring the user always sees a valid quote.

Authorizations

Authorization
string
header
required

OAuth 2.0 authentication.

Body

application/json
origin
Account · object
required
destination
Account · object
required
denomination
object
required
ttl
integer

The time-to-live for the quote in milliseconds.

Required range: x >= 1

Response

Quote created.

quote
object
required