Make(Integromat) API の使い方

Ashley Innocent

Ashley Innocent

25 3月 2026

Make(Integromat) API の使い方

TL;DR

Make(旧Integromat)APIは、開発者がワークフローの自動化、シナリオの管理、およびインテグレーションのプログラムによる実行を可能にします。OAuth 2.0とAPIキー認証を使用し、シナリオ、実行、ウェブフック、チーム向けのRESTfulエンドポイントを提供します。料金プランに応じて、レート制限は1分あたり60〜600リクエストです。このガイドでは、認証設定、シナリオ管理、ウェブフックトリガー、実行監視、および本番環境での自動化戦略について説明します。

はじめに

Make(Integromat)は、100カ国以上で100万人以上のユーザーのために、毎月20億回以上のオペレーションを処理しています。自動化ツールを構築したり、クライアントのワークフローを管理したり、1000以上のアプリと統合したりする開発者にとって、Make APIとの連携は選択肢ではなく、スケーラブルな自動化に不可欠です。

現実として、50以上のクライアントの自動化を管理しているエージェンシーは、手動でのシナリオ更新、実行監視、クライアントレポート作成に毎週15~25時間を費やしています。堅固なMake API連携は、シナリオのデプロイ、実行追跡、エラー処理、ホワイトラベルレポート作成を自動化します。

このガイドでは、Make API連携の完全なプロセスを順を追って説明します。OAuth 2.0とAPIキー認証、シナリオ管理、ウェブフックトリガー、実行監視、チーム管理、および本番環境デプロイ戦略を学びます。このガイドを読み終える頃には、本番環境に対応したMake連携が完成しているでしょう。

💡
ApidogはAPI連携テストを簡素化します。Makeのエンドポイントのテスト、OAuthフローの検証、実行応答の検査、自動化の問題のデバッグをすべて1つのワークスペースで行えます。API仕様のインポート、モック応答、テストシナリオのチームとの共有も可能です。

ボタン

Make APIとは?

Makeは、自動化ワークフローをプログラムで管理するためのRESTful APIを提供します。このAPIは以下の処理を行います。

主な機能

機能 説明
RESTful API JSONベースのエンドポイント
OAuth 2.0 + APIキー 柔軟な認証
ウェブフック リアルタイム実行通知
レート制限 プランに応じて1分あたり60〜600リクエスト
シナリオ管理 完全なCRUD操作
実行制御 実行の開始、停止、監視
チームAPI ユーザーと権限の管理

MakeのプランとAPIアクセス

プラン APIアクセス レート制限 最適な用途
フリー 制限あり 60/分 テスト、学習
コア フルAPI 120/分 中小企業
プロ フルAPI + 優先 300/分 成長中のチーム
チーム フルAPI + 管理者 600/分 エージェンシー、エンタープライズ
エンタープライズ カスタム制限 カスタム 大規模組織

APIアーキテクチャの概要

MakeはRESTful API構造を使用しています。

https://api.make.com/api/v2/

APIバージョン

バージョン ステータス ユースケース
v2 現在 すべての新しい連携
v1 非推奨 従来の連携(移行が必要)

はじめに: 認証設定

ステップ1: Makeアカウントの作成

APIにアクセスする前に:

  1. Make.comにアクセス
  2. アカウントを登録
  3. 「設定」>「開発者設定」に移動
  4. API認証情報を生成

ステップ2: 認証方法の選択

Makeは2つの認証方法をサポートしています。

方法 最適な用途 セキュリティレベル
APIキー 内部連携、スクリプト 高い(安全に保管)
OAuth 2.0 マルチテナントアプリ、クライアント連携 より高い(ユーザーごとにスコープされたトークン)

ステップ3: APIキーの取得(最も簡単な方法)

内部使用のためのAPIキーを生成します。

  1. 「設定」>「開発者設定」に移動
  2. 「APIキーを作成」をクリック
  3. コピーして安全に保管
# .envファイル
MAKE_API_KEY="your_api_key_here"
MAKE_ORGANIZATION_ID="your_org_id"

ステップ4: OAuth 2.0の設定(マルチテナントアプリ向け)

