Intellix Edge API Reference
Welcome to the Intellix Edge API documentation. Our API enables you to programmatically access and manipulate your business intelligence data, create custom integrations, and extend the functionality of the Intellix Edge platform.
API Version
Current API version: v1
All API requests should include the version in the URL path: https://api.intellixedge.com/v1/
RESTful Endpoints
Access your data through our intuitive REST API with JSON responses.
Secure Authentication
Multiple authentication methods including API keys and OAuth 2.0.
Client Libraries
Official SDKs for JavaScript, Python, Ruby, and more.
Webhooks
Real-time notifications for data changes and events.
Base URL
https://api.intellixedge.com/v1
All API requests must use HTTPS. HTTP requests will be rejected.
Quick Start
Get up and running with the Intellix Edge API in minutes. Follow these steps to make your first API request.
1. Get your API key
Generate an API key from your Intellix Edge dashboard under Settings → API.
Navigate to Settings → API in your dashboard
Click Generate New API Key
Store your API key securely — it won't be shown again
2. Make your first API request
Use your API key to authenticate and make a simple request to verify your setup.
curl -X GET "https://api.intellixedge.com/v1/dashboards" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
Response
{
"data": [
{
"id": "dash_01HGZXK2J5V8ABCDEFGHJK",
"name": "Sales Overview",
"description": "Key sales metrics and trends",
"created_at": "2025-05-15T14:32:18Z",
"updated_at": "2025-06-01T09:17:42Z",
"owner_id": "user_01HGZXK2J5V8LMNOPQRSTU"
},
{
"id": "dash_01HGZXK2J5V8VWXYZABCDE",
"name": "Marketing Performance",
"description": "Campaign metrics and ROI analysis",
"created_at": "2025-05-20T10:15:33Z",
"updated_at": "2025-05-30T16:42:19Z",
"owner_id": "user_01HGZXK2J5V8LMNOPQRSTU"
}
],
"meta": {
"total_count": 2,
"page": 1,
"per_page": 10
}
}
3. Explore the API
Now that you've made your first request, explore the rest of the API documentation to learn about all available endpoints and features.
API Keys
API keys are used to authenticate requests to the Intellix Edge API. Each API key is associated with a specific user and has configurable permissions.
Authentication
Include your API key in the Authorization header of all requests:
Authorization: Bearer YOUR_API_KEY
Security Warning
Keep your API keys secure and never expose them in client-side code or public repositories. Rotate your keys regularly and use environment variables to store them in your applications.
Managing API Keys
Creating a new API key
curl -X POST "https://api.intellixedge.com/v1/api-keys" \
-H "Authorization: Bearer YOUR_ADMIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Dashboard Integration",
"expires_in": 90,
"permissions": ["read:dashboards", "write:dashboards"]
}'
Listing your API keys
curl -X GET "https://api.intellixedge.com/v1/api-keys" \
-H "Authorization: Bearer YOUR_ADMIN_API_KEY" \
-H "Content-Type: application/json"
Revoking an API key
curl -X DELETE "https://api.intellixedge.com/v1/api-keys/key_01HGZXK2J5V8ABCDEFGHJK" \
-H "Authorization: Bearer YOUR_ADMIN_API_KEY" \
-H "Content-Type: application/json"
Rate Limits
To ensure the stability and performance of the API, Intellix Edge implements rate limiting on API requests. Understanding these limits will help you design your applications to work optimally with our API.
Rate Limit Headers
All API responses include headers that provide information about your current rate limit status:
Header | Description |
---|---|
X-RateLimit-Limit | The maximum number of requests you're permitted to make per hour |
X-RateLimit-Remaining | The number of requests remaining in the current rate limit window |
X-RateLimit-Reset | The time at which the current rate limit window resets in UTC epoch seconds |
HTTP/1.1 200 OK
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4997
X-RateLimit-Reset: 1717675425
Rate Limit Tiers
Rate limits vary based on your subscription plan:
Plan | Rate Limit (requests per hour) | Burst Limit (requests per minute) |
---|---|---|
Free | 1,000 | 100 |
Pro | 5,000 | 300 |
Business | 10,000 | 600 |
Enterprise | Custom | Custom |
Handling Rate Limits
When you exceed your rate limit, the API will return a 429 Too Many Requests response. Here are some best practices for handling rate limits:
Implement Exponential Backoff
When you receive a 429 response, wait before retrying. Increase the wait time exponentially with each retry.
// JavaScript example
async function makeRequestWithBackoff(url, options, maxRetries = 5) {
let retries = 0;
while (retries < maxRetries) {
try {
const response = await fetch(url, options);
if (response.status !== 429) {
return response;
}
// Get reset time from headers
const resetTime = response.headers.get('X-RateLimit-Reset');
const waitTime = resetTime ?
Math.max(Math.ceil(resetTime - Date.now() / 1000), 0) :
Math.pow(2, retries) * 1000;
console.log(`Rate limited. Waiting ${waitTime}ms before retry.`);
await new Promise(resolve => setTimeout(resolve, waitTime));
retries++;
} catch (error) {
throw error;
}
}
throw new Error('Max retries exceeded');
}
Monitor Your Usage
Track your API usage by checking the rate limit headers in each response. Implement alerts when you approach your limits.
Optimize Your Requests
- Batch operations when possible
- Cache responses that don't change frequently
- Use webhooks for real-time updates instead of polling
- Implement pagination to retrieve large data sets efficiently
Rate Limit Exceeded Response
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please wait and try again later.",
"retry_after": 35
}
}
JavaScript SDK
The Intellix Edge JavaScript SDK provides a convenient way to interact with our API from browser and Node.js environments.
Installation
npm install @intellix-edge/sdk
yarn add @intellix-edge/sdk
Quick Start
import { IntellixEdge } from '@intellix-edge/sdk';
// Initialize the client
const intellix = new IntellixEdge({
apiKey: 'YOUR_API_KEY',
// Optional configuration
baseUrl: 'https://api.intellixedge.com/v1',
timeout: 30000, // 30 seconds
});
// Example: List dashboards
async function listDashboards() {
try {
const { data, meta } = await intellix.dashboards.list({
page: 1,
per_page: 10,
sort: 'updated_at:desc'
});
console.log(`Found ${meta.total_count} dashboards`);
data.forEach(dashboard => {
console.log(`- ${dashboard.name}`);
});
} catch (error) {
console.error('Error fetching dashboards:', error);
}
}
// Example: Create a dashboard
async function createDashboard() {
try {
const { data } = await intellix.dashboards.create({
name: 'New Dashboard',
description: 'Created via the JavaScript SDK',
is_public: false
});
console.log(`Created dashboard with ID: ${data.id}`);
return data;
} catch (error) {
console.error('Error creating dashboard:', error);
}
}
// Example: Add a visualization to a dashboard
async function addVisualization(dashboardId, queryId) {
try {
// First create a visualization from a query
const { data: visualization } = await intellix.visualizations.create({
name: 'Monthly Revenue',
query_id: queryId,
type: 'line_chart',
options: {
x_axis: 'month',
y_axis: 'revenue',
show_legend: true
}
});
// Then add it to the dashboard
const { data } = await intellix.dashboards.update(dashboardId, {
visualizations: [visualization.id]
});
console.log('Visualization added to dashboard');
return data;
} catch (error) {
console.error('Error adding visualization:', error);
}
}
Error Handling
The SDK provides structured error handling for API errors:
import { IntellixEdge, ApiError, RateLimitError } from '@intellix-edge/sdk';
const intellix = new IntellixEdge({
apiKey: 'YOUR_API_KEY'
});
async function handleErrors() {
try {
const result = await intellix.dashboards.get('non_existent_id');
return result;
} catch (error) {
if (error instanceof RateLimitError) {
console.error(`Rate limit exceeded. Retry after ${error.retryAfter} seconds`);
// Implement retry logic
} else if (error instanceof ApiError) {
console.error(`API Error: ${error.code} - ${error.message}`);
console.error(`Status: ${error.statusCode}`);
console.error(`Request ID: ${error.requestId}`);
} else {
console.error('Unexpected error:', error);
}
}
}
Webhooks
Webhooks allow you to receive real-time notifications when specific events occur in your Intellix Edge account. Instead of polling the API for changes, webhooks push data to your application as events happen.
Available Events
You can subscribe to the following webhook events:
Event | Description |
---|---|
dashboard.created | A new dashboard has been created |
dashboard.updated | A dashboard has been updated |
dashboard.deleted | A dashboard has been deleted |
visualization.created | A new visualization has been created |
data_source.connected | A new data source has been connected |
data_source.sync_completed | A data source sync has completed |
alert.triggered | A data alert has been triggered |
user.invited | A new user has been invited to your organization |
Creating a Webhook Endpoint
To create a webhook endpoint, you'll need to:
-
1
Set up a publicly accessible HTTPS endpoint on your server
Your endpoint should be able to process POST requests and respond with a 200 status code
-
2
Register your endpoint with the Intellix Edge API
Use the API to create a webhook subscription for specific events
-
3
Verify your endpoint
We'll send a verification request to your endpoint with a challenge parameter
-
4
Implement signature verification
Verify that incoming webhook requests are legitimate by checking the signature
curl -X POST "https://api.intellixedge.com/v1/webhooks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhooks/intellix",
"events": ["dashboard.created", "dashboard.updated", "alert.triggered"],
"description": "Dashboard and alert notifications",
"active": true
}'
Response
{
"data": {
"id": "webhook_01HGZXK2J5V8ABCDEFGHJK",
"url": "https://your-server.com/webhooks/intellix",
"events": ["dashboard.created", "dashboard.updated", "alert.triggered"],
"description": "Dashboard and alert notifications",
"active": true,
"created_at": "2025-06-05T11:32:45Z",
"updated_at": "2025-06-05T11:32:45Z",
"secret": "whsec_abcdefghijklmnopqrstuvwxyz123456" // Store this securely
}
}
Webhook Payload Format
When an event occurs, we'll send a POST request to your endpoint with the following payload structure:
{
"id": "evt_01HGZXK2J5V8ABCDEFGHJK",
"type": "dashboard.created",
"created_at": "2025-06-05T14:23:45Z",
"data": {
"id": "dash_01HGZXK2J5V8KLMNOPQRST",
"name": "Sales Performance Q2",
"description": "Quarterly sales performance metrics",
"created_at": "2025-06-05T14:23:42Z",
"updated_at": "2025-06-05T14:23:42Z",
"owner_id": "user_01HGZXK2J5V8LMNOPQRSTU",
"is_public": false
}
}
Verifying Webhook Signatures
To ensure that webhook requests are coming from Intellix Edge, you should verify the signature included in each request:
const crypto = require('crypto');
const express = require('express');
const app = express();
// Your webhook secret from the webhook creation response
const webhookSecret = 'whsec_abcdefghijklmnopqrstuvwxyz123456';
app.use(express.json({
verify: (req, res, buf) => {
req.rawBody = buf.toString();
}
}));
app.post('/webhooks/intellix', (req, res) => {
const signature = req.headers['x-intellix-signature'];
const timestamp = req.headers['x-intellix-timestamp'];
if (!signature || !timestamp) {
return res.status(400).send('Missing signature or timestamp');
}
// Check if the timestamp is recent (within 5 minutes)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp)) > 300) {
return res.status(400).send('Timestamp too old');
}
// Compute expected signature
const payload = `${timestamp}.${req.rawBody}`;
const expectedSignature = crypto
.createHmac('sha256', webhookSecret)
.update(payload)
.digest('hex');
// Compare signatures using a timing-safe comparison
if (!crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
)) {
return res.status(401).send('Invalid signature');
}
// Signature is valid, process the webhook
const event = req.body;
console.log(`Received event: ${event.type}`);
// Handle different event types
switch (event.type) {
case 'dashboard.created':
console.log(`New dashboard created: ${event.data.name}`);
break;
case 'alert.triggered':
console.log(`Alert triggered: ${event.data.name}`);
break;
// Handle other event types
}
// Return a 200 response to acknowledge receipt
res.status(200).send('Webhook received');
});
app.listen(3000, () => {
console.log('Webhook server running on port 3000');
});