> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chipipay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# getTransactionStatus

> Fetches the on-chain status of a transaction from StarkNet. Works with Vue, Angular, Svelte, and vanilla JavaScript.

## Usage

```typescript theme={null}
const bearerToken = await getBearerToken();
const status = await browserClient.getTransactionStatus("0x...", bearerToken);
```

### Parameters

* `hash` (string): Transaction hash (`0x...`)
* `bearerToken` (string): Bearer token for authentication

### Return Value

Returns a `Promise<TransactionStatusResponse>` with:

* `transactionHash` (string): Transaction hash
* `status` (OnChainTxStatus): `RECEIVED`, `PENDING`, `ACCEPTED_ON_L2`, `ACCEPTED_ON_L1`, `REJECTED`, `REVERTED`, or `NOT_RECEIVED`
* `blockNumber` (number, optional): Block number if included in a block
* `revertReason` (string, optional): Reason if `REVERTED`

## Example Implementation

```typescript theme={null}
import { ChipiBrowserSDK } from "@chipi-stack/backend";

const browserClient = new ChipiBrowserSDK({
  apiPublicKey: process.env.CHIPI_PUBLIC_KEY,
});

async function pollStatus(txHash: string) {
  const terminal = ["ACCEPTED_ON_L1", "REJECTED", "REVERTED", "NOT_RECEIVED"];
  const bearerToken = await getBearerToken();
  const MAX_RETRIES = 60; // 60 retries * 3s = 3 minutes max

  for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
    const { status, revertReason } = await browserClient.getTransactionStatus(
      txHash,
      bearerToken,
    );

    console.log(`Status: ${status} (attempt ${attempt + 1}/${MAX_RETRIES})`);

    if (terminal.includes(status)) {
      if (status === "REVERTED") console.error("Reverted:", revertReason);
      return status;
    }

    await new Promise((r) => setTimeout(r, 3000));
  }

  throw new Error(`Transaction ${txHash} did not reach terminal status after ${MAX_RETRIES} attempts`);
}
```
