curl --request POST \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reviewId": "<string>"
}
'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume"
payload = { "reviewId": "<string>" }
headers = {
"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: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reviewId: '<string>'})
};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume', 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}/transactions/{transactionId}/resume",
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([
'reviewId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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}/transactions/{transactionId}/resume"
payload := strings.NewReader("{\n \"reviewId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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}/transactions/{transactionId}/resume")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reviewId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reviewId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"executionMode": "sponsored",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"userOperationHash": "<string>",
"stage": "requires_action",
"reviewId": "<string>",
"actualGasCost": "<string>",
"txHash": "<string>"
}{
"code": "INVALID_REQUEST",
"message": "type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI"
}{
"code": "UNAUTHORIZED",
"message": "secret api key not provided"
}{
"code": "INVALID_REQUEST",
"message": "<string>",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"signedTransaction": "<string>"
}{
"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"
}{
"code": "SPONSORSHIP_UNAVAILABLE",
"message": "Gas sponsorship is unavailable"
}Resume Sponsored Transaction
Gas sponsorship pilot only. Continue an existing operation after its policy review
is approved. Current partner and wallet access are required. Supply the applicable
reviewId; the original transfer intent cannot be changed through this endpoint.
Calling transfer again with its original idempotency key only retrieves the
operation and does not trigger continuation. A later step can require another review.
202 accepts continuation; policy and per-operation gas-cap checks run asynchronously.
curl --request POST \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reviewId": "<string>"
}
'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume"
payload = { "reviewId": "<string>" }
headers = {
"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: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reviewId: '<string>'})
};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume', 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}/transactions/{transactionId}/resume",
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([
'reviewId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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}/transactions/{transactionId}/resume"
payload := strings.NewReader("{\n \"reviewId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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}/transactions/{transactionId}/resume")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reviewId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}/resume")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reviewId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"executionMode": "sponsored",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"userOperationHash": "<string>",
"stage": "requires_action",
"reviewId": "<string>",
"actualGasCost": "<string>",
"txHash": "<string>"
}{
"code": "INVALID_REQUEST",
"message": "type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI"
}{
"code": "UNAUTHORIZED",
"message": "secret api key not provided"
}{
"code": "INVALID_REQUEST",
"message": "<string>",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"signedTransaction": "<string>"
}{
"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"
}{
"code": "SPONSORSHIP_UNAVAILABLE",
"message": "Gas sponsorship is unavailable"
}Authorizations
Your partner secret key (server-side only)
Headers
UUID for request tracing. Para returns one if omitted.
Path Parameters
Wallet UUID. A malformed or inaccessible wallet ID returns 404.
"0a1b2c3d-4e5f-6789-abcd-ef0123456789"
Tracking ID of the sponsored transfer awaiting review.
Body
Approved review for this operation; does not replace its original transfer intent.
1Response
Sponsored operation continued or awaiting further review
sponsored Durable operation ID for transaction lookup and review continuation.
pending, submitted, confirmed, reverted, failed ERC-4337 operation hash. This is not an on-chain transaction hash.
requires_action needs policy review; submission_unknown means submission
may have happened; included awaits receipt verification. delivery_unverified means
an included operation has unresolved token-delivery evidence. These stages are
nonterminal; do not resend the transfer with a new key.
requires_action, preparing, signed, submission_unknown, included, delivery_unverified Applicable policy review ID; use it with the explicit resume endpoint after approval.
Settled gas cost for this individual operation in native-token base units, including included reverts. Omitted before settlement. Parse as an integer string or bigint, not a floating-point number.
^[0-9]+$On-chain transaction hash, present only after inclusion. Not the UserOperation hash.