API Automation Integration for Multilogin
This comprehensive guide covers Multilogin’s REST API for automating account management, profile operations, and operational workflows. Learn how to integrate Multilogin into your automation pipelines and development projects.
Understanding Multilogin API
API Architecture
RESTful design principles:
- Stateless operations: Each request contains all necessary information
- Resource-based URLs: Intuitive endpoint structure
- HTTP methods: Standard GET, POST, PUT, DELETE operations
- JSON data format: Consistent request and response format
- Hypermedia links: API navigation and discovery
API endpoints structure:
https://api.multilogin.com/v1/
├── accounts/ # Account management
├── profiles/ # Browser profile operations
├── groups/ # Profile group management
├── proxies/ # Proxy configuration
├── automation/ # Automation workflows
└── analytics/ # Usage analytics
Authentication
API key authentication:
- Header-based auth:
Authorization: Bearer {api_key} - Secure transmission: Always use HTTPS
- Key management: Rotate keys regularly
- Permission scopes: Granular API permissions
Authentication flow:
# Get API key from dashboard
API_KEY="your_api_key_here"
# Include in all requests
curl -H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
https://api.multilogin.com/v1/profiles
Getting Started with API Integration
Prerequisites
Development requirements:
- Valid Multilogin account with API access
- API key generated from dashboard
- HTTPS-enabled development environment
- JSON parsing capabilities
- Error handling implementation
Environment setup:
# Install required tools
npm install axios # Node.js
pip install requests # Python
go get github.com/go-resty/resty # Go
# Set environment variables
export MULTILOGIN_API_KEY="your_key"
export MULTILOGIN_BASE_URL="https://api.multilogin.com/v1"
Basic API Usage
First API call:
const axios = require('axios');
const multilogin = axios.create({
baseURL: 'https://api.multilogin.com/v1',
headers: {
'Authorization': `Bearer ${process.env.MULTILOGIN_API_KEY}`,
'Content-Type': 'application/json'
}
});
// Get account information
async function getAccount() {
try {
const response = await multilogin.get('/accounts/me');
console.log('Account:', response.data);
} catch (error) {
console.error('Error:', error.response.data);
}
}
Profile Management API
Creating Browser Profiles
Profile creation endpoint:
POST /v1/profiles
Content-Type: application/json
{
"name": "E-commerce Profile",
"browser": "chrome",
"os": "windows",
"proxy": {
"type": "residential",
"host": "proxy.example.com",
"port": 8080,
"username": "user",
"password": "pass"
},
"fingerprint": {
"timezone": "America/New_York",
"language": "en-US",
"resolution": "1920x1080"
}
}
Advanced profile configuration:
{
"name": "Advanced Profile",
"group_id": "group_123",
"browser": {
"type": "chrome",
"version": "120",
"user_agent": "custom_user_agent"
},
"hardware": {
"cores": 8,
"memory": 16,
"graphics": "nvidia"
},
"network": {
"dns": "8.8.8.8",
"bandwidth": "100mbps"
},
"extensions": [
"extension_id_1",
"extension_id_2"
],
"cookies": [
{
"domain": ".example.com",
"name": "session",
"value": "abc123"
}
]
}
Profile Operations
Retrieve profiles:
// Get all profiles
const profiles = await multilogin.get('/profiles');
// Get specific profile
const profile = await multilogin.get('/profiles/profile_123');
// Filter profiles
const filtered = await multilogin.get('/profiles', {
params: {
group_id: 'group_123',
browser: 'chrome'
}
});
Update profiles:
// Update profile settings
await multilogin.put('/profiles/profile_123', {
name: 'Updated Profile Name',
proxy: {
type: 'datacenter',
host: 'new-proxy.example.com'
}
});
Delete profiles:
// Delete single profile
await multilogin.delete('/profiles/profile_123');
// Bulk delete
await multilogin.post('/profiles/bulk-delete', {
profile_ids: ['profile_123', 'profile_456']
});
Automation Workflows
Browser Automation
Launch browser session:
const session = await multilogin.post('/automation/sessions', {
profile_id: 'profile_123',
url: 'https://example.com',
headless: false,
timeout: 30000
});
console.log('Session ID:', session.data.session_id);
console.log('WebSocket URL:', session.data.websocket_url);
Execute automation scripts:
// Run JavaScript in browser
const result = await multilogin.post(`/automation/sessions/${sessionId}/execute`, {
script: `
// Navigate and extract data
await page.goto('https://example.com');
const title = await page.title();
const content = await page.$eval('.content', el => el.textContent);
return { title, content };
`,
timeout: 10000
});
Session management:
// Get session status
const status = await multilogin.get(`/automation/sessions/${sessionId}`);
// Take screenshot
const screenshot = await multilogin.post(`/automation/sessions/${sessionId}/screenshot`, {
format: 'png',
full_page: true
});
// Close session
await multilogin.delete(`/automation/sessions/${sessionId}`);
Batch Operations
Bulk profile creation:
const profiles = [
{ name: 'Profile 1', browser: 'chrome' },
{ name: 'Profile 2', browser: 'firefox' },
{ name: 'Profile 3', browser: 'edge' }
];
const results = await multilogin.post('/profiles/bulk-create', {
profiles: profiles
});
console.log('Created profiles:', results.data.created);
console.log('Failed profiles:', results.data.failed);
Bulk automation tasks:
const tasks = [
{
profile_id: 'profile_1',
actions: [
{ type: 'navigate', url: 'https://site1.com' },
{ type: 'extract', selector: '.data' }
]
},
{
profile_id: 'profile_2',
actions: [
{ type: 'navigate', url: 'https://site2.com' },
{ type: 'click', selector: '.button' }
]
}
];
const batchResult = await multilogin.post('/automation/batch', {
tasks: tasks,
parallel: true,
max_concurrency: 5
});
Proxy Management API
Proxy Configuration
Add proxy:
const proxy = await multilogin.post('/proxies', {
name: 'Residential Proxy',
type: 'residential',
provider: 'brightdata',
credentials: {
username: 'user123',
password: 'pass456',
host: 'proxy.brightdata.com',
port: 8080
},
rotation: {
type: 'sticky',
duration: 3600
}
});
Proxy testing:
// Test proxy connectivity
const testResult = await multilogin.post(`/proxies/${proxyId}/test`, {
test_urls: [
'https://httpbin.org/ip',
'https://api.ipify.org'
]
});
console.log('Proxy working:', testResult.data.success);
console.log('Detected IP:', testResult.data.ip);
Proxy Rotation
Manual rotation:
// Rotate proxy for profile
await multilogin.post('/profiles/profile_123/rotate-proxy');
Automated rotation:
// Set rotation schedule
await multilogin.put('/profiles/profile_123/proxy', {
rotation: {
enabled: true,
interval: 1800, // 30 minutes
type: 'random'
}
});
Analytics and Monitoring
Usage Analytics
API usage statistics:
const analytics = await multilogin.get('/analytics/usage', {
params: {
period: '30d',
group_by: 'endpoint'
}
});
console.log('Total requests:', analytics.data.total_requests);
console.log('Success rate:', analytics.data.success_rate);
console.log('Top endpoints:', analytics.data.top_endpoints);
Performance metrics:
const performance = await multilogin.get('/analytics/performance', {
params: {
profile_id: 'profile_123',
metrics: ['response_time', 'success_rate', 'error_rate']
}
});
Error Monitoring
Error tracking:
const errors = await multilogin.get('/analytics/errors', {
params: {
start_date: '2024-01-01',
end_date: '2024-01-31',
severity: 'error'
}
});
errors.data.errors.forEach(error => {
console.log(`Error: ${error.message}`);
console.log(`Endpoint: ${error.endpoint}`);
console.log(`Timestamp: ${error.timestamp}`);
});
Advanced API Features
Webhooks
Webhook configuration:
// Register webhook
const webhook = await multilogin.post('/webhooks', {
url: 'https://your-app.com/webhook',
events: [
'profile.created',
'profile.updated',
'session.started',
'session.ended',
'automation.completed'
],
secret: 'webhook_secret'
});
Webhook payload example:
{
"event": "automation.completed",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"session_id": "session_123",
"profile_id": "profile_456",
"result": {
"success": true,
"data": { "extracted_data": "value" }
}
},
"signature": "sha256_signature"
}
Rate Limiting
Rate limit handling:
class MultiloginAPI {
constructor(apiKey) {
this.client = axios.create({
baseURL: 'https://api.multilogin.com/v1',
headers: { 'Authorization': `Bearer ${apiKey}` }
});
// Add rate limiting
this.client.interceptors.response.use(
response => response,
async error => {
if (error.response?.status === 429) {
const retryAfter = error.response.headers['retry-after'];
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
return this.client.request(error.config);
}
return Promise.reject(error);
}
);
}
}
Pagination
Handling large datasets:
async function getAllProfiles() {
let allProfiles = [];
let page = 1;
const perPage = 100;
while (true) {
const response = await multilogin.get('/profiles', {
params: {
page: page,
per_page: perPage
}
});
allProfiles = allProfiles.concat(response.data.profiles);
if (response.data.profiles.length < perPage) {
break;
}
page++;
}
return allProfiles;
}
Integration Examples
E-commerce Automation
Product monitoring:
class EcommerceMonitor {
constructor(multilogin) {
this.multilogin = multilogin;
}
async monitorProduct(url, profileId) {
const session = await this.multilogin.post('/automation/sessions', {
profile_id: profileId,
url: url
});
const result = await this.multilogin.post(
`/automation/sessions/${session.data.session_id}/execute`,
{
script: `
const price = document.querySelector('.price').textContent;
const availability = document.querySelector('.availability').textContent;
return { price, availability };
`
}
);
await this.multilogin.delete(`/automation/sessions/${session.data.session_id}`);
return result.data;
}
}
Social Media Management
Automated posting:
class SocialMediaManager {
async postToPlatform(platform, content, profileId) {
const session = await multilogin.post('/automation/sessions', {
profile_id: profileId,
url: this.getPlatformUrl(platform)
});
await multilogin.post(`/automation/sessions/${session.data.session_id}/execute`, {
script: `
// Login and post content
await page.type('#username', '${credentials.username}');
await page.type('#password', '${credentials.password}');
await page.click('#login-button');
await page.waitForNavigation();
await page.type('#post-content', '${content}');
await page.click('#post-button');
`
});
await multilogin.delete(`/automation/sessions/${session.data.session_id}`);
}
}
Data Collection Pipeline
Web scraping workflow:
class DataCollector {
async collectData(targets, profileId) {
const results = [];
for (const target of targets) {
try {
const session = await multilogin.post('/automation/sessions', {
profile_id: profileId,
url: target.url
});
const data = await multilogin.post(
`/automation/sessions/${session.data.session_id}/execute`,
{ script: target.scrapingScript }
);
results.push({
url: target.url,
data: data.data,
success: true
});
await multilogin.delete(`/automation/sessions/${session.data.session_id}`);
// Respect rate limits
await new Promise(resolve => setTimeout(resolve, 2000));
} catch (error) {
results.push({
url: target.url,
error: error.message,
success: false
});
}
}
return results;
}
}
Error Handling and Best Practices
Error Handling
Comprehensive error handling:
async function apiCallWithRetry(endpoint, options, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await multilogin.request({
url: endpoint,
...options
});
return response.data;
} catch (error) {
const isRetryable = error.response?.status >= 500 ||
error.response?.status === 429 ||
error.code === 'ECONNRESET';
if (!isRetryable || attempt === maxRetries) {
throw error;
}
// Exponential backoff
const delay = Math.pow(2, attempt) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}
Best Practices
API usage guidelines:
- Rate limiting: Respect API rate limits and implement backoff
- Error handling: Implement comprehensive error handling
- Logging: Log API calls for debugging and monitoring
- Timeouts: Set appropriate timeouts for all requests
- Validation: Validate input data before API calls
Security practices:
- API key security: Store keys securely, rotate regularly
- HTTPS only: Always use HTTPS for API calls
- Input validation: Validate and sanitize all input data
- Audit logging: Log sensitive operations for security
Monitoring and Debugging
API Monitoring
Request logging:
// Add request/response logging
multilogin.interceptors.request.use(config => {
console.log(`API Request: ${config.method.toUpperCase()} ${config.url}`);
return config;
});
multilogin.interceptors.response.use(response => {
console.log(`API Response: ${response.status} ${response.config.url}`);
return response;
}, error => {
console.error(`API Error: ${error.response?.status} ${error.config.url}`);
return Promise.reject(error);
});
Debugging Tools
API debugging:
// Enable debug mode
const debugMultilogin = axios.create({
baseURL: 'https://api.multilogin.com/v1',
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
// Add detailed logging
debugMultilogin.interceptors.request.use(config => {
console.log('Request Details:', {
url: config.url,
method: config.method,
headers: config.headers,
data: config.data
});
return config;
});
Conclusion
Multilogin’s API provides powerful automation capabilities for account management and operational workflows. By following best practices and implementing proper error handling, you can build robust integrations that scale with your business needs.
Key API takeaways:
- Use RESTful endpoints with proper authentication
- Implement comprehensive error handling and retries
- Monitor API usage and performance
- Follow security best practices
- Use webhooks for real-time notifications
Exclusive API Integration Offer
Automate your workflows with Multilogin API. Use coupon code SAAS50 for 50% off and get full API access for advanced automation.
Automate Now →