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",
"chainId": "<string>",
"network": "SOLANA",
"to": "<string>",
"value": "<string>",
"tokenAddress": "<string>",
"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"
}{
"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.
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",
"chainId": "<string>",
"network": "SOLANA",
"to": "<string>",
"value": "<string>",
"tokenAddress": "<string>",
"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"
}{
"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 Lifecycle state. pending = row inserted, not yet broadcast. submitted = accepted by the RPC.
confirmed = included in a block, not reverted. reverted = included on-chain but execution
failed. failed = never broadcast, or broadcast was rejected by the RPC. submitted,
confirmed, reverted, and failed are terminal from the partner's POV except that
submitted may still transition via monitoring. Partners must treat unknown status values
as non-terminal — future versions may add finalized or replaced.
pending, submitted, confirmed, reverted, failed 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.
Transaction hash (present once submitted).
Block number as a decimal string (present when confirmed or reverted).
Stage at which the pipeline failed (when status = failed).
mpc_sign, signature_apply, signer_verify, broadcast, monitor_timeout Structured error code from the broadcast helper when the RPC rejected the transaction.
Truncated error message (max 512 chars).
Set when status first moves to submitted.
Set when status reaches a terminal value (confirmed, reverted, failed).