# Elysium RPC · Elysium API · Femtos

> 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.

- 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/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/rpc

## Elysium RPC — 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.

| Param | In | Example or values | Meaning |
|---|---|---|---|
| `jsonrpc` | body | `2.0` | "2.0" |
| `id` | body | `1` | Echoed in its answer; required (a notification, without one, is refused) |
| `method` | body | `eth_blockNumber` | A method served: eth_chainId, eth_blockNumber, net_version, net_listening, web3_clientVersion, eth_syncing, eth_getBlockByNumber, eth_getBlockByHash, eth_getBlockTransactionCountByNumber, eth_getBlockTransactionCountByHash, eth_getTransactionByHash, eth_getTransactionByBlockNumberAndIndex, eth_getTransactionByBlockHashAndIndex, eth_getTransactionReceipt, eth_getBlockReceipts, eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount, eth_call, eth_estimateGas, eth_gasPrice, eth_maxPriorityFeePerGas, eth_feeHistory, eth_getLogs, eth_getProof (not available: eth_sendRawTransaction / eth_sendTransaction, eth_subscribe, filters, debug_*, trace_*) |
| `params` | body | (optional) | Its parameters, as the method takes them (absent: none) |

```bash
curl -X POST -H "Authorization: Bearer $FEMTOS_KEY" -H "Content-Type: application/json" "https://api.femtos.xyz/v1/elysium/rpc" \
  -d '{"jsonrpc":"2.0","id":"1","method":"eth_blockNumber"}'
```

| Field | Type | Meaning |
|---|---|---|
| `jsonrpc` | 2.0 | "2.0" |
| `id` | number \| string \| null | The id of its request (null: a body or request that could not be read) |
| `result` | unknown | The node's result, as it wrote it |
| `error` | object | The node's error as it wrote it, or ours: -32600 invalid request or batch, -32601 method not available, -32602 invalid params, -32002 state older than the head's last 128 blocks, -32005 a limit (eth_getLogs range, answer size), -32603 node timeout, -32029 rate limit (HTTP 429): {code, message, data} |

## Related (Reference)

- [Blocks stream](https://femtos.xyz/elysium/ws-blocks.md): Each new Elysium block header, from our node.
- [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
