# Blocks stream · API reference · Femtos

> Each new HyperEVM block header, small and big blocks, from our node. WebSocket channels elysium.blocks · hyperevm.blocks on Elysium and HyperEVM: parameters, response fields and a live call per layer.

- Base URL: `https://api.femtos.xyz/v1` (REST) · `wss://api.femtos.xyz/v1/ws` (WebSocket) · MCP: `https://api.femtos.xyz/mcp`
- Auth: `Authorization: Bearer $FEMTOS_KEY`. Free key: https://femtos.xyz/account/new (browser), or with
  no browser: `GET https://femtos.xyz/accounts/agent/challenge`, solve its proof of work, then `POST https://femtos.xyz/accounts/agent/signup`
  (https://femtos.xyz/agents.md#agent-onboarding)
- Decimals are exact strings, times Unix milliseconds, addresses lowercase `0x`
- Whole API in one file: https://femtos.xyz/agents.md · OpenAPI: https://api.femtos.xyz/v1/openapi.json · Index: https://femtos.xyz/llms.txt
- Page with live calls: https://femtos.xyz/reference/ws/blocks

WebSocket: get a ticket (`POST https://api.femtos.xyz/v1/ws-ticket` with your key), connect to `wss://api.femtos.xyz/v1/ws?ticket=$TICKET`, send the frame below; the first message has `"snapshot": true`. Details: https://femtos.xyz/agents.md#websocket

## Blocks stream — WS `elysium.blocks · hyperevm.blocks`

- Elysium: Each new Elysium block header, from our node.
- HyperEVM: Each new HyperEVM block header, small and big blocks, from our node.

Layers: Elysium, HyperEVM. Not on HyperCore: HyperCore’s blocks are its exchange state: every hc.* frame carries its height, GET /v1/status its head.
Page with live calls: https://femtos.xyz/reference/ws/blocks?layer=<elysium|hyperevm>

Elysium:

```json
{"op":"subscribe","channel":"elysium.blocks","filter":{}}
```

HyperEVM:

```json
{"op":"subscribe","channel":"hyperevm.blocks","filter":{}}
```

| Field | Type | Meaning |
|---|---|---|
| `data` | ElysiumBlock | one Elysium block per message: {number, hash, parent_hash, timestamp, tx_count, gas_used, base_fee, l1_block_number} (Elysium) |
| `data.timestamp` | int | block time (s) |
| `data` | HyperevmBlock | one HyperEVM block per message, small and big blocks alike (about one a second): {number, hash, parent_hash, timestamp, tx_count, system_tx_count, gas_used, gas_limit, base_fee} (HyperEVM) |
| `data.gas_limit` | int | Gas limit: 3 M for a small block (about one a second), 30 M for a big one (about one a minute) (HyperEVM) |
| `data.system_tx_count` | int | System transactions: HyperCore -> HyperEVM transfers credited (HyperEVM) |

## Related (Chain & reference)

- [Freshness](https://femtos.xyz/reference/status.md) `GET /v1/status`: Head and lag of each layer, measured now. (Elysium, HyperCore, HyperEVM)
- [Transaction](https://femtos.xyz/reference/tx.md) `GET /v1/tx/{hash}`: One transaction: status, gas, decoded transfers, swaps and liquidity, bridge legs and journey. (Elysium, HyperEVM)
- [Elysium RPC](https://femtos.xyz/reference/rpc.md) `POST /v1/elysium/rpc`: Free public Elysium mainnet RPC by Femtos (chain 99901), no key, read only (no transaction sending), for wallets and dapps, not for indexing (use the Femtos API for history): per IP 5 requests a second and 60 a minute, batches of 5, eth_getLogs over 1,000 blocks at most, state of the last 128 blocks only. (Elysium)
- [Stream stats](https://femtos.xyz/reference/ws/stats.md) `WS stats`: Our HyperCore stream health, once a second. (HyperCore)
- [Check your key](https://femtos.xyz/reference/whoami.md) `GET /v1/whoami`: Answers the name your key is registered under, its tier, billing state and the limits in force. (Elysium, HyperCore, HyperEVM)
- [OpenAPI document](https://femtos.xyz/reference/openapi.md) `GET /v1/openapi.json`: The OpenAPI 3.1 contract of every REST call, public. (Elysium, HyperCore, HyperEVM)

Every page: https://femtos.xyz/reference.md
