curl --request POST \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-API-Key: <api-key>' \
--data '{
"amount": "10"
}'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits"
payload = { "amount": "10" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-API-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({amount: '10'})
};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '10'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits"
payload := strings.NewReader("{\n \"amount\": \"10\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"10\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"10\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"walletId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"chainId": 1,
"source": "aave-v3",
"action": "deposit",
"amount": "10.0",
"status": "pending",
"transactions": [
{
"phase": "approval",
"hash": "<string>",
"nonce": 1,
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "signed",
"blockNumber": 123,
"blockHash": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"error": {
"code": "<string>",
"message": "<string>",
"reviewId": "<string>"
}
}{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"walletId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"chainId": 1,
"source": "aave-v3",
"action": "deposit",
"amount": "10.0",
"status": "pending",
"transactions": [
{
"phase": "approval",
"hash": "<string>",
"nonce": 1,
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "signed",
"blockNumber": 123,
"blockHash": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"error": {
"code": "<string>",
"message": "<string>",
"reviewId": "<string>"
}
}{
"code": "INVALID_REQUEST",
"message": "type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI"
}{
"code": "UNAUTHORIZED",
"message": "secret api key not provided"
}{
"code": "FORBIDDEN",
"message": "invalid secret api key"
}{
"code": "NOT_FOUND",
"message": "wallet not found"
}{
"code": "INVALID_REQUEST",
"message": "<string>",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"signedTransaction": "<string>"
}{
"code": "RATE_LIMITED",
"message": "Rate limit exceeded, try again shortly."
}{
"code": "INTERNAL_ERROR",
"message": "Internal Server Error"
}Deposit
Deposit USDC into Aave V3 and return an operation to track its progress.
curl --request POST \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-API-Key: <api-key>' \
--data '{
"amount": "10"
}'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits"
payload = { "amount": "10" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-API-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({amount: '10'})
};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '10'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits"
payload := strings.NewReader("{\n \"amount\": \"10\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"10\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/deposits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"10\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"walletId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"chainId": 1,
"source": "aave-v3",
"action": "deposit",
"amount": "10.0",
"status": "pending",
"transactions": [
{
"phase": "approval",
"hash": "<string>",
"nonce": 1,
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "signed",
"blockNumber": 123,
"blockHash": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"error": {
"code": "<string>",
"message": "<string>",
"reviewId": "<string>"
}
}{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"walletId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"chainId": 1,
"source": "aave-v3",
"action": "deposit",
"amount": "10.0",
"status": "pending",
"transactions": [
{
"phase": "approval",
"hash": "<string>",
"nonce": 1,
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "signed",
"blockNumber": 123,
"blockHash": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"error": {
"code": "<string>",
"message": "<string>",
"reviewId": "<string>"
}
}{
"code": "INVALID_REQUEST",
"message": "type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI"
}{
"code": "UNAUTHORIZED",
"message": "secret api key not provided"
}{
"code": "FORBIDDEN",
"message": "invalid secret api key"
}{
"code": "NOT_FOUND",
"message": "wallet not found"
}{
"code": "INVALID_REQUEST",
"message": "<string>",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"signedTransaction": "<string>"
}{
"code": "RATE_LIMITED",
"message": "Rate limit exceeded, try again shortly."
}{
"code": "INTERNAL_ERROR",
"message": "Internal Server Error"
}Authorizations
Your partner secret key (server-side only)
Headers
UUID for request tracing. Para returns one if omitted.
Required durable key scoped to your API partner across yield operations. Reuse the same key and normalized request to retrieve or explicitly retry its operation. A different wallet, chain, action or amount returns 409. Unlike generic POST idempotency, this key is retained with the operation rather than expiring after 24 hours.
1 - 256^[\x21-\x7e]+$Path Parameters
Wallet UUID. A malformed or inaccessible wallet ID returns 404.
"0a1b2c3d-4e5f-6789-abcd-ef0123456789"
Body
Native USDC on Ethereum mainnet (1) or Base mainnet (8453), or Aave test USDC on Sepolia (11155111). Base uses native USDC, not USDbC. Mainnet chain IDs use real funds regardless of API environment.
1, 8453, 11155111 Positive USDC amount in decimal units, not base units. At most six decimal places; zero is rejected.
85^(0|[1-9]\d*)(\.\d{1,6})?$"10"
Response
Existing terminal or paused operation.
1, 8453, 11155111 aave-v3 deposit, withdraw Normalized decimal USDC amount, or all for withdrawals.
"10.0"
pending work automatically retries recognized temporary RPC failures before signing and waits for another yield operation on the same wallet. submitted can mean signed and durably stored even when RPC acceptance is uncertain. confirmed requires two confirmations of the canonical block; this is not finality. failed means an on-chain revert or NONCE_CONSUMED; it does not guarantee that no funds moved. requires_action needs an explicit retry after correcting the issue.
pending, submitted, confirmed, failed, requires_action, cancelled Show child attributes
Show child attributes
Show child attributes
Show child attributes