DEV Community

Cover image for Cara Menggunakan API Make (Integromat): Panduan Lengkap
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menggunakan API Make (Integromat): Panduan Lengkap

Intinya

API Make (sebelumnya Integromat) memungkinkan pengembang mengotomatiskan alur kerja, mengelola skenario, dan mengeksekusi integrasi secara terprogram. Otentikasi menggunakan OAuth 2.0 atau kunci API, dengan endpoint RESTful untuk skenario, eksekusi, webhook, dan tim. Rate limit 60–600 permintaan/menit tergantung paket. Panduan ini membahas pengaturan otentikasi, manajemen skenario, pemicu webhook, pemantauan eksekusi, dan strategi otomatisasi produksi.

Coba Apidog hari ini

Pendahuluan

Make (Integromat) memproses lebih dari 2 miliar operasi tiap bulan untuk 1+ juta pengguna di 100+ negara. Jika Anda membangun alat otomatisasi, mengelola alur kerja klien, atau mengintegrasikan dengan 1000+ aplikasi, Make API adalah pilihan utama untuk otomatisasi yang skalabel.

Agensi dengan 50+ otomatisasi klien bisa kehilangan 15–25 jam/minggu untuk pembaruan skenario manual, monitoring eksekusi, dan pelaporan klien. Integrasi Make API yang solid akan mengotomatiskan deployment skenario, tracking eksekusi, penanganan error, dan pelaporan white-label.

Panduan ini membahas proses integrasi Make API secara end-to-end. Anda akan mempelajari otentikasi OAuth 2.0 dan API key, manajemen skenario, pemicu webhook, monitoring eksekusi, manajemen tim, dan strategi deployment produksi. Hasil akhirnya: integrasi Make siap produksi.

💡Apidog menyederhanakan pengujian integrasi API. Uji endpoint Make Anda, validasi alur OAuth, periksa respons eksekusi, dan debug masalah otomatisasi dalam satu workspace. Impor spesifikasi API, mock respons, dan bagikan skenario pengujian ke tim.

Apa Itu Make API?

Make menyediakan API RESTful untuk mengelola workflow otomatisasi secara terprogram. Fungsi utama:

  • CRUD skenario (create, update, delete)
  • Menjalankan skenario (manual trigger)
  • Riwayat & monitoring eksekusi
  • Manajemen webhook
  • Manajemen tim & user
  • Manajemen koneksi & aplikasi
  • Pengaturan organisasi & workspace

Fitur Utama

Fitur Deskripsi
API RESTful Titik akhir berbasis JSON
OAuth 2.0 + Kunci API Otentikasi fleksibel
Webhook Notifikasi eksekusi realtime
Pembatasan Tingkat (Rate Limiting) 60-600 permintaan/menit berdasar paket
Manajemen Skenario CRUD lengkap
Kontrol Eksekusi Mulai, stop, monitor run
API Tim Manajemen user & izin

Paket Make dan Akses API

Paket Akses API Batas Tingkat (Rate Limit) Terbaik Untuk
Gratis Terbatas 60/menit Testing, belajar
Inti (Core) API penuh 120/menit Bisnis kecil
Pro API penuh + prioritas 300/menit Tim berkembang
Tim (Teams) API penuh + admin 600/menit Agensi, perusahaan
Enterprise Kustom Kustom Enterprise

Ikhtisar Arsitektur API

Struktur dasar endpoint:

https://api.make.com/api/v2/
Enter fullscreen mode Exit fullscreen mode

Versi API

Versi Status Kasus Penggunaan
v2 Saat ini Semua integrasi baru
v1 Deprecated Integrasi lama (segera migrasi)

Memulai: Pengaturan Otentikasi

Langkah 1: Membuat Akun Make

  1. Kunjungi Make.com
  2. Daftar akun
  3. Masuk ke Settings > Developer settings
  4. Generate kredensial API

Langkah 2: Pilih Metode Otentikasi

