Circle APIs enable you to easily transfer USDC funds from one blockchain to another. Circle uses a "private bridge" approach to act as a counter-party to the swap operation. Result: funds being swapped are temporarily kept in Circle's custody. This process is fully automated and involves no human intervention, so you don’t need to manually interact with both blockchains as usual.
In this example, we'll transfer USDC funds from the **Ethereum** blockchain to the **Algorand** blockchain. However, it makes no difference which <<glossary:supported chains>> you decide to use or in which order.
Do NOT send real / live USDC to addresses generated in the sandbox environment, as your funds might be permanently lost.
# 1. Get a sandbox API key
If you don't yet have an API key in the sandbox environment, take a few moments to [create a sandbox account](🔗). (Learn more about Circle’s sandbox and APIs [here](🔗).
# 2. Receive USDC from the Ethereum blockchain
You can transfer USDC from an external wallet on any of the [supported chains](🔗) into a Circle wallet you control.
Start by transferring USDC from an external **Ethereum** wallet.
## Create a Wallet
First, use the command below to create a new wallet to receive the external funds via the [create wallet endpoint](🔗). Be sure to create your own [idempotency key](🔗).
The response should look like this:
## Create a Deposit Address
Because wallets are not tied to specific blockchains, you can generate deposit addresses for wallets, allowing you to receive transfers from different chains.
To create a new **Ethereum** deposit address, use the [generate new address endpoint](🔗). To ensure the API generates a USDC deposit address for the Ethereum blockchain, specify the origin`currency
` (`USD
`) and `chain
` (`ETH
`) attributes. Change the chain attribute to create deposit addresses on other <<glossary:supported chains>> .
Create a deposit address for your wallet using the command below.
The response should look like this:
`
addressTag
` for StellarFor blockchains that support destination tags or memos, you'll see an additional `
addressTag
` attribute returned with the deposit address. When present, this value is required when depositing USDC.
## Transfer USDC
sandbox environment is connected to the Ethereum Goerli testing network, so you can send USDC from a Goerli wallet into your Circle hosted wallet.
Now transfer the funds from the Ethereum blockchain. Circle's [sandbox environment](🔗) is connected to the [Ethereum Goerli testing network](🔗), so you can send USDC from a Goerli wallet into your Circle hosted wallet.
Visit [USDC on Testing Networks](🔗) to learn more about support on other blockchains.
If you need USDC to send, you can obtain some USDC on the Goerli network for testing by using a [**USDC faucet**](🔗). Go to [usdcfaucet.com](🔗) and make sure you choose the **Goerli** button. Paste the deposit (wallet) address you created above and hit Submit.
Be very careful not to miss any characters in the deposit address.
Monitor the transfer on the blockchain by using the Goerli Etherscan link provided by the faucet. It should look like this:
[`https://goerli.etherscan.io/tx/0x8d17944abfaaac026...43455dcc05ea2ccd
`](🔗).
Alternately, you can obtain USDC by [funding a test wallet with a payment](🔗) and then transferring USDC out of that wallet.
# 3. Check the Status of the Transfer
Use the [retrieve transfers endpoint](🔗) (as in the command below) to find transfers that are routed to to the wallet you created earlier.
The response should look like this:
You can look up the `transactionHash
` on [Etherscan's tracker on Goerli](🔗).
At first, the status is shown as running because the transaction has been recently initiated. In a few minutes, once the required 30 block confirmations have been completed, the status changes to complete. At that point Circle credits the receiving wallet with the value of the transfer.
At first, the `status
` is shown as `running
` because the transaction has been recently initiated. In a few minutes, once the required 30 block confirmations have been completed, the`status
` changes to `complete
`. At that point Circle credits the receiving wallet with the value of the transfer.
Refer to our [confirmations guide](🔗) to learn about block confirmation requirements for different chains.
You have successfully received USDC from the Ethereum blockchain using the Circle Wallets API.
# 4. Send USDC to the Algorand blockchain
After the receiving portion of the swap settles, you can initiate the second portion: sending USDC funds to an address on a different blockchain using the [Create a transfer](🔗) endpoint.
Make sure you have an Algorand blockchain address to send to as the `
destination
`.Circle's [sandbox environment](🔗) is connected to the [Algorand TestNet](🔗), so the destination blockchain address has to be a valid Algorand TestNet address.
Algorand Wallet TestNet Account
Download the [Algorand Wallet](🔗). Under Settings > Node Settings, select TestNet. From the main wallet screen, note your account address.
Your Algorand TestNet wallet address should look like this:`
BL27TI3CYMFX5URLYNBJJZGV4ABRYJJHBMLRR5OYSVPUVDIUAF66IR4COA
`.
Opt-in to Accept the USDC Asset
Due to [Algorand Standard Assets](🔗) spam protection, you must opt in to accept new assets such as USDC. To do so, select Add New Asset, then search for "USDC" (the USDC asset ID on Algorand TestNet is [10458941](🔗)\`).
ALGO Dispenser (Faucet)
To complete the opt-in, you must pay for a transaction. Obtain TestNet ALGO tokens on from the [TestNet ALGO Dispenser (Faucet)](🔗).
To send funds to the external Algorand wallet, use the [create wallet transfer endpoint](🔗). Specify the `currency
` and `chain
` attributes that match the destination blockchain. Create a USDC transfer to an Algorand blockchain address by using the command below.
`
addressTag
` for StellarWhen you create a transfer on chains like Stellar that support destination tags or memos, you can use the optional`
addressTag
` parameter to make sure your send is received correctly.
Flow Vaults
Prior to sending USDC to a wallet on the Flow network, make sure the wallet address is set up to receive a USDC transfer. In most cases, this involves selecting an option in the wallet’s UI to “add USDC.” See [Flow documentation](🔗) for details.
The response should look like this:
# 5. Check the Status of the Transfer
Use the [get transfer endpoint](🔗) to retrieve details about the status of the transaction. You can use it as shown in the command below.
The response should look like this:
Algorand transactions confirm in under 5 seconds, so your transfer`status
` should quickly change to `complete
`. See [Blockchain Confirmations](🔗) to find transaction times for all chains.
# 6. Ready for the next step?
After experimenting with our APIs, you’ll want to start building test integrations in sandbox prior to moving into production. Start by applying for a [applying for a Circle Account](🔗). We'll be happy to walk you through the next steps.