REST API · v1

ひとつのトークンで、すべてのエンドポイントへ。

キャンペーン、リスト、購読者、オートメーション、送信サーバー、顧客課金のための、洗練されたリソース指向の HTTP API です。単一のトークンで認証し、JSON をクエリし、数分でリリースできます。プラグインが使う API も、外部クライアントが使う API も同じ — 二級扱いのエンドポイントは存在しません。

構築できるもの

SaaS フロントエンド モバイルアプリ CRM 同期 オートメーショントリガー リセラーダッシュボード
REQUEST POST /api/v1/campaigns HEADERS Authorization: Bearer ACELLE_TOKEN Content-Type: application/json BODY { "list_uid": "a3b9..." "name": "Welcome" "subject": "Hi friend" "from_name": "Acme" "from_email": "hi@..." "track_open": true "html": "<h1>…" } HTTPS your.acelle.com RESPONSE 200 OK { "campaign": { "uid": "abc123" "name": "Welcome" "subject": "Hi friend" "status": "ready" "track_open": true "created_at": "2026-05-06T…" "links": { "self": "/api/v1…" } } }

この API を選ぶ理由

驚きはありません。二級扱いのエンドポイントもありません。
プラグインが使うのと同じ API です。

トークン認証

すべてのリクエストは単一の Bearer トークンを伴います。Profile → API token からユーザーごとに生成され、Authorization: Bearer ヘッダーまたは ?api_token= クエリ文字列で渡します。いつでも取り消し・ローテーションできます。

リソース指向

すべての概念は予測可能な動詞を持つリソースです。GET /lists はコレクションを返し、POST /lists は作成、PATCH /lists/:uid は更新、DELETE /lists/:uid は削除します。サブリソースも自然にネストします: /lists/:uid/subscribers

プラグインが使うのと同じ

内部用と外部用の区別はありません。AcelleMail 自身の UI が叩くエンドポイント、プラグインが拡張するエンドポイント、外部クライアントが読むエンドポイント — すべて同一です。プラグイン SDK を見る →

セルフホスト型エンドポイント

ベース URL はお客様自身のサーバー — https://your-acelle.example.com/api/v1/ です。ベンダープロキシなし、共有レート制限なし、リクエストごとの課金なし。スループットはお手元のハードウェア性能次第です。

クイックスタート

ゼロから最初のレスポンスまで 4 ステップ。

各 AcelleMail インストールは /api/v1/ で独自に API をホストします。your-acelle.example.com はご自身のインストールホスト名に置き換えてください。

STEP 1

トークンを生成する

AcelleMail のインストールにサインインし、プロフィールメニューを開いて API token をクリックします。値をコピーしてください — ユーザーごとに固有で、そのユーザーの権限に紐付きます。

# In your shell:
$ export ACELLE_TOKEN=paste-your-token-here
$ export ACELLE_BASE=https://your-acelle.example.com
STEP 2

トークンを検証する

/me を叩きます。トークンが有効ならユーザーレコードが返り、無効なら 401 が返ります — トークンとベース URL を確認してください。

$ curl $ACELLE_BASE/api/v1/me \
    -H "Authorization: Bearer $ACELLE_TOKEN"

{ "id": 1, "email": "you@…", "uid": "…" }
STEP 3

リストを作成する

リソースは POST で作成します。メーリングリストに必須のボディフィールドは namefrom_emailfrom_namesubject と連絡先ブロックです。

$ curl -X POST $ACELLE_BASE/api/v1/lists \
    -H "Authorization: Bearer $ACELLE_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "name":       "Newsletter",
      "from_name":  "Acme",
      "from_email": "hi@acme.com",
      "subject":    "Welcome"
    }'
STEP 4

購読者を追加する

ステップ 3 で取得したリストの UID を使います。カスタムフィールドは、リストのフィールド設定に対応する大文字パラメータ(FIRST_NAMELAST_NAME、…)として渡します。

$ curl -X POST $ACELLE_BASE/api/v1/subscribers \
    -H "Authorization: Bearer $ACELLE_TOKEN" \
    -d list_uid=$LIST_UID \
    -d EMAIL=alice@example.com \
    -d FIRST_NAME=Alice \
    -d tag=newsletter,beta

リソース

8 つのリソース。40 以上のエンドポイント。期待どおりのすべての動詞。

以下のすべてのエンドポイントは /api/v1/ 配下にあり、特記がない限り auth:api トークン認証が必要です。ライフサイクル操作(run、pause、resume)は POST サブルートとして公開されます。ログのダウンロードは元の CSV をストリーミングします。

認証

認証が必要なすべてのエンドポイントは、Authorization: Bearer ヘッダー(推奨)または ?api_token= クエリパラメータ(レガシー)でトークンを受け取ります。プログラム的なクライアントから新しいトークンを取得するには POST /user/login でメールアドレス + パスワードと交換してください。

