TL;DR
Make (eski adıyla Integromat) API'si, geliştiricilerin iş akışlarını otomatikleştirmesini, senaryoları yönetmesini ve entegrasyonları programatik olarak yürütmesini sağlar. Planına bağlı olarak dakikada 60-600 istek hız limitleri ile OAuth 2.0 ve API anahtarı kimlik doğrulamasını, senaryolar, yürütmeler, webhook'lar ve ekipler için RESTful uç noktalarını kullanır. Bu rehber, kimlik doğrulama kurulumunu, senaryo yönetimini, webhook tetikleyicilerini, yürütme izlemeyi ve üretim otomasyonu stratejilerini kapsar.
Giriş
Make (Integromat), 100'den fazla ülkede 1 milyondan fazla kullanıcı için aylık 2 milyardan fazla işlem yürütür. Otomasyon araçları geliştiren, müşteri iş akışlarını yöneten veya 1000'den fazla uygulamayla entegrasyon yapan geliştiriciler için Make API entegrasyonu isteğe bağlı değil, ölçeklenebilir otomasyon için vazgeçilmezdir.
Gerçek şu ki: 50'den fazla müşteri otomasyonunu yöneten ajanslar, manuel senaryo güncellemeleri, yürütme izleme ve müşteri raporlaması için haftalık 15-25 saat kaybediyor. Sağlam bir Make API entegrasyonu, senaryo dağıtımını, yürütme takibini, hata yönetimini ve beyaz etiket raporlamayı otomatikleştirir.
Bu rehber, eksiksiz Make API entegrasyon sürecini anlatmaktadır. OAuth 2.0 ve API anahtarı kimlik doğrulamasını, senaryo yönetimini, webhook tetikleyicilerini, yürütme izlemeyi, ekip yönetimini ve üretim dağıtım stratejilerini öğreneceksiniz. Sonunda, üretime hazır bir Make entegrasyonuna sahip olacaksınız.
Make API Nedir?
Make, otomasyon iş akışlarını programatik olarak yönetmek için RESTful bir API sağlar. API şunları yönetir:
- Senaryo oluşturma, güncelleme ve silme
- Senaryo yürütme (manuel tetikleme)
- Yürütme geçmişi ve izleme
- Webhook yönetimi
- Ekip ve kullanıcı yönetimi
- Bağlantı ve uygulama yönetimi
- Organizasyon ve çalışma alanı ayarları
Temel Özellikler
| Özellik | Açıklama |
|---|---|
| RESTful API | JSON tabanlı uç noktalar |
| OAuth 2.0 + API Anahtarları | Esnek kimlik doğrulama |
| Webhook'lar | Gerçek zamanlı yürütme bildirimleri |
| Hız Sınırlaması | Plana göre dakikada 60-600 istek |
| Senaryo Yönetimi | Tam CRUD operasyonları |
| Yürütme Kontrolü | Çalışmaları başlatma, durdurma, izleme |
| Ekip API'si | Kullanıcı ve izin yönetimi |
Make Planları ve API Erişimi
| Plan | API Erişimi | Hız Sınırı | En İyisi |
|---|---|---|---|
| Ücretsiz | Sınırlı | 60/dk | Test, öğrenme |
| Core | Tam API | 120/dk | Küçük işletmeler |
| Pro | Tam API + Öncelik | 300/dk | Büyüyen ekipler |
| Ekipler | Tam API + Yönetici | 600/dk | Ajanslar, kurumsal firmalar |
| Kurumsal | Özel limitler | Özel | Büyük organizasyonlar |
API Mimarisinin Genel Bakışı
Make, RESTful API yapısını kullanır:
https://api.make.com/api/v2/
API Sürümleri
| Sürüm | Durum | Kullanım Alanı |
|---|---|---|
| v2 | Mevcut | Tüm yeni entegrasyonlar |
| v1 | Kullanımdan Kaldırıldı | Eski entegrasyonlar (geçiş yapın) |
Başlarken: Kimlik Doğrulama Kurulumu
Adım 1: Make Hesabı Oluşturma
API'ye erişmeden önce:
- Make.com adresini ziyaret edin
- Hesap için kaydolun
- Ayarlar > Geliştirici ayarları bölümüne gidin
- API kimlik bilgilerini oluşturun
Adım 2: Kimlik Doğrulama Yöntemini Seçme
Make iki kimlik doğrulama yöntemini destekler:
| Yöntem | En İyisi | Güvenlik Seviyesi |
|---|---|---|
| API Anahtarı | Dahili entegrasyonlar, betikler | Yüksek (güvenli saklayın) |
| OAuth 2.0 | Çok kiracılı uygulamalar, istemci entegrasyonları | Daha yüksek (kullanıcı kapsamlı token'lar) |
Adım 3: API Anahtarını Alma (En Basit Yöntem)
Dahili kullanım için API anahtarı oluşturun:
- Ayarlar > Geliştirici ayarları bölümüne gidin
- API anahtarı oluştur düğmesine tıklayın
- Kopyalayın ve güvenli bir şekilde saklayın
# .env file
MAKE_API_KEY="your_api_key_here"
MAKE_ORGANIZATION_ID="your_org_id"
Adım 4: OAuth 2.0 Kurulumu (Çok Kiracılı Uygulamalar İçin)
İstemci entegrasyonları için OAuth'u yapılandırın:
- Ayarlar > Geliştirici ayarları > OAuth uygulamaları bölümüne gidin
- OAuth uygulaması oluştur düğmesine tıklayın
- Yönlendirme URI'sini yapılandırın
- İstemci kimlik bilgilerini alın
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;
// Build authorization URL
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()}`;
};
Adım 5: Erişim Tokenı İçin Kodu Değiştirme
OAuth geri aramasını işleyin:
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
};
};
// Handle callback
app.get('/oauth/callback', async (req, res) => {
const { code, state } = req.query;
try {
const tokens = await exchangeCodeForToken(code);
// Store tokens securely
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');
}
});
Adım 6: Kimliği Doğrulanmış API Çağrıları Yapma
Yeniden kullanılabilir bir API istemcisi oluşturun:
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();
};
// Usage
const scenarios = await makeRequest('/scenarios');
console.log(`Found ${scenarios.data.length} scenarios`);
Senaryo Yönetimi
Senaryoları Listeleme
Tüm senaryoları getir:
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;
};
// Usage
const scenarios = await listScenarios({ limit: 100 });
scenarios.data.forEach(scenario => {
console.log(`${scenario.name} - ${scenario.active ? 'Active' : 'Paused'}`);
console.log(` Last run: ${scenario.lastRunDate || 'Never'}`);
});
Senaryo Detaylarını Alma
Tek senaryoyu getir:
const getScenario = async (scenarioId) => {
const response = await makeRequest(`/scenarios/${scenarioId}`);
return response;
};
// Usage
const scenario = await getScenario('12345');
console.log(`Name: ${scenario.name}`);
console.log(`Modules: ${scenario.modules.length}`);
console.log(`Schedule: ${scenario.schedule?.cronExpression || 'Manual'}`);
Senaryo Oluşturma
Yeni senaryo oluştur:
const createScenario = async (scenarioData) => {
const scenario = {
name: scenarioData.name,
blueprint: scenarioData.blueprint, // Scenario 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;
};
// Usage - Create from blueprint
const newScenario = await createScenario({
name: 'Lead Sync to CRM',
blueprint: {
// Scenario blueprint JSON
// Export from Make editor or build programmatically
modules: [
{
id: 1,
app: 'webhooks',
action: 'customWebhook',
parameters: { /* ... */ }
},
{
id: 2,
app: 'salesforce',
action: 'createRecord',
parameters: { /* ... */ }
}
],
connections: [
{ from: 1, to: 2 }
]
},
active: true,
description: 'Sync webhook leads to Salesforce'
});
console.log(`Scenario created: ${newScenario.id}`);
Senaryoyu Güncelleme
Senaryo yapılandırmasını değiştir:
const updateScenario = async (scenarioId, updates) => {
const response = await makeRequest(`/scenarios/${scenarioId}`, {
method: 'PATCH',
body: JSON.stringify(updates)
});
return response;
};
// Usage - Pause scenario
await updateScenario('12345', { active: false });
// Usage - Update schedule
await updateScenario('12345', {
schedule: {
cronExpression: '0 */6 * * *', // Every 6 hours
timezone: 'America/New_York'
}
});
Senaryoyu Silme
Senaryoyu kaldır:
const deleteScenario = async (scenarioId) => {
await makeRequest(`/scenarios/${scenarioId}`, {
method: 'DELETE'
});
console.log(`Scenario ${scenarioId} deleted`);
};
Yürütme Yönetimi
Senaryo Yürütmeyi Tetikleme
Senaryoyu manuel olarak çalıştır:
const executeScenario = async (scenarioId, inputData = null) => {
const response = await makeRequest(`/scenarios/${scenarioId}/execute`, {
method: 'POST',
body: inputData ? JSON.stringify(inputData) : undefined
});
return response;
};
// Usage - Run without input
const execution = await executeScenario('12345');
console.log(`Execution started: ${execution.id}`);
// Usage - Run with input data
const executionWithData = await executeScenario('12345', {
lead: {
email: 'prospect@example.com',
name: 'John Doe',
company: 'Acme Corp'
}
});
Yürütme Geçmişini Alma
Yürütme günlüklerini getir:
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;
};
// Usage - Get failed executions from last 24 hours
const failedExecutions = await getExecutionHistory('12345', {
from: new Date(Date.now() - 86400000).toISOString(),
status: 'error',
limit: 100
});
failedExecutions.data.forEach(exec => {
console.log(`Execution ${exec.id}: ${exec.error?.message}`);
});
Yürütme Detaylarını Alma
Tek yürütmeyi getir:
const getExecution = async (executionId) => {
const response = await makeRequest(`/executions/${executionId}`);
return response;
};
// Usage
const execution = await getExecution('98765');
console.log(`Status: ${execution.status}`);
console.log(`Duration: ${execution.duration}ms`);
console.log(`Modules executed: ${execution.modulesExecuted}`);
Çalışan Yürütmeyi Durdurma
Yürütmeyi iptal et:
const stopExecution = async (executionId) => {
await makeRequest(`/executions/${executionId}`, {
method: 'DELETE'
});
console.log(`Execution ${executionId} stopped`);
};
Webhook Yönetimi
Webhook Oluşturma
Gelen webhook'u kur:
const createWebhook = async (webhookData) => {
const webhook = {
name: webhookData.name,
scenarioId: webhookData.scenarioId,
type: 'custom', // 'custom' or 'raw'
hookType: 'HEAD', // 'HEAD' or 'GET'
security: {
type: 'none' // 'none', 'basic', 'token'
}
};
const response = await makeRequest('/webhooks', {
method: 'POST',
body: JSON.stringify(webhook)
});
return response;
};
// Usage
const webhook = await createWebhook({
name: 'Lead Capture Webhook',
scenarioId: '12345',
type: 'custom',
hookType: 'HEAD',
security: { type: 'none' }
});
console.log(`Webhook URL: ${hook.url}`);
Webhook'ları Listeleme
Tüm webhook'ları getir:
const listWebhooks = async () => {
const response = await makeRequest('/webhooks');
return response;
};
// Usage
const webhooks = await listWebhooks();
webhooks.data.forEach(webhook => {
console.log(`${webhook.name}: ${webhook.url}`);
});
Webhook Silme
Webhook'u kaldır:
const deleteWebhook = async (webhookId) => {
await makeRequest(`/webhooks/${webhookId}`, {
method: 'DELETE'
});
console.log(`Webhook ${webhookId} deleted`);
};
Ekip ve Kullanıcı Yönetimi
Ekip Üyelerini Listeleme
Organizasyondaki kullanıcıları getir:
const listTeamMembers = async (organizationId) => {
const response = await makeRequest(`/organizations/${organizationId}/users`);
return response;
};
// Usage
const members = await listTeamMembers('org-123');
members.data.forEach(member => {
console.log(`${member.email} - ${member.role}`);
});
Ekip Üyesi Ekleme
Kullanıcıyı organizasyona davet et:
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;
};
// Usage
await addTeamMember('org-123', 'newuser@example.com', 'builder');
Kullanıcı Rolünü Güncelleme
Kullanıcı izinlerini değiştir:
const updateUserRole = async (organizationId, userId, newRole) => {
await makeRequest(`/organizations/${organizationId}/users/${userId}`, {
method: 'PATCH',
body: JSON.stringify({ role: newRole })
});
console.log(`User ${userId} role updated to ${newRole}`);
};
Kullanıcı Rolleri
| Rol | İzinler |
|---|---|
| Görüntüleyici | Senaryoları görüntüle, düzenleme yapamaz |
| Oluşturucu | Senaryo oluştur/düzenle |
| Yönetici | Ekibi, faturalandırmayı yönet |
| Yönetici (Admin) | Tam organizasyon erişimi |
Hız Sınırlaması
Hız Sınırlamalarını Anlama
Make, plana göre hız sınırlamaları uygular:
| Plan | İstek/Dakika | Anlık Limit |
|---|---|---|
| Ücretsiz | 60 | 100 |
| Core | 120 | 200 |
| Pro | 300 | 500 |
| Ekipler | 600 | 1000 |
| Kurumsal | Özel | Özel |
Hız Sınırlaması Başlıkları
| Başlık | Açıklama |
|---|---|
X-RateLimit-Limit |
Dakikadaki maksimum istek sayısı |
X-RateLimit-Remaining |
Kalan istek sayısı |
X-RateLimit-Reset |
Sıfırlanana kadar kalan saniye |
Hız Sınırlaması İşlemeyi Uygulama
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(`Low rate limit: ${remaining} remaining`);
}
return response;
} catch (error) {
if (error.message.includes('429') && attempt < maxRetries) {
const delay = Math.pow(2, attempt) * 1000;
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(resolve => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
};
Üretim Dağıtımı Kontrol Listesi
Canlıya geçmeden önce:
- [ ] Dahili entegrasyonlar için API anahtarları, istemci entegrasyonları için OAuth kullanın
- [ ] Kimlik bilgilerini güvenli bir şekilde saklayın (şifreli veritabanı)
- [ ] Hız sınırlaması ve istek kuyruklamasını uygulayın
- [ ] Yürütme izleme ve uyarıları kurun
- [ ] Hata bildirimlerini yapılandırın (e-posta, Slack)
- [ ] Başarısız yürütmeler için yeniden deneme mantığı uygulayın
- [ ] Kapsamlı günlük kaydı ekleyin
- [ ] Kritik senaryoların yedeklemesini/dışa aktarımını oluşturun
Gerçek Dünya Kullanım Durumları
Ajans Müşteri Yönetimi
Bir pazarlama ajansı 100'den fazla müşteri otomasyonunu yönetiyor:
- Zorluk: Müşteri hesaplarında manuel senaryo güncellemeleri
- Çözüm: Make API'li merkezi kontrol paneli
- Sonuç: %70 zaman tasarrufu, tutarlı dağıtımlar
Temel uygulama:
- Çoklu hesap OAuth entegrasyonu
- Toplu senaryo dağıtımı
- Müşteri kullanım raporlaması
E-ticaret Sipariş İşleme
Bir online mağaza sipariş yerine getirmeyi otomatikleştirir:
- Zorluk: Depo sistemine manuel sipariş girişi
- Çözüm: Webhook ile tetiklenen Make senaryosu
- Sonuç: Sıfır manuel giriş, %99.9 doğruluk
Temel uygulama:
- Shopify webhook'u Make'e
- Senaryo siparişi işler, depoyu günceller
- Yeniden deneme mantığı ile hata yönetimi
Sonuç
Make API'si kapsamlı iş akışı otomasyon yetenekleri sunar. Temel çıkarımlar:
- Dahili kullanım için API anahtarı, çok kiracılı uygulamalar için OAuth 2.0
- Senaryolar, yürütmeler, webhook'lar için tam CRUD
- Organizasyon kontrolü için ekip yönetimi
- Hız limitleri plana göre değişir (dakikada 60-600 istek)
- Üretim için yürütme izleme esastır
- Apidog, API testlerini ve ekip işbirliğini kolaylaştırır
Make API ile nasıl kimlik doğrularım?
Dahili entegrasyonlar için Geliştirici ayarlarından API anahtarı kullanın veya çok kiracılı uygulamalar için OAuth 2.0 kullanın.
Senaryoları programatik olarak tetikleyebilir miyim?
Evet, isteğe bağlı giriş verileriyle senaryo çalışmalarını manuel olarak tetiklemek için /scenarios/{id}/execute uç noktasını kullanın.
Make hız sınırlamaları nelerdir?
Hız sınırlamaları dakikada 60 istekten (Ücretsiz) dakikada 600 isteğe (Ekipler/Kurumsal) kadar değişir.
Yürütme günlüklerini nasıl alırım?
Tarih ve duruma göre filtreleme ile yürütme geçmişini almak için /scenarios/{id}/executions kullanın.
API aracılığıyla webhook oluşturabilir miyim?
Evet, senaryolar için webhook oluşturmak, listelemek ve silmek için /webhooks uç noktasını kullanın.
