generated from Consensys/doctools.template-site
-
Notifications
You must be signed in to change notification settings - Fork 454
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
311 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
--- | ||
title: Token API | ||
image: /img/socialCards/token-api.jpg | ||
--- | ||
|
||
The Token API provides comprehensive programmatic access to token data on the Linea network. | ||
This API is designed for developers, builders and analysts who need detailed information about | ||
ERC-20 tokens and associated activity on Linea. | ||
|
||
:::warning[Alpha Version Disclaimer] | ||
Linea's Token API is an alpha version and is subject to breaking changes. | ||
We recommend using it for testing and development purposes only. | ||
We are looking for your feedback on this new service — please reach out to us on [Discord](https://discord.com/invite/linea) | ||
Check failure on line 13 in docs/api/token-api.mdx GitHub Actions / Spelling
|
||
in the [#developer-chat](https://discord.com/channels/1141419161893998702/1141419163223593024) | ||
channel. | ||
::: | ||
|
||
The Token API's key uses cases include: | ||
|
||
- Building automated trading bots | ||
- Creating token monitoring dashboards | ||
- Performing onchain data analysis | ||
- DeFi application integration | ||
- Wallet and transaction tracking | ||
|
||
## Data sources | ||
|
||
### Data collection | ||
|
||
Data is collected from multiple sources: | ||
|
||
1. **Onchain data** | ||
- Smart contract state (name, symbol, decimals) | ||
|
||
2. **External sources** | ||
- [CoinGecko](https://www.coingecko.com/en/api) | ||
- [MetaMask Token API](https://docs.cx.metamask.io/docs/token-v2/) | ||
- [MetaMask Price API](https://docs.cx.metamask.io/docs/price/) | ||
- [Pond.fun](https://pond.fun/) | ||
- [Dune Analytics](https://dune.com/) | ||
|
||
### Data updates | ||
|
||
The API data updates at various intervals, depending on the data type: | ||
|
||
- Token detection and metadata: every two hours | ||
- Historical prices: every hour | ||
- Current prices: every five minutes | ||
|
||
## API endpoints | ||
|
||
### Tokens | ||
|
||
These endpoints provide information about tokens on Linea when available, including their metadata, | ||
prices, and trading activity. | ||
|
||
#### Get `/api/tokens` | ||
|
||
Retrieve a list of all available tokens on Linea. | ||
|
||
<details> | ||
<summary>**Response**</summary> | ||
|
||
```json | ||
[ | ||
{ | ||
"name": "Wrapped Ether", | ||
"symbol": "WETH", | ||
"decimals": 18, | ||
"logo": "https://s2.coinmarketcap.com/static/img/coins/64x64/2396.png", | ||
"contractAddress": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", | ||
"currentPrice": "3321.74000000000000", | ||
"priceUpdatedAt": "2025-01-09T09:36:02.194Z", | ||
"info": { | ||
"prices": [ | ||
{ | ||
"price": "3321.74000000000000", | ||
"date": "2025-01-09T09:00:00.000Z" | ||
} | ||
], | ||
"sells": 3279, | ||
"buys": 3722, | ||
"graduatedAt": null | ||
} | ||
} | ||
] | ||
``` | ||
|
||
</details> | ||
|
||
#### Get `/api/tokens/{contractAddress}` | ||
|
||
Retrieve detailed information for a specific token. | ||
|
||
**Parameters:** | ||
|
||
<table> | ||
<thead> | ||
<tr> | ||
<th>Parameter</th> | ||
<th>Type</th> | ||
<th>Required</th> | ||
<th>Description</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr> | ||
<td>`contractAddress`</td> | ||
<td>string</td> | ||
<td>Yes</td> | ||
<td>Token address</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
<details> | ||
<summary>**Response**</summary> | ||
|
||
```json | ||
{ | ||
"name": "Wrapped Ether", | ||
"symbol": "WETH", | ||
"decimals": 18, | ||
"logo": "https://s2.coinmarketcap.com/static/img/coins/64x64/2396.png", | ||
"contractAddress": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", | ||
"currentPrice": "3321.74000000000000", | ||
"priceUpdatedAt": "2025-01-09T09:36:02.194Z", | ||
"info": { | ||
"prices": [ | ||
{ | ||
"price": "3321.74000000000000", | ||
"date": "2025-01-09T09:00:00.000Z" | ||
} | ||
], | ||
"sells": 3279, | ||
"buys": 3722, | ||
"graduatedAt": null | ||
} | ||
} | ||
``` | ||
|
||
</details> | ||
|
||
#### Get `/api/tokens/new-gems` | ||
|
||
Retrieve recently bonded tokens. | ||
|
||
<details> | ||
<summary>**Response**</summary> | ||
|
||
```json | ||
[ | ||
{ | ||
"name": "CatWifCap", | ||
"symbol": "CWC", | ||
"decimals": 18, | ||
"logo": "https://d12kvghf2eznx1.cloudfront.net/tokens/images/d0a931cd-7982-47e4-86c7-74be11ab0b09", | ||
"contractAddress": "0x092b9e25a7d143c83d44c27194f5cee7c1150f22", | ||
"currentPrice": "0.00013412000000", | ||
"priceUpdatedAt": "2025-01-09T09:45:04.799Z", | ||
"info": { | ||
"prices": [ | ||
{ | ||
"price": "0.00013412000000", | ||
"date": "2025-01-09T09:00:00.000Z" | ||
} | ||
], | ||
"sells": 0, | ||
"buys": 0, | ||
"graduatedAt": "2024-12-01T18:19:42.095Z" | ||
} | ||
} | ||
] | ||
``` | ||
|
||
</details> | ||
|
||
#### Get `/api/tokens/most-swapped` | ||
|
||
Retrieve the most swapped tokens over the last 24 hours (from the [corresponding Dune query](https://dune.com/queries/4396527)). | ||
|
||
<details> | ||
<summary>**Response**</summary> | ||
|
||
```json | ||
[ | ||
{ | ||
"name": "Foxy", | ||
"symbol": "FOXY", | ||
"decimals": 18, | ||
"logo": "https://i.ibb.co/MSKkFbf/logo.png", | ||
"contractAddress": "0x5fbdf89403270a1846f5ae7d113a989f850d1566", | ||
"currentPrice": "0.01080016000000", | ||
"priceUpdatedAt": "2025-01-09T09:50:05.106Z", | ||
"info": { | ||
"prices": [ | ||
{ | ||
"price": "0.01078276000000", | ||
"date": "2025-01-09T09:00:00.000Z" | ||
} | ||
], | ||
"sells": 219, | ||
"buys": 212, | ||
"graduatedAt": null | ||
} | ||
} | ||
] | ||
``` | ||
|
||
</details> | ||
|
||
## Usage examples | ||
|
||
### Simple token price bot | ||
|
||
```typescript | ||
async function monitorPriceChange(contractAddress: string, threshold: number) { | ||
const BASE_URL = 'https://not.live.yet'; | ||
const initialPrice = await fetch(`${BASE_URL}/api/tokens/${contractAddress}`).then(r => r.json()); | ||
|
||
setInterval(async () => { | ||
const currentPrice = await fetch(`${BASE_URL}/api/tokens/${contractAddress}`).then(r => r.json()); | ||
const priceChange = (currentPrice.price.usd - initialPrice.price.usd) / initialPrice.price.usd; | ||
|
||
if (Math.abs(priceChange) > threshold) { | ||
// Execute trading strategy | ||
console.log(`Price changed by ${priceChange}% - Trading signal`); | ||
} | ||
}, 60000); // Check every minute | ||
} | ||
``` | ||
|
||
## Best practices | ||
|
||
1. **Rate limiting** | ||
- This is an alpha version, with a low rate limit | ||
- Cache static data | ||
|
||
2. **Error handling** | ||
- Always check HTTP status of responses | ||
- Implement retry with exponential backoff | ||
- Validate token addresses before requests | ||
|
||
3. **Performance** | ||
- (Not available yet) Use pagination for large lists | ||
- Implement local caching when appropriate | ||
|
||
## Security considerations | ||
|
||
- Validate all input parameters | ||
- Sanitize response data | ||
|
||
## Support and feedback | ||
|
||
For technical support or feature requests, | ||
reach out to us on [Discord](https://discord.com/invite/linea) in the [#developer-chat](https://discord.com/channels/1141419161893998702/1141419163223593024) channel. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.