POST/user/loginメールアドレス + パスワードを API トークンと交換します。パブリックエンドポイント。
GET/me認証済みユーザーのレコードを返します。トークンの検証に使用してください。
POST/login-tokenクリックすれば認証済み状態で着地できるワンタイムログイン URL を生成します。

リスト

メーリングリストは購読者の主要なコンテナです。各リストにはデフォルトの送信者 ID、カスタムフィールド、ダブルオプトイン / ウェルカムメール設定が付属します。カスタムフィールドは add-field サブルートで追加します。

GET/listsトークンの所有ユーザーが持つリストのページネーションインデックス。
POST/lists新規リストを作成します。必須: namefrom_emailfrom_namesubject + 連絡先ブロック。
GET/lists/:uidフィールドと統計情報を含む単一リストを取得します。
PATCH/lists/:uidリストのメタデータ、送信者 ID、オプトイン設定を更新します。
POST/lists/:uid/add-fieldカスタムフィールドを追加します。Type は textnumberdatetime のいずれかです。
DELETE/lists/:uidリストとそのすべての購読者を完全に削除します。

購読者

購読者はリストに属し、カスタムフィールド値、タグ、開封 / クリック履歴を保持します。ステータスは subscribedunsubscribedunconfirmed のいずれかです。タグ操作は加算的かつ冪等です。

GET/subscribers?list_uid=…ページネーションインデックス。open=yes|noclick=yes|no でフィルターできます。
POST/subscribers作成します。必須: list_uidEMAIL。カスタムフィールドは大文字パラメータとして渡します。
GET/subscribers/:idID またはメールアドレスで単一購読者を取得します。
GET/subscribers/email/:emailこのメールアドレスを持つ購読者が存在するすべてのリストを検索します。
PATCH/subscribers/:idフィールド、タグ、ステータスを更新します。
POST/subscribers/:id/add-tagカンマ区切りのタグを追加します。
POST/subscribers/:id/remove-tagカンマ区切りのタグを削除します。
PATCH/lists/:list_uid/subscribers/:id/subscribesubscribed としてマークします。
PATCH/lists/:list_uid/subscribers/:id/unsubscribeunsubscribed としてマークします。
PATCH/lists/:list_uid/subscribers/email/:email/unsubscribeID がないときにメールアドレスで購読解除します。
DELETE/subscribers/:idリストからハード削除します。

キャンペーン

キャンペーンは送信の単位です。HTML コンテンツ + トラッキングフラグで作成し、run / pause / resume を遷移したうえで、トラッキング、開封、クリック、バウンス、フィードバック、購読解除のログを CSV としてダウンロードできます。

GET/campaignsページネーションインデックス。per_pagepage を渡します。
POST/campaigns作成します。必須: list_uidnamesubjectfrom_*html
GET/campaigns/:uid統計情報を含む単一キャンペーンを取得します。
PATCH/campaigns/:uidコンテンツ、件名、トラッキングフラグを更新します。
POST/campaigns/:uid/runキャンペーンを配信キューに投入します。
POST/campaigns/:uid/pause配信中のキャンペーンを一時停止します。
POST/campaigns/:uid/resume一時停止中のキャンペーンを再開します。
GET/campaigns/:uid/tracking-log/downloadトラッキング CSV をストリーミングします。
GET/campaigns/:uid/{open,click,bounce,feedback,unsubscribe}-log/downloadイベント別 CSV をストリーミングします(イベントタイプごとに 1 つのルート)。
DELETE/campaigns/:uidキャンペーンを削除します(進行中でない場合のみ)。

オートメーション

オートメーションはトリガー、条件、アクションのビジュアルフローです。API は読み取りビューに加え、外部システムからフローを発火させる 2 つの方法を公開します: オートメーション全体を実行する execute と、フロー途中の「API call」ノードを発火させる api/call です。

GET/automationsトークンの所有ユーザーが持つオートメーションのインデックス。
POST/automations/:uid/execute購読者に対してオートメーションを発火させます。トランザクションフローに便利です。
POST/automations/:uid/api/callカスタムペイロードでフロー途中の「API call」トリガーノードを発火させます。

送信サーバー

送信サーバーは設定可能なトランスポート(SMTP、Amazon SES、SendGrid、Mailgun、Postmark、プラグインからのカスタムドライバ)です。新規テナントのプロビジョニングや認証情報のローテーション時にプログラムから管理してください。

GET/sending_servers設定済み送信サーバーのインデックス。
POST/sending_servers新規送信サーバーを作成します。ドライバ固有の設定は settings 配下に置きます。
GET/sending_servers/:uid単一の送信サーバーを取得します。
PATCH/sending_servers/:uid設定の更新や認証情報のローテーションを行います。
DELETE/sending_servers/:uid送信サーバーを削除します(参照しているキャンペーンを事前に別サーバーへ振り替える必要があります)。