Metode Terbaik Untuk Keamanan
Kunci API Integrasi internal, skrip Tinggi (simpan aman)
OAuth 2.0 Aplikasi multi-tenant, integrasi klien Lebih tinggi (token lingkup user)

Langkah 3: Mendapatkan Kunci API (Termudah)

  1. Masuk ke Settings > Developer settings
  2. Klik Create API key
  3. Salin & simpan aman
# file .env
MAKE_API_KEY="kunci_api_anda_di_sini"
MAKE_ORGANIZATION_ID="id_organisasi_anda"
Enter fullscreen mode Exit fullscreen mode

Langkah 4: Konfigurasi OAuth 2.0 (Multi-Tenant)

  1. Masuk ke Settings > Developer settings > OAuth apps
  2. Klik Create OAuth app
  3. Set URI redirect
  4. Salin client credentials
const MAKE_CLIENT_ID = process.env.MAKE_CLIENT_ID;
const MAKE_CLIENT_SECRET = process.env.MAKE_CLIENT_SECRET;
const MAKE_REDIRECT_URI = process.env.MAKE_REDIRECT_URI;

const getAuthUrl = (state) => {
  const params = new URLSearchParams({
    client_id: MAKE_CLIENT_ID,
    redirect_uri: MAKE_REDIRECT_URI,
    scope: 'read write execute',
    state: state,
    response_type: 'code'
  });

  return `https://www.make.com/oauth/authorize?${params.toString()}`;
};
Enter fullscreen mode Exit fullscreen mode

Langkah 5: Tukar Kode untuk Token Akses

const exchangeCodeForToken = async (code) => {
  const response = await fetch('https://www.make.com/oauth/token', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      grant_type: 'authorization_code',
      client_id: MAKE_CLIENT_ID,
      client_secret: MAKE_CLIENT_SECRET,
      redirect_uri: MAKE_REDIRECT_URI,
      code: code
    })
  });

  const data = await response.json();

  return {
    accessToken: data.access_token,
    refreshToken: data.refresh_token,
    expiresIn: data.expires_in
  };
};

// Endpoint callback
app.get('/oauth/callback', async (req, res) => {
  const { code, state } = req.query;

  try {
    const tokens = await exchangeCodeForToken(code);

    // Simpan token secara aman
    await db.integrations.create({
      userId: req.session.userId,
      accessToken: tokens.accessToken,
      refreshToken: tokens.refreshToken,
      tokenExpiry: Date.now() + (tokens.expiresIn * 1000)
    });

    res.redirect('/success');
  } catch (error) {
    console.error('OAuth error:', error);
    res.status(500).send('Authentication failed');
  }
});
Enter fullscreen mode Exit fullscreen mode

Langkah 6: Request API Terotentikasi

const MAKE_BASE_URL = 'https://api.make.com/api/v2';

