API Documentation
Integrate Links DNA into your applications with our RESTful API
Enterprise Feature: API access requires an Enterprise plan
API Reference
Getting Started
Base URL
https://yourdomain.com/api/v1/
Rate Limits
- Standard: 1,000 requests per hour
- Enterprise: 10,000 requests per hour
- Burst: Up to 50 requests per minute
Response Format
All API responses are in JSON format with the following structure:
{
"success": true,
"data": {...},
"message": "Operation completed successfully",
"timestamp": "2024-01-01T12:00:00Z"
}
Authentication
API Key Authentication
Include your API key in the request headers:
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
Getting Your API Key: Contact our enterprise team to receive your API credentials after upgrading to an Enterprise plan.
Error Responses
Error responses include standard HTTP status codes:
| Status Code | Meaning | Description |
|---|---|---|
| 401 | Unauthorized | Invalid or missing API key |
| 403 | Forbidden | Access denied for this resource |
| 429 | Rate Limited | Too many requests |
| 500 | Server Error | Internal server error |
API Endpoints
Links Management
/api/v1/links
Create a new tracked link
Request Body:
{
"original_url": "https://example.com",
"name": "My Campaign Link",
"custom_variables": {
"campaign": "summer2024",
"source": "email"
}
}
Response:
{
"success": true,
"data": {
"id": "abc123",
"short_url": "https://yourdomain.com/abc123",
"original_url": "https://example.com",
"name": "My Campaign Link",
"created_at": "2024-01-01T12:00:00Z",
"total_clicks": 0
}
}
/api/v1/links
Retrieve all your links with pagination
Query Parameters:
page- Page number (default: 1)limit- Results per page (default: 50, max: 100)search- Search by link name
/api/v1/links/{id}/analytics
Get detailed analytics for a specific link
Query Parameters:
start_date- Filter from date (YYYY-MM-DD)end_date- Filter to date (YYYY-MM-DD)group_by- Group results by: hour, day, week, month
Analytics & Reporting
/api/v1/analytics/dashboard
Get overview statistics for your account
Response:
{
"success": true,
"data": {
"total_links": 25,
"total_clicks": 1547,
"unique_visitors": 892,
"top_countries": ["United States", "Canada", "United Kingdom"],
"performance_trend": "up",
"ai_insights": [
"Your links perform 40% better on weekdays",
"Mobile users show higher engagement rates"
]
}
}
/api/v1/analytics/export
Export analytics data in CSV format
Request Body:
{
"link_ids": ["abc123", "def456"],
"start_date": "2024-01-01",
"end_date": "2024-01-31",
"format": "csv"
}
Code Examples
Python Example
import requests
# Configuration
API_KEY = "your_api_key_here"
BASE_URL = "https://yourdomain.com/api/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Create a new link
def create_link(original_url, name, variables=None):
data = {
"original_url": original_url,
"name": name
}
if variables:
data["custom_variables"] = variables
response = requests.post(
f"{BASE_URL}/links",
json=data,
headers=headers
)
return response.json()
# Get analytics
def get_analytics(link_id):
response = requests.get(
f"{BASE_URL}/links/{link_id}/analytics",
headers=headers
)
return response.json()
# Example usage
link = create_link(
"https://example.com",
"My Campaign",
{"campaign": "summer", "source": "email"}
)
print(f"Created link: {link['data']['short_url']}")
analytics = get_analytics(link['data']['id'])
print(f"Total clicks: {analytics['data']['total_clicks']}")
JavaScript Example
// Configuration
const API_KEY = 'your_api_key_here';
const BASE_URL = 'https://yourdomain.com/api/v1';
const headers = {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
};
// Create a new link
async function createLink(originalUrl, name, variables = {}) {
const response = await fetch(`${BASE_URL}/links`, {
method: 'POST',
headers: headers,
body: JSON.stringify({
original_url: originalUrl,
name: name,
custom_variables: variables
})
});
return await response.json();
}
// Get analytics
async function getAnalytics(linkId) {
const response = await fetch(`${BASE_URL}/links/${linkId}/analytics`, {
headers: headers
});
return await response.json();
}
// Example usage
(async () => {
try {
const link = await createLink(
'https://example.com',
'My Campaign',
{ campaign: 'summer', source: 'email' }
);
console.log(`Created link: ${link.data.short_url}`);
const analytics = await getAnalytics(link.data.id);
console.log(`Total clicks: ${analytics.data.total_clicks}`);
} catch (error) {
console.error('API Error:', error);
}
})();
Webhooks
Real-time Event Notifications
Receive instant notifications when events occur on your links.
Available Events:
- link.clicked - A link was clicked
- link.created - A new link was created
- analytics.daily - Daily analytics summary
- insights.generated - New AI insights available
Webhook Payload Example:
{
"event": "link.clicked",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"link_id": "abc123",
"visitor_id": "visitor_xyz",
"country": "United States",
"device_type": "Mobile",
"custom_variables": {
"campaign": "summer",
"source": "email"
}
}
}
Setting Up Webhooks
Configure webhook endpoints through your Enterprise dashboard or contact our support team.
Security: All webhooks include a signature header for verification. Contact support for webhook signature validation details.
Need API Access?
Upgrade to Enterprise to unlock full API capabilities and dedicated support.