新しいトランスポート(Postal MTA、カスタム HTTP API、…)の追加は REGISTRY hook — コアにパッチを当てるのではなく、プラグインとしてリリースしてください。

顧客 ADMIN

顧客エンドポイントは admin トークンに限定されています。テナントアカウントのプロビジョニング、サブスクリプション管理、プラン切替、サポート / なりすまし用のワンタイムログイン URL 生成などに使用します。

GET/customersすべての顧客のページネーションインデックス。
POST/customers新規顧客 + ユーザーアカウントを作成します。
GET/customers/by-email/:emailメールアドレスで顧客を検索します。
PATCH/customers/:uid顧客プロフィール / 連絡先 / クォータを更新します。
PATCH/customers/:uid/{enable,disable}データを削除せずにアクセスを停止・再有効化します。
POST/customers/:uid/change-plan/:plan_uid顧客を別のプランへ切り替えます(課金、日割り、サブスクリプション更新を伴います)。
POST/customers/:uid/assign-plan/:plan_uid課金フローを経ずにプランを割り当てます(管理者オーバーライド)。
POST/customers/:uid/subscription/update有効なサブスクリプションのパラメータを更新します。
POST/login-token対象顧客向けのワンタイムログイン URL を生成します。

サブスクリプション ADMIN

サブスクリプションは顧客をプラン + 課金サイクルに結び付けます。外部課金システムとの連携や継続収益の監査時にこれらのエンドポイントをご利用ください。

GET/subscriptions有効なサブスクリプションすべてのインデックス。
POST/subscriptionsサブスクリプションレコードを作成します(通常は決済ゲートウェイの Webhook によって駆動されます)。
GET/subscriptions/:uid更新履歴を含む単一サブスクリプションを取得します。
PATCH/subscriptions/:uidクォータ、サイクル、終了日を調整します。

ファイル

キャンペーンコンテンツで使う画像やその他のアセットをアップロードします。エンドポイントは multipart/form-data を受け取り、HTML 本文から参照できるパブリック URL を返します。

POST/file/uploadファイルをアップロードします。{ "url": "..." } を返します。

プラグイン & アップグレード ADMIN

ダウンロード URL からプラグインをプログラム的にインストールしたり、リモートコアアップグレードを 2 ステップのリクエストフロー(ステップ 2 が新しい PHP ワーカーに着地するよう設計)で実行したり、ライセンス情報を更新したりします。多数の AcelleMail テナントを管理するフリート運用者に便利です。

POST/plugins/installダウンロード URL からプラグインをインストールします。
POST/upgrade/runリモートコアアップグレードを開始します(ダウンロード + 展開)。
POST/upgrade/run-file単一のマイグレーションステップを適用します。
POST/upgrade/finalizeアップグレードを確定します。run の後、新規リクエストとして呼び出す必要があります。
POST/license/refreshCodeCanyon ライセンス情報を更新します(Admin → License の挙動と同等)。

WEBHOOK

イベントをポーリングするのではなく、プッシュで届ける。

AcelleMail には 2 種類の Webhook 面が用意されています。ライフサイクル Webhook は顧客 + サブスクリプション + オートメーションの状態遷移時に発火し、グローバルに設定します。受信者ごとのトラッキング ping は開封 / クリック / 購読解除時に発火し、キャンペーン単位で設定します。いずれも失敗時には指数バックオフで再試行されます。

ライフサイクル Webhook

顧客 + サブスクリプションの状態遷移

Admin → Settings → Webhooks で一度設定します。各 Webhook は 名前 + イベント + 送信先 HTTP 設定(URL、メソッド、ヘッダー、ボディテンプレート)の組です。コアには 6 つのイベントが付属します:

new_customerparams: customer_id
new_subscriptioncustomer_id, plan_id
change_plancustomer_id, old_plan_id, new_plan_id
cancel_subscriptioncustomer_id, plan_id
terminate_subscriptioncustomer_id, plan_id
automation_webhookautomation_id(API call ノードから発火)

再試行ポリシーは Webhook ごとに設定可能です: retry_times(デフォルト 2)と retry_after_seconds(デフォルト 900)。失敗した配信はログに残り、再試行され、管理画面の Webhook ログに表示されます。

プラグインは EVENT hook パターンで追加イベントを登録できます — たとえば acelle/ai はカスタムリスナーから ai_task_completed を発火します。

受信者ごとのトラッキング

開封、クリック、購読解除

キャンペーン単位またはメールテンプレート単位に Tracking → Webhooks で設定します。受信者がメッセージを操作するタイミングで、3 種類のイベントが発火します:

