メインコンテンツへスキップ
このガイドでは、API のレート制限 を順守しつつ、Automation API を使用して複数のアカウントを自動的に作成する方法を説明します。/accounts エンドポイント を使用します。

前提条件

Automation API を使用する前に、アクセストークンを取得していることを確認してください。 トークンの取得方法については、認証ガイド を参照してください。リクエストの Authorization ヘッダーにトークンを含めます:
Authorization: Bearer YOUR_ACCESS_TOKEN

レート制限への対処

Automation API は、リクエストトラフィックを制御するために 2 つのレート制限ウィンドウを適用します:
時間枠最大リクエスト数
10 秒50 リクエスト
1 時間1,000 リクエスト
多くのアカウントを作成する際にリクエストを早く送信しすぎると、API は HTTP 429 (Too Many Requests) レスポンスを返します。 これらの制限を回避するには、リクエストを制御されたバッチで処理します:
  • 10 秒ごとに最大 50 リクエストを送信します。
  • 1 時間あたり最大 1,000 リクエストを送信します。
たとえば、230 個のアカウントを作成するには、リクエストを次のように分割します:
バッチリクエスト数待機時間
15010 秒待機
25010 秒待機
35010 秒待機
45010 秒待機
530完了

入力データのフォーマット

JSON ファイルでアカウントを定義します。配列の各オブジェクトは、単一のアカウントのリクエスト本文を表します。
[
  {
    "firstName": "Elton",
    "lastName": "John",
    "email": "elton@john.com",
    "preferredLocale": "en",
    "password": "pwd",
    "passwordConfirm": "pwd",
    "status": "ACTIVATED",
    "roles": [
      {
        "name": "ROLE_CUSTOMER_ADMIN",
        "sites": [],
        "customers": [99999],
        "privileges": []
      }
    ],
    "isProductRecoAllowed": true,
    "solutions": ["WEB_EXPERIMENTATION", "FEATURE_EXPERIMENTATION"]
  },
  {
    "firstName": "Poussiere",
    "lastName": "Etoile",
    "email": "poussiere@etoile.com",
    "password": "pwd",
    "passwordConfirm": "pwd",
    "preferredLocale": "en",
    "status": "ACTIVATED",
    "roles": [
      {
        "name": "ROLE_CUSTOMER_ADMIN",
        "sites": [],
        "customers": [99999],
        "privileges": []
      }
    ],
    "isProductRecoAllowed": false,
    "solutions": ["WEB_EXPERIMENTATION", "FEATURE_EXPERIMENTATION"]
  }
]

Python を使用してアカウントを作成する

次の Python スクリプトは JSON ファイルからアカウントを読み取り、リクエストを順次送信し、レート制限を自動的に管理します:
import json
import time
import requests

API_URL = "https://api.kameleoon.com/accounts"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"

INPUT_FILE = "accounts.json"

MAX_PER_10_SECONDS = 50
MAX_PER_HOUR = 1000

TEN_SECONDS = 10
ONE_HOUR = 3600


def load_accounts(file_path):
    with open(file_path, "r") as f:
        return json.load(f)


def create_account(session, payload):
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json",
    }

    response = session.post(API_URL, json=payload, headers=headers)

    if response.status_code == 429:
        print("Rate limit reached. Waiting 10 seconds...")
        time.sleep(10)
        response = session.post(API_URL, json=payload, headers=headers)
        

    if response.status_code in (200, 201):
        return True, response.json()

    return False, response.text


def process_accounts(accounts):

    session = requests.Session()

    start_hour = time.time()
    hour_count = 0

    for i in range(0, len(accounts), MAX_PER_10_SECONDS):

        batch = accounts[i:i + MAX_PER_10_SECONDS]

        if hour_count + len(batch) > MAX_PER_HOUR:

            elapsed = time.time() - start_hour
            sleep_time = max(0, ONE_HOUR - elapsed)

            print(f"Hourly limit reached. Sleeping {sleep_time:.2f} seconds")
            time.sleep(sleep_time)

            start_hour = time.time()
            hour_count = 0

        batch_start = time.time()

        for account in batch:

            success, result = create_account(session, account)

            if success:
                print("Account created:", result)
            else:
                print("Request failed:", result)

            hour_count += 1

        elapsed = time.time() - batch_start

        if elapsed < TEN_SECONDS:
            sleep_time = TEN_SECONDS - elapsed
            print(f"Waiting {sleep_time:.2f} seconds before next batch")
            time.sleep(sleep_time)


def main():

    accounts = load_accounts(INPUT_FILE)

    print(f"Loaded {len(accounts)} accounts")

    process_accounts(accounts)


if __name__ == "__main__":
    main()

提供されたスクリプトは、Automation API のレート制限を順守しながら多数のアカウントを安全に作成します。次の処理を行います:
  • JSON ファイルからアカウントを読み取る。
  • リクエストを順次送信する。
  • アカウントを 50 のバッチで処理する。
  • 10 秒の制限を強制するためにバッチ間で待機する。
  • プロセスが 1 時間あたり 1,000 リクエストの制限に達した場合は一時停止する。
このアプローチにより、レート制限エラーを防ぎ、大規模な移行や一括オンボーディング作業中の信頼性の高いアカウント作成を保証します。