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.
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/
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
- Kunjungi Make.com
- Daftar akun
- Masuk ke Settings > Developer settings
- 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)
- Masuk ke Settings > Developer settings
- Klik Create API key
- Salin & simpan aman
# file .env
MAKE_API_KEY="kunci_api_anda_di_sini"
MAKE_ORGANIZATION_ID="id_organisasi_anda"
Langkah 4: Konfigurasi OAuth 2.0 (Multi-Tenant)
- Masuk ke Settings > Developer settings > OAuth apps
- Klik Create OAuth app
- Set URI redirect
- 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()}`;
};
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');
}
});
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`);
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'}`);
});
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'}`);
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}`);
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'
}
});
Menghapus Skenario
const deleteScenario = async (scenarioId) => {
await makeRequest(`/scenarios/${scenarioId}`, {
method: 'DELETE'
});
console.log(`Skenario ${scenarioId} dihapus`);
};
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'
}
});
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}`);
});
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}`);
Menghentikan Eksekusi Berjalan
const stopExecution = async (executionId) => {
await makeRequest(`/executions/${executionId}`, {
method: 'DELETE'
});
console.log(`Eksekusi ${executionId} dihentikan`);
};
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}`);
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}`);
});
Menghapus Webhook
const deleteWebhook = async (webhookId) => {
await makeRequest(`/webhooks/${webhookId}`, {
method: 'DELETE'
});
console.log(`Webhook ${webhookId} dihapus`);
};
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}`);
});
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');
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}`);
};
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;
}
}
}
};
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)