tmai-api
Version:
Token Metrics AI API JavaScript SDK - providing professional investors and traders with comprehensive cryptocurrency analysis, AI-powered trading signals, market data, and advanced insights.
402 lines (329 loc) • 13.6 kB
Markdown
# Token Metrics AI API TypeScript SDK
[](https://www.npmjs.com/package/tmai-api)
The official TypeScript SDK for Token Metrics AI API - providing professional investors and traders with comprehensive cryptocurrency analysis, AI-powered trading signals, market data, and advanced insights.
## Features
- **Comprehensive Market Data**: Access detailed information on thousands of cryptocurrencies
- **AI-Powered Analysis**: Get trading and investment grades based on advanced AI models
- **Technical Indicators**: Access technical analysis grades and quantitative metrics
- **Price Data**: Retrieve historical OHLCV (Open, High, Low, Close, Volume) data
- **Trading Signals**: Receive AI-generated long and short trading signals
- **AI Agent**: Interact with Token Metrics' AI chatbot for market insights
- **AI Reports**: Access detailed technical, fundamental, and trading reports
- **Simple Interface**: Intuitive API with Express.js integration
- **JavaScript & TypeScript Compatible**: Works with both JavaScript and TypeScript projects
## Installation
```bash
npm install tmai-api
```
You can find the package on npm at: [tmai-api](https://www.npmjs.com/package/tmai-api)
## Quick Start
### TypeScript Usage
```typescript
import { TokenMetricsClient } from 'tmai-api';
// Initialize the client with your API key
const client = new TokenMetricsClient('your-api-key');
// Get information for top cryptocurrencies
client.tokens.get({ symbol: 'BTC,ETH' })
.then(tokens => {
console.log(tokens);
});
// Ask the AI agent a question (simplified method)
client.aiAgent.ask('What is your analysis of Bitcoin?')
.then(response => {
console.log(response);
});
// Get just the answer text
client.aiAgent.getAnswerText('What is your Bitcoin forecast?')
.then(answerText => {
console.log(answerText);
});
// Use chat method for conversation with multiple messages
client.aiAgent.chat([
{ user: 'What is Bitcoin?' },
{ user: 'What are its current market trends?' }
])
.then(response => {
console.log(response);
});
// Get hourly trading signals
client.hourlyTradingSignals.get({
token_id: '3375', // Bitcoin token ID
limit: 10,
page: 1
})
.then(signals => {
console.log(signals);
});
// Get indices overview
client.indices.get({ indices_type: 'active' })
.then(indices => {
console.log(indices);
});
// Get indices holdings
client.indicesHoldings.get({ id: 1 })
.then(holdings => {
console.log(holdings);
});
// Get indices performance
client.indicesPerformance.get({
id: 1,
start_date: '2023-10-01',
end_date: '2023-10-10'
})
.then(performance => {
console.log(performance);
});
// Get TM Grades (multiple filter options)
client.tmGrades.get({ token_id: '3375' })
.then(grades => {
console.log(grades);
});
// Get TM Grades by symbol
client.tmGrades.get({ symbol: 'BTC' })
.then(grades => {
console.log(grades);
});
// Get TM Grades by token name
client.tmGrades.get({ token_name: 'Bitcoin' })
.then(grades => {
console.log(grades);
});
// Get TM Grades Historical
client.tmGrades.getHistorical({
token_id: '3375',
start_date: '2025-07-01',
end_date: '2025-07-05',
limit: 100,
page: 1
})
.then(historicalGrades => {
console.log(historicalGrades);
});
// Get Technology Grades (multiple filter options)
client.technologyGrades.get({ token_id: '3306' })
.then(techGrades => {
console.log(techGrades);
});
// Get Technology Grades by symbol
client.technologyGrades.get({ symbol: 'ETH' })
.then(techGrades => {
console.log(techGrades);
});
// Get Technology Grades by token name
client.technologyGrades.get({ token_name: 'Ethereum' })
.then(techGrades => {
console.log(techGrades);
});
// Get Technology Grades Historical
client.technologyGrades.getHistorical({
symbol: 'BTC',
start_date: '2025-07-01',
end_date: '2025-07-05',
limit: 50,
page: 1
})
.then(historicalTechGrades => {
console.log(historicalTechGrades);
});
// Get Fundamental Grades (multiple filter options)
client.fundamentalGrades.get({ token_id: '3375' })
.then(fundamentalGrades => {
console.log(fundamentalGrades);
});
// Get Fundamental Grades by symbol
client.fundamentalGrades.get({ symbol: 'BTC' })
.then(fundamentalGrades => {
console.log(fundamentalGrades);
});
// Get Fundamental Grades by token name
client.fundamentalGrades.get({ token_name: 'Bitcoin' })
.then(fundamentalGrades => {
console.log(fundamentalGrades);
});
// Get Fundamental Grades Historical
client.fundamentalGrades.getHistorical({
symbol: 'ETH',
start_date: '2025-07-01',
end_date: '2025-07-05',
limit: 50,
page: 1
})
.then(historicalFundamentalGrades => {
console.log(historicalFundamentalGrades);
});
// Get moonshot tokens (AI-curated high potential picks)
client.moonshotTokens.get({
type: 'active',
sort_by: 'roi_pct',
limit: 10
})
.then(moonshotTokens => {
console.log(moonshotTokens);
});
// Using async/await with type annotations
async function getTokenData(): Promise<void> {
const tokens = await client.tokens.get({ symbol: 'BTC,ETH' });
console.log(tokens);
}
```
### JavaScript Usage
```javascript
// ES Modules
import { TokenMetricsClient } from 'tmai-api';
// OR CommonJS
// const { TokenMetricsClient } = require('tmai-api');
// Initialize the client with your API key
const client = new TokenMetricsClient('your-api-key');
// Get information for top cryptocurrencies
client.tokens.get({ symbol: 'BTC,ETH' })
.then(tokens => {
console.log(tokens);
});
// Get hourly trading signals
client.hourlyTradingSignals.get({
token_id: '3375',
limit: 20
})
.then(signals => {
console.log(signals);
});
// Using async/await
async function getTokenData() {
const tokens = await client.tokens.get({ symbol: 'BTC,ETH' });
console.log(tokens);
}
```
## Available Endpoints
| Endpoint | Description | Example |
|----------|-------------|---------|
| `tokens` | Information about all supported tokens | `client.tokens.get({ symbol: 'BTC,ETH' })` |
| `hourlyOhlcv` | Hourly price and volume data | `client.hourlyOhlcv.get({ symbol: 'BTC', start_date: '2023-10-01', end_date: '2023-10-10' })` |
| `dailyOhlcv` | Daily price and volume data | `client.dailyOhlcv.get({ symbol: 'BTC', start_date: '2023-10-01', end_date: '2023-10-10' })` |
| `marketMetrics` | Market analytics with Bullish/Bearish indicator | `client.marketMetrics.get({ start_date: '2023-10-01', end_date: '2023-10-10' })` |
| `aiAgent` | Interact with Token Metrics AI chatbot | `client.aiAgent.ask('What is your Bitcoin forecast?')` or `client.aiAgent.getAnswerText('Question')` or `client.aiAgent.chat([{user: 'Question'}])` |
| `aiReports` | AI-generated comprehensive analyses including deep dives and investment analyses | `client.aiReports.get({ symbol: 'BTC,ETH' })` |
| `tradingSignals` | AI-generated trading signals | `client.tradingSignals.get({ symbol: 'BTC,ETH', start_date: '2023-10-01', end_date: '2023-10-10', signal: '1' })` |
| `hourlyTradingSignals` | Hourly AI-generated trading signals | `client.hourlyTradingSignals.get({ token_id: '3375'})` |
| `cryptoInvestors` | Latest list of crypto investors and their scores | `client.cryptoInvestors.get()` |
| `topMarketCapTokens` | Top tokens by market capitalization | `client.topMarketCapTokens.get({ top_k: 100 })` |
| `resistanceSupport` | Historical resistance and support levels for tokens | `client.resistanceSupport.get({ symbol: 'BTC' })` |
| `price` | Current token prices | `client.price.get({ symbol: 'BTC' })` |
| `quantmetrics` | Latest quantitative metrics for tokens | `client.quantmetrics.get({ symbol: 'BTC' })` |
| `pricePrediction` | Crypto price predictions under different market scenarios | `client.pricePrediction.get({ symbol: 'BTC' })` |
| `correlation` | Top 10 and Bottom 10 correlated tokens from top 100 market cap | `client.correlation.get({ symbol: 'BTC,ETH' })` |
| `indices` | Overview of active/passive indices with performance metrics | `client.indices.get({ indices_type: 'active' })` |
| `indicesHoldings` | Current holdings of an index with weight percentages, performance data, and trading grades | `client.indicesHoldings.get({ id: 1 })` |
| `indicesPerformance` | Historical performance data with cumulative ROI over time | `client.indicesPerformance.get({ id: 1, start_date: '2023-10-01', end_date: '2023-10-10' })` |
| `moonshotTokens` | Get AI-curated token picks with high breakout potential | `client.moonshotTokens.get({ type: 'active', sort_by: 'roi_pct' })` |
| `tmGrades` | Latest TM Grade and Fundamental Grade insights with signals and momentum | `client.tmGrades.get({ token_id: '3375' })` or `client.tmGrades.get({ symbol: 'BTC' })` or `client.tmGrades.get({ token_name: 'Bitcoin' })` |
| `tmGrades.getHistorical` | Historical TM Grade and Fundamental Grade data over a date range | `client.tmGrades.getHistorical({ token_id: '3375', start_date: '2023-10-01', end_date: '2023-10-10', limit: 100, page: 1 })` |
| `technologyGrades` | Technology Grade insights including activity, security, repository, collaboration, and DeFi scanner scores | `client.technologyGrades.get({ token_id: '3306' })` or `client.technologyGrades.get({ symbol: 'ETH' })` or `client.technologyGrades.get({ token_name: 'Ethereum' })` |
| `technologyGrades.getHistorical` | Historical Technology Grade data over a date range with all scoring metrics | `client.technologyGrades.getHistorical({ symbol: 'BTC', start_date: '2023-10-01', end_date: '2023-10-10', limit: 50, page: 1 })` |
| `fundamentalGrades` | Fundamental Grade insights including grade class, community score, exchange score, VC score, tokenomics score, and DeFi scanner score | `client.fundamentalGrades.get({ token_id: '3375' })` or `client.fundamentalGrades.get({ symbol: 'BTC' })` or `client.fundamentalGrades.get({ token_name: 'Bitcoin' })` |
| `fundamentalGrades.getHistorical` | Historical Fundamental Grade data over a date range with all scoring metrics | `client.fundamentalGrades.getHistorical({ symbol: 'ETH', start_date: '2023-10-01', end_date: '2023-10-10', limit: 50, page: 1 })` |
## Authentication
All API requests require an API key. You can get your API key by signing up at [Token Metrics](https://tokenmetrics.com).
```javascript
// Initialize with your API key
const client = new TokenMetricsClient('your-api-key');
```
## Error Handling
The SDK provides built-in error handling for API requests:
```typescript
client.tokens.get({ symbol: 'INVALID_SYMBOL' })
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Error:', error.message);
// Handle the error appropriately
});
// Using async/await with try/catch
async function getTokenData(): Promise<void> {
try {
const data = await client.tokens.get({ symbol: 'INVALID_SYMBOL' });
console.log(data);
} catch (error: unknown) {
if (error instanceof Error) {
console.error('Error:', error.message);
} else {
console.error('Unknown error:', error);
}
// Handle the error appropriately
}
}
```
## Requirements
- Node.js 14+
- `axios` package
- `express` package
## Express.js Integration
This SDK can be easily integrated with Express.js to create your own API endpoints that leverage Token Metrics data:
```typescript
import express from 'express';
import cors from 'cors';
import { TokenMetricsClient } from 'tmai-api';
// Initialize the Token Metrics client
const tmClient = new TokenMetricsClient('your-api-key');
// Create Express app
const app = express();
const port = 3000;
// Middleware
app.use(cors());
app.use(express.json());
// Get tokens endpoint
app.get('/api/tokens/:symbol', async (req, res) => {
try {
const { symbol } = req.params;
const result = await tmClient.tokens.get({ symbol });
res.json(result);
} catch (error) {
if (error instanceof Error) {
res.status(500).json({ error: error.message });
} else {
res.status(500).json({ error: 'Unknown error occurred' });
}
}
});
// Get trading signals endpoint
app.get('/api/trading-signals/:symbol', async (req, res) => {
try {
const { symbol } = req.params;
const { start_date, end_date, signal } = req.query;
const result = await tmClient.tradingSignals.get({
symbol,
start_date: start_date as string | undefined,
end_date: end_date as string | undefined,
signal: signal as string | undefined
});
res.json(result);
} catch (error) {
if (error instanceof Error) {
res.status(500).json({ error: error.message });
} else {
res.status(500).json({ error: 'Unknown error occurred' });
}
}
});
// Start the server
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
```
For a complete Express.js server example, see the [examples/express-server.js](examples/express-server.js) file.
## Documentation
For complete API documentation, visit:
- [Token Metrics API Documentation](https://developers.tokenmetrics.com/v3/docs/getting-started)
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This SDK is distributed under the MIT License. See the [LICENSE](LICENSE) file for details.
<p align="center">
<a href="https://tokenmetrics.com">
<img src="https://files.readme.io/6141d8ec9ddb9dd233e52357e7526ba5fea3dacafab20cd042bc20a2de070beb-dark_mode_1.svg" alt="Token Metrics Logo" width="300">
</a>
</p>
<p align="center">
<i>Empowering investors with AI-powered crypto insights</i>
</p>