クライアント連携のためにOAuthを設定します。

  1. 「設定」>「開発者設定」>「OAuthアプリ」に移動
  2. 「OAuthアプリを作成」をクリック
  3. リダイレクトURIを設定
  4. クライアント認証情報を取得
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;

// 認証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()}`;
};

ステップ5: コードをアクセストークンに交換

OAuthコールバックを処理します。

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
  };
};

// コールバックを処理
app.get('/oauth/callback', async (req, res) => {
  const { code, state } = req.query;

  try {
    const tokens = await exchangeCodeForToken(code);

    // トークンを安全に保存
    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('認証に失敗しました');
  }
});

ステップ6: 認証済みAPIコールの実行

再利用可能なAPIクライアントを作成します。

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.message}`);
  }

  return response.json();
};

// 使用例
const scenarios = await makeRequest('/scenarios');
console.log(`${scenarios.data.length}個のシナリオが見つかりました`);

シナリオ管理

シナリオのリスト表示

すべてのシナリオを取得します。

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;
};

// 使用例
const scenarios = await listScenarios({ limit: 100 });
scenarios.data.forEach(scenario => {
  console.log(`${scenario.name} - ${scenario.active ? 'アクティブ' : '一時停止中'}`);
  console.log(`  最終実行日時: ${scenario.lastRunDate || 'なし'}`);
});

シナリオ詳細の取得

単一のシナリオを取得します。

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

// 使用例
const scenario = await getScenario('12345');
console.log(`名前: ${scenario.name}`);
console.log(`モジュール数: ${scenario.modules.length}`);
console.log(`スケジュール: ${scenario.schedule?.cronExpression || '手動'}`);

シナリオの作成

新しいシナリオを作成します。

const createScenario = async (scenarioData) => {
  const scenario = {
    name: scenarioData.name,
    blueprint: scenarioData.blueprint, // シナリオのJSONブループリント
    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;
};

// 使用例 - ブループリントから作成
const newScenario = await createScenario({
  name: 'Lead Sync to CRM',
  blueprint: {
    // シナリオのブループリントJSON
    // Makeエディタからエクスポートするか、プログラムで構築
    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(`シナリオが作成されました: ${newScenario.id}`);

シナリオの更新

シナリオの設定を変更します。

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

  return response;
};

// 使用例 - シナリオの一時停止
await updateScenario('12345', { active: false });

// 使用例 - スケジュールの更新
await updateScenario('12345', {
  schedule: {
    cronExpression: '0 */6 * * *', // 6時間ごと
    timezone: 'America/New_York'
  }
});

シナリオの削除

シナリオを削除します。

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

  console.log(`シナリオ ${scenarioId} が削除されました`);
};

実行管理

シナリオ実行のトリガー

シナリオを手動で実行します。

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

  return response;
};

// 使用例 - 入力なしで実行
const execution = await executeScenario('12345');
console.log(`実行が開始されました: ${execution.id}`);

// 使用例 - 入力データで実行
const executionWithData = await executeScenario('12345', {
  lead: {
    email: 'prospect@example.com',
    name: 'John Doe',
    company: 'Acme Corp'
  }
});

実行履歴の取得

実行ログを取得します。

const getExecutionHistory = async (scenarioId, filters = {}) => {
  const params = new URLSearchParams({
    limit: filters.limit || 50,
    from: filters.from,
    to: filters.to,
    status: filters.status // '成功', 'エラー', '実行中'
  });

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

// 使用例 - 過去24時間のエラー実行を取得
const failedExecutions = await getExecutionHistory('12345', {
  from: new Date(Date.now() - 86400000).toISOString(),
  status: 'error',
  limit: 100
});

failedExecutions.data.forEach(exec => {
  console.log(`実行 ${exec.id}: ${exec.error?.message}`);
});

実行詳細の取得

単一の実行を取得します。

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

// 使用例
const execution = await getExecution('98765');
console.log(`ステータス: ${execution.status}`);
console.log(`期間: ${execution.duration}ms`);
console.log(`実行されたモジュール数: ${execution.modulesExecuted}`);

実行中の実行の停止

実行をキャンセルします。

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

  console.log(`実行 ${executionId} が停止されました`);
};

ウェブフック管理

ウェブフックの作成

受信ウェブフックを設定します。

const createWebhook = async (webhookData) => {
  const webhook = {
    name: webhookData.name,
    scenarioId: webhookData.scenarioId,
    type: 'custom', // 'カスタム' または 'RAW'
    hookType: 'HEAD', // 'HEAD' または 'GET'
    security: {
      type: 'none' // 'なし', '基本', 'トークン'
    }
  };

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

  return response;
};

// 使用例
const webhook = await createWebhook({
  name: 'Lead Capture Webhook',
  scenarioId: '12345',
  type: 'custom',
  hookType: 'HEAD',
  security: { type: 'none' }
});

console.log(`ウェブフックURL: ${hook.url}`);

ウェブフックのリスト表示

すべてのウェブフックを取得します。

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

// 使用例
const webhooks = await listWebhooks();
webhooks.data.forEach(webhook => {
  console.log(`${webhook.name}: ${webhook.url}`);
});

ウェブフックの削除

ウェブフックを削除します。

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

  console.log(`ウェブフック ${webhookId} が削除されました`);
};

チームとユーザー管理

チームメンバーのリスト表示

組織内のユーザーを取得します。

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

// 使用例
const members = await listTeamMembers('org-123');
members.data.forEach(member => {
  console.log(`${member.email} - ${member.role}`);
});

チームメンバーの追加

ユーザーを組織に招待します。

const addTeamMember = async (organizationId, email, role) => {
  const response = await makeRequest(`/organizations/${organizationId}/users`, {
    method: 'POST',
    body: JSON.stringify({
      email: email,
      role: role // 'ビューアー', 'ビルダー', 'マネージャー', '管理者'
    })
  });

  return response;
};

// 使用例
await addTeamMember('org-123', 'newuser@example.com', 'builder');

ユーザーロールの更新

ユーザー権限を変更します。

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

  console.log(`ユーザー ${userId} のロールが ${newRole} に更新されました`);
};

ユーザーロール

ロール 権限
ビューアー シナリオの表示、編集不可
ビルダー シナリオの作成/編集
マネージャー チーム、請求の管理
管理者 組織へのフルアクセス

レート制限

レート制限の理解

Makeはプランごとにレート制限を適用します。

プラン 1分あたりのリクエスト数 バースト制限
フリー 60 100
コア 120 200
プロ 300 500
チーム 600 1000
エンタープライズ カスタム カスタム

レート制限ヘッダー

ヘッダー 説明
X-RateLimit-Limit 1分あたりの最大リクエスト数
X-RateLimit-Remaining 残りのリクエスト数
X-RateLimit-Reset リセットまでの秒数

レート制限処理の実装

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(`レート制限が低い: 残り ${remaining} 件`);
      }

      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`レート制限されています。${delay}ms後に再試行します...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};

本番環境デプロイチェックリスト

本番稼働前に:

実際の使用例

エージェンシーのクライアント管理

あるマーケティングエージェンシーが100以上のクライアント自動化を管理しています。

主な実装:

Eコマースの注文処理

オンラインストアが注文処理を自動化しています。

主な実装:

結論

Make APIは、包括的なワークフロー自動化機能を提供します。主要なポイント:

ボタン

Make APIで認証するにはどうすればよいですか?

内部連携には開発者設定からAPIキーを、マルチテナントアプリケーションにはOAuth 2.0を使用します。

プログラムでシナリオをトリガーできますか?

はい、/scenarios/{id}/execute エンドポイントを使用して、オプションの入力データでシナリオ実行を手動でトリガーできます。

Makeのレート制限は何ですか?

レート制限は、1分あたり60リクエスト(フリー)から1分あたり600リクエスト(チーム/エンタープライズ)までです。

実行ログを取得するにはどうすればよいですか?

/scenarios/{id}/executions を使用して、日付とステータスでフィルタリングされた実行履歴を取得します。

API経由でウェブフックを作成できますか?

はい、/webhooks エンドポイントを使用して、シナリオのウェブフックを作成、リスト表示、削除できます。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる