getSignatureStatuses

Returns the statuses of a list of transaction signatures. This method is the primary way to check whether transactions have been confirmed, finalized, or encountered errors. It is essential for transaction confirmation flows, retry logic, and monitoring the status of submitted transactions. You can query up to 256 signatures in a single request and optionally search the full transaction history.

Parameters

#TypeRequiredDescription
1array[string]YesArray of base-58 encoded transaction signatures to query (max 256)
2objectNoConfiguration object

Configuration object fields:

FieldTypeDescription
searchTransactionHistoryboolIf true, search the full ledger history (not just recent slots). Default false

Response

Returns an RpcResponse with an array of status objects (or null):

FieldTypeDescription
context.slotu64The slot at which the statuses were evaluated
value[].slotu64The slot the transaction was processed in
value[].confirmations`usizenull`
value[].err`objectnull`
value[].confirmationStatus`stringnull`

Code Examples

cURL

1curl http://[IP_ADDRESS]:[PORT] -X POST -H "Content-Type: application/json" -d '{
2  "jsonrpc": "2.0",
3  "id": 1,
4  "method": "getSignatureStatuses",
5  "params": [
6    [
7      "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
8    ],
9    { "searchTransactionHistory": true }
10  ]
11}'

TypeScript

1const response = await fetch("http://[IP_ADDRESS]:[PORT]", {
2  method: "POST",
3  headers: { "Content-Type": "application/json" },
4  body: JSON.stringify({
5    jsonrpc: "2.0",
6    id: 1,
7    method: "getSignatureStatuses",
8    params: [
9      [
10        "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
11      ],
12      { searchTransactionHistory: true }
13    ]
14  }),
15});
16const { result } = await response.json();
17result.value.forEach((s, i) => console.log(`Sig ${i}: ${s?.confirmationStatus ?? "not found"}`));

Python

1import requests
2
3response = requests.post("http://[IP_ADDRESS]:[PORT]", json={
4    "jsonrpc": "2.0",
5    "id": 1,
6    "method": "getSignatureStatuses",
7    "params": [
8        [
9            "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
10        ],
11        {"searchTransactionHistory": True}
12    ]
13})
14result = response.json()["result"]
15for i, s in enumerate(result['value']):
16    print(f"Sig {i}: {s['confirmationStatus'] if s else 'not found'}")

Rust

1use reqwest::Client;
2use serde_json::json;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let client = Client::new();
7    let res = client.post("http://[IP_ADDRESS]:[PORT]")
8        .json(&json!({
9            "jsonrpc": "2.0",
10            "id": 1,
11            "method": "getSignatureStatuses",
12            "params": [
13                [
14                "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
15            ],
16                {"searchTransactionHistory": true}
17            ]
18        }))
19        .send().await?
20        .text().await?;
21    println!("{}", res);
22    Ok(())
23}

Example Response

1{
2  "jsonrpc": "2.0",
3  "result": {
4    "context": { "slot": 166974442 },
5    "value": [
6      {
7        "slot": 166974400,
8        "confirmations": null,
9        "err": null,
10        "confirmationStatus": "finalized"
11      }
12    ]
13  },
14  "id": 1
15}