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 →