---
title: "Get alert by ID"
method: GET
path: "/v4/subscription/{id}"
tags: ["Subscriptions"]
---

# Get alert by ID

`GET /v4/subscription/{id}`

## Request

- Base URL: `https://api.tatum.io`
- URL: `https://api.tatum.io/v4/subscription/{id}`
- Auth: API key in header `x-api-key`

/v4/subscription/{id}

Get alert by ID.

## Path parameters

- `id` string, required

## Response `200`

OK

- SubscriptionV4
  - `type` 'ADDRESS_EVENT' | 'CONTRACT_ADDRESS_LOG_EVENT' | 'INCOMING_NATIVE_TX' | 'OUTGOING_NATIVE_TX' | 'OUTGOING_FAILED_TX' | 'PAID_FEE' | 'INCOMING_INTERNAL_TX' | 'OUTGOING_INTERNAL_TX' | 'INCOMING_FUNGIBLE_TX' | 'OUTGOING_FUNGIBLE_TX' | 'INCOMING_NFT_TX' | 'OUTGOING_NFT_TX' | 'INCOMING_MULTITOKEN_TX' | 'OUTGOING_MULTITOKEN_TX' | 'MINT_TX' | 'BURN_TX' | 'SWAP_TX' | 'FAILED_TXS_PER_BLOCK' | 'PRICE_CHANGE', required: Type of the alert.
  - `id` string, required: ID of the alert
  - `timestamp` number: Alert creation time
  - `attr` SubscriptionV4Attributes: Additional attributes based on the alert type.
    - `chain` 'algorand-mainnet' | 'algorand-testnet' | 'arbitrum-nova-mainnet' | 'arbitrum-one-mainnet' | 'arbitrum-one-sepolia' | 'aurora-mainnet' | 'aurora-testnet' | 'avalanche-mainnet' | 'base-mainnet' | 'base-sepolia' | 'berachain-mainnet' | 'bitcoin-cash-mainnet' | 'bitcoin-cash-testnet' | 'bitcoin-mainnet' | 'bitcoin-testnet' | 'bitcoin-testnet4' | 'bsc-mainnet' | 'bsc-testnet' | 'cardano-mainnet' | 'cardano-preprod' | 'casper-mainnet' | 'celo-mainnet' | 'celo-sepolia' | 'chiliz-mainnet' | 'chiliz-testnet' | 'cosmos-mainnet' | 'cosmos-testnet' | 'cronos-mainnet' | 'cronos-testnet' | 'dogecoin-mainnet' | 'dogecoin-testnet' | 'eos-jungle' | 'eos-mainnet' | 'ethereum-classic-mainnet' | 'ethereum-classic-testnet' | 'ethereum-hoodi' | 'ethereum-mainnet' | 'ethereum-sepolia' | 'fantom-mainnet' | 'fantom-testnet' | 'flare-coston' | 'flare-coston2' | 'flare-mainnet' | 'flare-songbird' | 'gnosis-mainnet' | 'gnosis-testnet' | 'haqq-mainnet' | 'haqq-testnet' | 'harmony-mainnet-s0' | 'harmony-testnet-s0' | 'iota-mainnet' | 'iota-testnet' | 'kaia-kairos' | 'kaia-mainnet' | 'kucoin-mainnet' | 'kucoin-testnet' | 'kusama-mainnet' | 'lisk-mainnet' | 'lisk-sepolia' | 'litecoin-mainnet' | 'litecoin-testnet' | 'mocachain-devnet' | 'monad-testnet' | 'multiversx-mainnet' | 'multiversx-testnet' | 'near-mainnet' | 'near-testnet' | 'oasis-emerald' | 'oasis-mainnet' | 'optimism-mainnet' | 'polkadot-mainnet' | 'polkadot-westend' | 'polygon-amoy' | 'polygon-mainnet' | 'ripple-mainnet' | 'ripple-testnet' | 'robinhood-mainnet' | 'rootstock-mainnet' | 'rootstock-testnet' | 'solana-devnet' | 'solana-mainnet' | 'sonic-mainnet' | 'sonic-testnet' | 'stellar-mainnet' | 'stellar-testnet' | 'sui-mainnet' | 'sui-testnet' | 'tezos-ghostnet' | 'tezos-mainnet' | 'ton-mainnet' | 'ton-testnet' | 'tron-mainnet' | 'tron-shasta' | 'unichain-mainnet' | 'unichain-sepolia' | 'vechain-mainnet' | 'vechain-testnet' | 'xdc-mainnet' | 'xdc-testnet' | 'zcash-mainnet' | 'zcash-testnet' | 'zilliqa-mainnet' | 'zilliqa-testnet' | 'zksync-mainnet' | 'zksync-sepolia': Tatum chain identifier.
    - `symbol` string: Ticker of the token to watch. Price alerts are chain-agnostic and USDT-quoted — the tracked pair is always `{symbol}USDT`. Must be one of the symbols supported by the Tatum pricing endpoints (the same set accepted by GET /v4/data/price-change).
    - `frequency` 'ONE_TIME' | 'RECURRING': `ONE_TIME` — fires once, then the alert becomes `TRIGGERED` (terminal, immutable, excluded from `?status=active` and `?status=paused`). `RECURRING` — keeps firing; how it re-arms depends on `alertCondition`.
    - `direction` 'UP' | 'DOWN' | 'BOTH': Which price movements fire the alert. `BOTH` watches both directions.
    - `alertCondition` union: Either `atPrice`, or `pctChange` together with `candleTimeFrame`.
      - PriceChangeAtPriceCondition: Fires when the price reaches an absolute level. ONE_TIME fires on the first touch of the level (intraminute highs/lows count) coming from the side the price was on at creation. RECURRING fires on EVERY 1-minute close across the level (intraminute wicks don't fire — anti-spam) and re-arms when the price closes back on the other side. A level already breached at creation stays quiet until the price crosses back over it.
        - `atPrice` number, required: Absolute price level to watch, quoted in USDT.
      - PriceChangePercentCondition: Fires when the price moves `pctChange` percent from the reference set by `candleTimeFrame` (intraminute highs/lows count). Both fields are required together.
        - `pctChange` number, required: Move size in percent (> 0). Must be below 100 when `direction` includes DOWN — a ≥100% drop cannot occur.
        - `candleTimeFrame` '1m' | '1h' | '1d' | '1w', required: What a `pctChange` move is measured from. `1m` — the price at creation; a RECURRING alert re-bases to the price at every fire and then follows the lowest price (for UP) / highest price (for DOWN) since, so each fire needs a fresh full move. `1h`/`1d`/`1w` — the opening price of the current candle (UTC: top of the hour / 00:00 / Monday 00:00); fires at most once per direction per candle.
  - `referencePrice` string: PRICE_CHANGE only: what the next move is measured from. `atPrice` — the watched level; `pctChange` with `1m` — the price at creation, or for RECURRING alerts the price at the last fire; `pctChange` with `1h`/`1d`/`1w` — the current candle's opening price.
  - `periodStart` number: PRICE_CHANGE with `candleTimeFrame` 1h/1d/1w only: start (milliseconds, UTC) of the candle the current reference price belongs to.
  - `status` 'ACTIVE' | 'PAUSED' | 'TRIGGERED': PRICE_CHANGE only: lifecycle state. TRIGGERED — a ONE_TIME alert that has already fired; terminal and immutable.
  - `paused` number: PRICE_CHANGE only: timestamp (ms) since when the alert is paused.
  - `triggeredAt` number: PRICE_CHANGE only: timestamp (ms) when a ONE_TIME alert fired.
  - `note` string: Any other relevant information such as important updates

## Other responses

- `400`: Bad Request
- `401`: Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
- `500`: Internal server error. There was an error on the server during the processing of the request.

---

[API](https://skmtc.dev/tatum/apis/blockchain-notifications.md) - [All operations](https://skmtc.dev/tatum/apis/blockchain-notifications/llms.txt) - [OpenAPI document](https://skmtc.dev/tatum/apis/blockchain-notifications/revisions/925883906ce5?raw)
