# Blocks stream · Elysium API · Femtos

> Each new Elysium block header, from our node.

- 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` (or `X-API-KEY: $FEMTOS_KEY`). Free key: https://femtos.xyz/accounts/ (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/elysium/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`

Each new Elysium block header, from our node.

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

| Field | Type | Meaning |
|---|---|---|
| `data` | object | {number, hash, parent_hash, timestamp, tx_count, gas_used, base_fee, l1_block_number} |
| `timestamp` | int | block time (s) |

## Related (Reference)

- [Freshness](https://femtos.xyz/elysium/status.md): Head and lag of each layer, measured now.
- [Check your key](https://femtos.xyz/elysium/whoami.md): Answers the name your key is registered under, its tier, billing state and the limits in force.
- [OpenAPI document](https://femtos.xyz/elysium/openapi.md): The OpenAPI 3.1 contract of every REST call, public.

All Elysium endpoints: https://femtos.xyz/elysium.md