const makeRequest = async (endpoint, options = {}) => {
  const apiKey = options.useOAuth ? await getOAuthToken() : process.env.MAKE_API_KEY;

  const response = await fetch(`${MAKE_BASE_URL}${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Token ${apiKey}`,
      'Content-Type': 'application/json',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Make API Error: ${error.message}`);
  }

  return response.json();
};

// Contoh penggunaan
const scenarios = await makeRequest('/scenarios');
console.log(`Ditemukan ${scenarios.data.length} skenario`);
Enter fullscreen mode Exit fullscreen mode

Manajemen Skenario

Mendaftar Skenario

Ambil seluruh skenario dengan filter:

const listScenarios = async (filters = {}) => {
  const params = new URLSearchParams({
    limit: filters.limit || 50,
    offset: filters.offset || 0
  });

  if (filters.folder) {
    params.append('folder', filters.folder);
  }

  const response = await makeRequest(`/scenarios?${params.toString()}`);
  return response;
};

// Contoh
const scenarios = await listScenarios({ limit: 100 });
scenarios.data.forEach(scenario => {
  console.log(`${scenario.name} - ${scenario.active ? 'Aktif' : 'Dijeda'}`);
  console.log(`  Jalankan terakhir: ${scenario.lastRunDate || 'Tidak Pernah'}`);
});
Enter fullscreen mode Exit fullscreen mode

Mendapatkan Detail Skenario

const getScenario = async (scenarioId) => {
  const response = await makeRequest(`/scenarios/${scenarioId}`);
  return response;
};

// Contoh
const scenario = await getScenario('12345');
console.log(`Nama: ${scenario.name}`);
console.log(`Modul: ${scenario.modules.length}`);
console.log(`Jadwal: ${scenario.schedule?.cronExpression || 'Manual'}`);
Enter fullscreen mode Exit fullscreen mode

Membuat Skenario

const createScenario = async (scenarioData) => {
  const scenario = {
    name: scenarioData.name,
    blueprint: scenarioData.blueprint, // JSON blueprint
    active: scenarioData.active || false,
    priority: scenarioData.priority || 1,
    maxErrors: scenarioData.maxErrors || 3,
    autoCommit: scenarioData.autoCommit || true,
    description: scenarioData.description || ''
  };

  const response = await makeRequest('/scenarios', {
    method: 'POST',
    body: JSON.stringify(scenario)
  });

  return response;
};

// Contoh
const newScenario = await createScenario({
  name: 'Sinkronisasi Prospek ke CRM',
  blueprint: {
    modules: [
      {
        id: 1,
        app: 'webhooks',
        action: 'customWebhook',
        parameters: { /* ... */ }
      },
      {
        id: 2,
        app: 'salesforce',
        action: 'createRecord',
        parameters: { /* ... */ }
      }
    ],
    connections: [
      { from: 1, to: 2 }
    ]
  },
  active: true,
  description: 'Sinkronkan prospek webhook ke Salesforce'
});

console.log(`Skenario dibuat: ${newScenario.id}`);
Enter fullscreen mode Exit fullscreen mode

Memperbarui Skenario

const updateScenario = async (scenarioId, updates) => {
  const response = await makeRequest(`/scenarios/${scenarioId}`, {
    method: 'PATCH',
    body: JSON.stringify(updates)
  });

  return response;
};

// Jeda skenario
await updateScenario('12345', { active: false });

// Update jadwal
await updateScenario('12345', {
  schedule: {
    cronExpression: '0 */6 * * *', // Tiap 6 jam
    timezone: 'America/New_York'
  }
});
Enter fullscreen mode Exit fullscreen mode

Menghapus Skenario

const deleteScenario = async (scenarioId) => {
  await makeRequest(`/scenarios/${scenarioId}`, {
    method: 'DELETE'
  });

  console.log(`Skenario ${scenarioId} dihapus`);
};
Enter fullscreen mode Exit fullscreen mode

Manajemen Eksekusi

Memicu Eksekusi Skenario

const executeScenario = async (scenarioId, inputData = null) => {
  const response = await makeRequest(`/scenarios/${scenarioId}/execute`, {
    method: 'POST',
    body: inputData ? JSON.stringify(inputData) : undefined
  });

  return response;
};

// Jalankan tanpa input
const execution = await executeScenario('12345');
console.log(`Eksekusi dimulai: ${execution.id}`);

// Jalankan dengan data input
const executionWithData = await executeScenario('12345', {
  lead: {
    email: 'prospect@example.com',
    name: 'John Doe',
    company: 'Acme Corp'
  }
});
Enter fullscreen mode Exit fullscreen mode

Mendapatkan Riwayat Eksekusi

const getExecutionHistory = async (scenarioId, filters = {}) => {
  const params = new URLSearchParams({
    limit: filters.limit || 50,
    from: filters.from,
    to: filters.to,
    status: filters.status // 'success', 'error', 'running'
  });

  const response = await makeRequest(`/scenarios/${scenarioId}/executions?${params.toString()}`);
  return response;
};

// Eksekusi gagal 24 jam terakhir
const failedExecutions = await getExecutionHistory('12345', {
  from: new Date(Date.now() - 86400000).toISOString(),
  status: 'error',
  limit: 100
});

failedExecutions.data.forEach(exec => {
  console.log(`Eksekusi ${exec.id}: ${exec.error?.message}`);
});
Enter fullscreen mode Exit fullscreen mode

Mendapatkan Detail Eksekusi

const getExecution = async (executionId) => {
  const response = await makeRequest(`/executions/${executionId}`);
  return response;
};

// Contoh
const execution = await getExecution('98765');
console.log(`Status: ${execution.status}`);
console.log(`Durasi: ${execution.duration}ms`);
console.log(`Modul dieksekusi: ${execution.modulesExecuted}`);
Enter fullscreen mode Exit fullscreen mode

Menghentikan Eksekusi Berjalan

const stopExecution = async (executionId) => {
  await makeRequest(`/executions/${executionId}`, {
    method: 'DELETE'
  });

  console.log(`Eksekusi ${executionId} dihentikan`);
};
Enter fullscreen mode Exit fullscreen mode

Manajemen Webhook

Membuat Webhook

const createWebhook = async (webhookData) => {
  const webhook = {
    name: webhookData.name,
    scenarioId: webhookData.scenarioId,
    type: 'custom', // 'custom' atau 'raw'
    hookType: 'HEAD', // 'HEAD' atau 'GET'
    security: {
      type: 'none' // 'none', 'basic', 'token'
    }
  };

  const response = await makeRequest('/webhooks', {
    method: 'POST',
    body: JSON.stringify(webhook)
  });

  return response;
};

// Contoh
const webhook = await createWebhook({
  name: 'Webhook Tangkap Prospek',
  scenarioId: '12345',
  type: 'custom',
  hookType: 'HEAD',
  security: { type: 'none' }
});

console.log(`URL Webhook: ${hook.url}`);
Enter fullscreen mode Exit fullscreen mode

Mendaftar Webhook

const listWebhooks = async () => {
  const response = await makeRequest('/webhooks');
  return response;
};

// Contoh
const webhooks = await listWebhooks();
webhooks.data.forEach(webhook => {
  console.log(`${webhook.name}: ${webhook.url}`);
});
Enter fullscreen mode Exit fullscreen mode

Menghapus Webhook

const deleteWebhook = async (webhookId) => {
  await makeRequest(`/webhooks/${webhookId}`, {
    method: 'DELETE'
  });

  console.log(`Webhook ${webhookId} dihapus`);
};
Enter fullscreen mode Exit fullscreen mode

Manajemen Tim dan Pengguna

Mendaftar Anggota Tim

const listTeamMembers = async (organizationId) => {
  const response = await makeRequest(`/organizations/${organizationId}/users`);
  return response;
};

// Contoh
const members = await listTeamMembers('org-123');
members.data.forEach(member => {
  console.log(`${member.email} - ${member.role}`);
});
Enter fullscreen mode Exit fullscreen mode

Menambah Anggota Tim

const addTeamMember = async (organizationId, email, role) => {
  const response = await makeRequest(`/organizations/${organizationId}/users`, {
    method: 'POST',
    body: JSON.stringify({
      email: email,
      role: role // 'viewer', 'builder', 'manager', 'admin'
    })
  });

  return response;
};

// Contoh
await addTeamMember('org-123', 'newuser@example.com', 'builder');
Enter fullscreen mode Exit fullscreen mode

Memperbarui Peran Pengguna

const updateUserRole = async (organizationId, userId, newRole) => {
  await makeRequest(`/organizations/${organizationId}/users/${userId}`, {
    method: 'PATCH',
    body: JSON.stringify({ role: newRole })
  });

  console.log(`Peran pengguna ${userId} diperbarui menjadi ${newRole}`);
};
Enter fullscreen mode Exit fullscreen mode

Peran Pengguna

Peran Izin
Peninjau (Viewer) Melihat skenario, tidak bisa edit
Pembangun (Builder) CRUD skenario
Manajer (Manager) Kelola tim, penagihan
Admin Akses penuh organisasi

Pembatasan Tingkat (Rate Limiting)

Memahami Rate Limiting

Paket Permintaan/Menit Batas Ledakan (Burst Limit)
Gratis 60 100
Inti (Core) 120 200
Pro 300 500
Tim (Teams) 600 1000
Enterprise Kustom Kustom

Header Rate Limiting

Header Deskripsi
X-RateLimit-Limit Maks permintaan/menit
X-RateLimit-Remaining Sisa permintaan
X-RateLimit-Reset Detik hingga reset

Penanganan Rate Limiting Otomatis

const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await makeRequest(endpoint, options);

      const remaining = response.headers.get('X-RateLimit-Remaining');
      if (remaining < 10) {
        console.warn(`Batas tingkat rendah: ${remaining} tersisa`);
      }

      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`Batas tingkat tercapai. Mencoba lagi dalam ${delay}ms...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};
Enter fullscreen mode Exit fullscreen mode

Daftar Periksa Deployment Produksi

Sebelum go-live, pastikan:

  • [ ] Gunakan API key untuk internal, OAuth untuk klien
  • [ ] Simpan kredensial secara aman (database terenkripsi)
  • [ ] Terapkan rate limit & antrian request
  • [ ] Setup monitoring & alert eksekusi
  • [ ] Konfigurasi notifikasi error (email, Slack)
  • [ ] Implementasi retry logic untuk eksekusi gagal
  • [ ] Logging menyeluruh
  • [ ] Backup/ekspor skenario penting

Studi Kasus Dunia Nyata

Manajemen Klien Agensi

Agensi pemasaran mengelola 100+ otomatisasi klien:

  • Tantangan: Update manual skenario lintas akun klien
  • Solusi: Dashboard terpusat via Make API
  • Hasil: Hemat waktu 70%, deployment konsisten

Implementasi utama:

  • Integrasi OAuth multi-akun
  • Mass deployment skenario
  • Pelaporan penggunaan klien

Pemrosesan Pesanan E-commerce

Toko online mengotomatiskan pemenuhan pesanan:

  • Tantangan: Entry pesanan manual ke sistem gudang
  • Solusi: Skenario Make dipicu webhook
  • Hasil: Nol entry manual, akurasi 99.9%

Implementasi utama:

  • Webhook Shopify → Make
  • Skenario proses order, update warehouse
  • Error handling dengan retry logic

Kesimpulan

Make API menawarkan otomatisasi workflow yang komprehensif. Rangkuman utama:

  • API key untuk internal, OAuth 2.0 untuk aplikasi multi-tenant
  • CRUD penuh: skenario, eksekusi, webhook
  • Manajemen tim/organisasi
  • Rate limit 60–600 permintaan/menit, tergantung paket
  • Monitoring eksekusi penting untuk produksi
  • Apidog menyederhanakan pengujian API & kolaborasi tim

Bagaimana cara mengotentikasi dengan Make API?

Gunakan API key dari pengaturan Developer untuk integrasi internal atau OAuth 2.0 untuk aplikasi multi-tenant.

Bisakah saya memicu skenario secara terprogram?

Ya. Gunakan endpoint /scenarios/{id}/execute untuk trigger manual skenario dengan data input opsional.

Apa saja batas tingkat Make?

Batas tingkat 60 permintaan/menit (Gratis) hingga 600/menit (Teams/Enterprise).

Bagaimana cara mendapatkan log eksekusi?

Gunakan /scenarios/{id}/executions untuk retrieve riwayat eksekusi, filter berdasarkan tanggal & status.

Bisakah saya membuat webhook via API?

Ya. Endpoint /webhooks bisa untuk create, list, dan delete webhook untuk skenario.

Top comments (0)