> ## Documentation Index
> Fetch the complete documentation index at: https://developer.uphold.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Buy and sell overview

> Let users buy crypto from a fiat payment method and sell crypto back to a fiat destination — card and bank, or APMs — in a single transaction.

**Buy** moves fiat into crypto in the user's Uphold account, sourced from a linked fiat external account (card or bank). In one transaction Uphold both takes the deposit and converts it to crypto — no need to run a separate deposit and trade, each with its own quote and commit.

**Sell** moves value out of the user's Uphold crypto account to a linked fiat external account — a card (via OCT) or a bank account — converting crypto to fiat and paying out.

## Key concepts

* **`cards` capability** — buying with a card deposit requires the user to have the `cards` capability enabled.
* **`trades` capability** — any buy or sell that involves converting one asset to another requires the `trades` capability. UK retail users face a 24-hour post-onboarding cooldown before trading is available.
* **`card-withdrawals` capability** — selling to a card via OCT requires the `card-withdrawals` capability.
* **3DS authorization** — card deposits may require user authorization via a 3DS challenge. When they do, the transaction response includes a `confirmationUrl` — redirect the user there to complete it.
* **`octSupport`** — selling to a card requires the destination external account to have `octSupport: "supported"`. Verify this when linking the payout card.

## Supported methods

| Direction | Source / destination | Notes                                                                                                                                                |
| --------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Buy       | Card                 | May require 3DS authorization                                                                                                                        |
| Buy       | Bank account         | SEPA / FPS / ACH / FedNow / wire — see [bank-transfer deposit guides](/developer-guides/bank-transfers/deposit/via-rest-api) for rail-specific setup |
| Buy       | APMs                 | PayPal — see [apm-transfer deposit guides](/developer-guides/apm-transfers/deposit/via-rest-api) for rail-specific setup                             |
| Sell      | Card (OCT)           | Requires `octSupport: "supported"` on the external account                                                                                           |
| Sell      | Bank account         | SEPA / FPS / ACH / FedNow — see [bank-transfer withdrawal guides](/developer-guides/bank-transfers/withdrawal/via-rest-api) for rail-specific setup  |
| Sell      | APMs                 | PayPal — see [apm-transfer withdrawal guides](/developer-guides/apm-transfers/withdrawal/via-rest-api) for rail-specific setup                       |

## Testing in sandbox

Use [test card numbers](/rest-apis/test-helpers) to simulate card deposits and payouts in the sandbox. Crypto deposits can be triggered via the [simulate crypto deposit](/rest-apis/core-api/accounts/test-helpers/simulate-crypto-deposit) endpoint.

## Start building

<CardGroup cols={2}>
  <Card title="Buy via API" icon="code" href="/developer-guides/buy-and-sell/buy/via-rest-api">
    Buy crypto for users from a fiat payment method — card and bank — in a single transaction.
  </Card>

  <Card title="Sell via API" icon="code" href="/developer-guides/buy-and-sell/sell/via-rest-api">
    Sell crypto and pay out to a fiat destination — card and bank — in a single transaction.
  </Card>
</CardGroup>
