<!-- source: https://secondlayer.tools/docs/api-reference#get-tip -->

## Current chain tip

`GET /v1/streams/tip`

The newest canonical block this instance has indexed, the finality boundary, and how far back this caller can seek. Never cached.

### Query parameters

| Name | Type | Description |
| --- | --- | --- |
| `chain` | enum | `stacks` (default) is the existing Stacks feed, byte-identical to before. `bitcoin` serves Runes events (rune_etch, rune_mint, rune_transfer, rune_burn — see the RuneStreamsEvent schema) on their own cursor space: a bitcoin cursor only resumes with chain=bitcoin. Stacks-only filters (contract_id, sender, recipient, asset_identifier, filters, clock) 400 on chain=bitcoin; rune and address are bitcoin-only. Values: `stacks`, `bitcoin`. |

### Returns

One `StreamsTip` object.

### Responses

- `200` The tip. chain=bitcoin returns a StreamsBitcoinTip (no burn-chain or retention fields) instead.
- `401` This bind requires the instance token, and it was missing or wrong
- `429` Rate limited on the hosted API (50/s per IP without a key, 10/s on a free key). Self-hosted instances do not throttle Streams. Retry after `Retry-After` seconds
- `503` No canonical block indexed yet (`CHAIN_DATA_UNAVAILABLE`). Wait for the indexer to ingest its first block

### Example

```bash
curl https://api.secondlayer.tools/v1/streams/tip \
  -H "Authorization: Bearer $SECONDLAYER_API_KEY"
```

```json
{
  "block_height": 9048928,
  "block_hash": "0xe79ae38b78b37ad1f5d16c7afd04b4e202efe8d983d981803b785ca64257933f",
  "burn_block_height": 968284,
  "finalized_height": 9048671,
  "lag_seconds": 4,
  "oldest_seekable_height": null,
  "oldest_cursor": null
}
```
