curl --request GET \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"transactionId": "550e8400-e29b-41d4-a716-446655440000",
"walletId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"walletType": "EVM",
"intentKind": "transfer",
"status": "pending",
"createdAt": "2023-11-07T05:31:56Z",
"executionMode": "legacy",
"chainId": "<string>",
"network": "SOLANA",
"to": "<string>",
"value": "<string>",
"tokenAddress": "<string>",
"monitoring": {
"state": "active",
"timedOutAt": "2023-11-07T05:31:56Z",
"lastCheckedAt": "2023-11-07T05:31:56Z",
"reason": "pending",
"chainOutcome": "success",
"winningHash": "<string>",
"winningStatus": "confirmed"
},
"hash": "<string>",
"blockNumber": "<string>",
"blockHash": "<string>",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"failureMessage": "<string>",
"submittedAt": "2023-11-07T05:31:56Z",
"resolvedAt": "2023-11-07T05:31:56Z",
"userOperationHash": "<string>",
"stage": "requires_action",
"reviewId": "<string>",
"actualGasCost": "<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": "RATE_LIMITED",
"message": "Rate limit exceeded, try again shortly."
}{
"code": "INTERNAL_ERROR",
"message": "Internal Server Error"
}Get Transaction
Look up a single persisted REST transaction record by id. Returns 404 with an identical
body for records that do not exist or that belong to a different partner.
Current wallet access is required. Sponsored operations include executionMode,
stage, and available review, UserOperation and gas-cost fields. Poll this record
for the final outcome; hash always means the on-chain transaction hash.
This lookup reflects the latest persisted outcome. An idempotent POST replay may return an older
cached response, including a historical monitoring-timeout error; it does not refresh status.
curl --request GET \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/transactions/{transactionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"transactionId": "550e8400-e29b-41d4-a716-446655440000",
"walletId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"walletType": "EVM",
"intentKind": "transfer",
"status": "pending",
"createdAt": "2023-11-07T05:31:56Z",
"executionMode": "legacy",
"chainId": "<string>",
"network": "SOLANA",
"to": "<string>",
"value": "<string>",
"tokenAddress": "<string>",
"monitoring": {
"state": "active",
"timedOutAt": "2023-11-07T05:31:56Z",
"lastCheckedAt": "2023-11-07T05:31:56Z",
"reason": "pending",
"chainOutcome": "success",
"winningHash": "<string>",
"winningStatus": "confirmed"
},
"hash": "<string>",
"blockNumber": "<string>",
"blockHash": "<string>",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"failureMessage": "<string>",
"submittedAt": "2023-11-07T05:31:56Z",
"resolvedAt": "2023-11-07T05:31:56Z",
"userOperationHash": "<string>",
"stage": "requires_action",
"reviewId": "<string>",
"actualGasCost": "<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": "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.
Path Parameters
Wallet UUID. A malformed or inaccessible wallet ID returns 404.
"0a1b2c3d-4e5f-6789-abcd-ef0123456789"
Transaction record id returned by POST /transfer or POST /sign-transaction with broadcast: true.
Response
Transaction record
"550e8400-e29b-41d4-a716-446655440000"
EVM, SOLANA REST operation that created the record.
transfer, sign_transaction, yield pending and submitted are nonterminal. confirmed, reverted and failed
are terminal results; treat unknown future values as nonterminal.
For sponsored operations, inclusion is submitted with stage included until
receipt verification. Successful execution with verified token delivery is confirmed;
an included execution revert is reverted. Unknown submission stays nonterminal,
and unresolved token evidence remains pending with stage delivery_unverified.
Legacy EVM transfer and sign_transaction broadcasts remain submitted during durable
reconciliation after the 30-minute active window. Receipt resolution requires canonical
block identity, at least two confirmations, and finalized-block evidence. Timeout, RPC errors,
and nonce consumption without an identified winner are unresolved, not payment failure.
Solana broadcasts require finalized signature status and also retain unresolved monitoring context.
An identified same-nonce winner leaves the original failed with REPLACED or CANCELLED;
inspect monitoring for the actual winner's outcome. Historical failed / monitor_timeout
records remain uncertain until chain-backed reconciliation corrects them.
pending, submitted, confirmed, reverted, failed Sponsored records use sponsored; legacy responses may omit this field.
legacy, sponsored EVM chain ID (EVM records only).
Solana network (Solana records only).
SOLANA, SOLANA_DEVNET Destination address. Absent for Solana sign_transaction records because Para does not decode arbitrary Solana instructions.
Transfer amount in smallest unit (wei / lamports / token smallest unit), or EVM sign_transaction value when supplied.
Token contract (ERC-20 / SPL mint) address if a token transfer, else absent. Always absent for sign_transaction records.
Optional durable monitoring metadata for legacy EVM and Solana broadcasts. Active monitoring hands off after 30 minutes without changing unresolved chain outcome to failed. After 24 hours, escalation retains unresolved state and checks continue with backoff capped at one hour. Unsupported finality evidence or missing legacy context remains unresolved and requires operational follow-up.
Show child attributes
Show child attributes
Original on-chain transaction hash. An identified same-nonce winner is exposed separately in monitoring.winningHash. Sponsored operations expose this after inclusion; never a UserOperation hash.
Block number as a decimal string (present when confirmed or reverted).
Stage at which the pipeline failed. monitor_timeout appears only on historical records and does not establish chain failure.
mpc_sign, signature_apply, signer_verify, broadcast, monitor_timeout Structured broadcast error code, or REPLACED / CANCELLED when a verified same-nonce winner superseded the original transaction.
Truncated error message (max 512 chars).
Set when status first moves to submitted.
Set when status reaches a terminal value (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]+$