open受信者がメールを開封した(トラッキングピクセル)
click受信者がトラッキング対象リンクをクリックした
unsubscribe受信者が購読解除リンクを押した

各 ping にはキャンペーン UID、購読者のメールアドレス、そして(click イベントの場合は)クリック URL が含まれます。キャンペーンごとに必要な数だけトラッキング Webhook を設定できます — アナリティクス + CRM + データウェアハウスへの並列ミラーリングに便利です。

送信サーバーレベルのイベント(バウンス、苦情、配信)は内部リスナースタック App\SendingServers\Webhooks\* を経由し — アウトバウンド Webhook ではなくキャンペーンログのエンドポイントに表れます。ログ CSV をダウンロード →

例: new_subscription のペイロード

POST /your-webhook-url
Content-Type: application/json
X-AcelleMail-Event: new_subscription
X-AcelleMail-Signature: sha256=…

{
  "event":       "new_subscription",
  "customer_id": 1234,
  "plan_id":     "extended-monthly",
  "fired_at":    "2026-05-06T12:34:56Z"
}

例: click のトラッキングペイロード

POST /your-webhook-url
Content-Type: application/json
X-AcelleMail-Event: click

{
  "event":         "click",
  "campaign_uid":  "abc123",
  "subscriber":    "alice@example.com",
  "url":           "https://acme.com/promo",
  "clicked_at":    "2026-05-06T12:34:56Z"
}

レスポンス & エラー

予測可能な JSON。慣例に沿ったステータスコード。

成功レスポンスはすべて JSON です。失敗レスポンスもすべて JSON で、トップレベルの message と、バリデーション失敗時の errors マップを含みます。ステータスコードは REST 慣例に従うため — クライアントはコードだけで分岐できます。

Code 発生するタイミング
200 OK読み取り・更新が成功。
201 Created作成が成功。
401 Unauthorizedトークンが欠落または無効。
403 Forbiddenトークンは有効だが、対象リソースが自分のものでない / 管理者ではない。
404 Not FoundUID が存在しない。
422 Unprocessableバリデーションエラー。ボディの errors マップを確認してください。
500 Serverサーバー側のバグ。storage/logs/laravel.log を確認してください。

バリデーションエラー(422)

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json

{
  "message": "The given data was invalid.",
  "errors": {
    "from_email": [
      "The from_email field is required."
    ],
    "subject": [
      "The subject must be at most 998 characters."
    ]
  }
}

認証失敗(401)

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{ "message": "Unauthenticated." }

ページネーション

インデックス系エンドポイントは per_page(リソースに応じてデフォルト 10–25)と page を受け付けます。レスポンスは Laravel paginator の標準形 data[]linksmeta.current_pagemeta.total を含みます。

レート制限

レート制限はお客様側の判断 — Laravel インストールの RouteServiceProvider で設定してください。標準ビルドでは自分のサーバーを叩く前提のため API スロットルは設定されていません。必要に応じて throttle:60,1 を追加してください。

バージョニング

現在のメジャーバージョンは v1 です。新規エンドポイントは自由に追加されますが、既存エンドポイントに対する互換性のない変更は v1 と並行して v2 としてリリースされます。クライアントを /api/v1/ に固定すれば安定動作します。

クライアント

どんな HTTP クライアントでも。専用 SDK は不要。

インストールすべき AcelleMail 専用 SDK は存在しません。API は HTTP 上で JSON を話します — お手元のスタックにあるクライアントをそのまま使ってください。実務でよく使われる 3 つの例:

curl · ワンライナー

curl $ACELLE_BASE/api/v1/lists \
  -H "Authorization: Bearer $ACELLE_TOKEN" \
  | jq '.data[].name'

Laravel HTTP クライアント

$resp = Http::withToken($token)
    ->baseUrl($base.'/api/v1')
    ->post('/subscribers', [
        'list_uid' => $listUid,
        'EMAIL'    => $email,
    ]);

return $resp->json();

ブラウザ / Node fetch

const r = await fetch(
  `${base}/api/v1/campaigns/${uid}/run`,
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
    },
  }
);
const data = await r.json();

オープンソース SDK を作っていますか?ご一報ください — このページからリンクします。

正式リファレンス

フル機能の実行可能 API リファレンス。

すべてのパラメータ、すべてのレスポンス構造、すべての動作する curl サンプル。お客様のインストールと同じコードを動かしている、正式デモインストール上でホストされています。

api.acellemail.com

呼び出し時には api.acellemail.com をご自身のインストールホスト名に置き換えてください。

構築を始める

AcelleMail を動かす。トークンを取得する。呼び出す。

買い切りライセンス。フルソースコード。セルフホスト型エンドポイント。API は標準同梱 — アドオンも従量プランもありません。

AcelleMail を入手 — $80 プラグイン SDK →