ユーザーセグメント REST API
手動更新のリストベースセグメントを作成し、セグメント ID ごとにメンバーを上書き、追加、または削除します。
共通事項
- リクエストとレスポンスは UTF-8 でエンコードされた JSON を使用します。
- 完全なエンドポイント URL は、データセンターの Base URL と API パスを組み合わせたものです。Base URL および API Key / API Secret の取得方法については、REST API 概要を参照してください。
- HTTP Basic Authentication を使用します:
Authorization: Basic ${base64(api_key:api_secret)}。API Key に紐づく API データソースがプロジェクトを決定するため、呼び出し側はリクエストボディにプロジェクト ID を渡す必要はありません。 - 成功時のレスポンスは共通構造です:
codeが0のとき成功、messageが結果の説明、dataがペイロードです。メンバー書き込みのバッチ処理は操作によって異なります:OVERRIDEはすべてのバッチを受信した後にのみ実行されます。APPENDとREMOVEの各バッチは独立して適用されます。レスポンスのdata.statusとdata.completeが処理状態を示します。
リストベースのセグメントを作成
更新方式が手動で、作成方法がリストアップロードのセグメントを作成します。作成直後のセグメントにはメンバーがいません。セグメントメンバーを更新を使用してリストをアップロードしてください。
エンドポイント
POST /v1/segments
リクエスト例
curl -X POST 'https://ma-api.engagelab.com/v1/segments' \
-H 'Authorization: Basic {base64(api_key:api_secret)}' \
-H 'Content-Type: application/json' \
-d '{
"name": "High-value users",
"description": "High-value user list synced from the order system"
}'
リクエストパラメータ
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
name |
String | はい | セグメント名。空にできず、最大 50 文字。プロジェクト内で一意である必要があります。先頭と末尾の空白はトリムされます。 |
description |
String | いいえ | セグメントの説明。最大 200 文字。 |
レスポンス例
{
"code": 0,
"message": "success",
"data": {
"segmentId": 123456789,
"name": "High-value users",
"generation": "generation-1"
}
}
| フィールド | タイプ | 説明 |
|---|---|---|
segmentId |
Long | 新規セグメントの ID。以降のリストアップロードで使用します。 |
name |
String | セグメント名。 |
generation |
String | 現在のメンバー世代識別子。新規作成セグメントにはメンバーがありません。 |
セグメントメンバーを更新
単一エンドポイントでリストメンバーを上書き、追加、または削除します。現在のプロジェクト内で、リストアップロードにより作成され、手動更新で、有効なセグメントのみ受け付けます。ユーザー識別子はプロジェクト内の既存の有効なユーザーと一致する必要があり、API はユーザーアセットを作成しません。セグメントが条件を満たさない場合、エラー 55210–55214 が返されます(エラーレスポンスを参照)。
エンドポイント
POST /v1/segments/{segmentId}/members
リクエスト例
次の例では、1 回の OVERRIDE 操作を 2 つのバッチに分割しています。各 batchId は 1 回のリスト操作を表します。すべてのバッチで同じ batchId、operation、batchCount を使用する必要があります。OVERRIDE はすべてのバッチを受信した後にのみリスト変更を適用します。APPEND と REMOVE は各バッチリクエストが成功するとすぐに反映されます。
curl -X POST 'https://ma-api.engagelab.com/v1/segments/123456789/members' \
-H 'Authorization: Basic {base64(api_key:api_secret)}' \
-H 'Content-Type: application/json' \
-d '{
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"batchIndex": 0,
"batchCount": 2,
"members": [
{"euid": "100001"},
{"identityName": "user_id", "identityValue": "user-002"}
]
}'
最初の OVERRIDE バッチを受信した時点では、レスポンスの status は RECEIVING、complete は false です。残りのバッチは同じ batchId で送信し、batchIndex を 1 に設定してください。
リクエストパラメータ
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
segmentId |
Long | はい | パスパラメータ:対象セグメント ID。 |
batchId |
String | はい | 1 回の完全なリスト操作のバッチ ID。最大 128 文字。英字、数字、ドット、アンダースコア、コロン、ハイフンのみ。プロジェクトおよびセグメントごとに 24 時間以内の冪等キーとして使用されます。 |
operation |
String | はい | リスト操作:OVERRIDE(置換)、APPEND(追加)、REMOVE(削除)。 |
batchIndex |
Integer | はい | 現在のバッチのインデックス。0 から開始し、batchCount 未満である必要があります。 |
batchCount |
Integer | はい | この操作のバッチ総数。1–10。すべてのバッチを合わせて最大 10,000 件のメンバー識別子。 |
members |
Array<Object> |
はい | 現在のバッチのメンバー識別子。空にできず、バッチあたり最大 1,000 件。各要素は下表のいずれかの形式を使用します。 |
members 要素は次の 2 形式をサポートします。euid は identityName / identityValue と同時に送信できません:
| フィールド | タイプ | 説明 |
|---|---|---|
euid |
String | プロジェクト EUID。正の整数文字列である必要があります(例:"100001")。 |
identityName |
String | プロジェクトで設定されたユーザー識別名。空にできず、最大 128 文字。 |
identityValue |
String | 識別子の値。空にできず、最大 256 文字。identityName と組み合わせて使用します。256 文字を超えてもリクエスト全体は失敗せず、該当行は invalidCount に計上されます。 |
リスト操作
| 操作 | 説明 |
|---|---|
OVERRIDE |
すべてのバッチを受信した後、今回の送信で一致したユーザーで現在のリストを置き換えます。有効なユーザーが 1 件も一致しない場合、リクエストは 55214 で拒否され、既存リストは変更されません。 |
APPEND |
現在のバッチが成功した後、一致したユーザーをリストに追加します。すでにセグメントにいるユーザーは重複しません。他のバッチの完了は待ちません。 |
REMOVE |
現在のバッチが成功した後、一致したユーザーをリストから削除します。セグメントにいないユーザーによる追加の変更はありません。他のバッチの完了は待ちません。 |
同じ batchId での再試行では、同じ操作、batchCount、バッチ内容を使用する必要があります。同じ batchId と batchIndex で異なる内容を送ることはできません。冪等結果は 24 時間保持されます。
OVERRIDE バッチはすべて受信するまで保持され、その後適用されます。保持データは 24 時間 TTL で失効し、失効前にバッチが揃わない場合リストは変更されません。APPEND と REMOVE の各バッチは独立して適用されます。batchCount と batchIndex は引き続きバッチの識別、冪等性、進捗追跡に使用され、現在のバッチの実行をブロックしません。
リスト変更が成功するたびに、ソース REST API としてセグメント更新履歴に記録されます。OVERRIDE は完了したバッチごと、APPEND と REMOVE は成功したバッチごとに記録されます。監査記録には、一致しなかった識別子や無効な識別子のサンプルは含まれません。
レスポンス例
バッチがまだ完了していない場合:
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"status": "RECEIVING",
"complete": false,
"expectedBatchCount": 2,
"receivedBatchCount": 1,
"inputCount": 2,
"matchedCount": 2,
"unmatchedCount": 0,
"unmatchedSamples": [],
"unmatchedSamplesTruncated": false,
"invalidCount": 0,
"invalidSamples": [],
"invalidSamplesTruncated": false,
"enterCount": 0,
"exitCount": 0
}
}
OVERRIDE バッチ完了時:
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"status": "COMPLETED",
"complete": true,
"expectedBatchCount": 2,
"receivedBatchCount": 2,
"inputCount": 3,
"matchedCount": 2,
"unmatchedCount": 1,
"unmatchedSamples": [
{"identityName": "user_id", "identityValue": "user-not-found"}
],
"unmatchedSamplesTruncated": false,
"invalidCount": 1,
"invalidSamples": [
{"identityName": "not_configured", "identityValue": "example"}
],
"invalidSamplesTruncated": false,
"enterCount": 2,
"exitCount": 1
}
}
APPEND または REMOVE バッチが成功した場合、現在のバッチはすぐに適用され、これまで受信したバッチ数が batchCount より少なくても complete: true が返されます。例:batchCount が 2 で最初のバッチのみ受信した場合、receivedBatchCount は 1、status は COMPLETED です。
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-append",
"operation": "APPEND",
"status": "COMPLETED",
"complete": true,
"expectedBatchCount": 2,
"receivedBatchCount": 1,
"inputCount": 2,
"matchedCount": 1,
"unmatchedCount": 1,
"unmatchedSamples": [
{"identityName": "user_id", "identityValue": "user-not-found"}
],
"unmatchedSamplesTruncated": false,
"invalidCount": 0,
"invalidSamples": [],
"invalidSamplesTruncated": false,
"enterCount": 1,
"exitCount": 0
}
}
| フィールド | タイプ | 説明 |
|---|---|---|
batchId |
String | このリスト操作のバッチ ID。 |
operation |
String | このリクエストのリスト操作。 |
status |
String | RECEIVING:OVERRIDE がバッチ待ち;PROCESSING:リスト変更ロック待ち;COMPLETED:現在の操作が完了。 |
complete |
Boolean | OVERRIDE では全バッチ適用済み;APPEND/REMOVE では現在のバッチ適用済み(すべてのバッチが送信済みとは限りません)。 |
expectedBatchCount |
Integer | 想定バッチ総数。 |
receivedBatchCount |
Integer | 受信した distinct なバッチインデックス数。APPEND/REMOVE では統計のみに使用し、現在のバッチをブロックしません。 |
inputCount |
Integer | 有効入力行数 = matchedCount + unmatchedCount(無効識別子は含まない)。OVERRIDE は受信バッチを集計(完了時はバッチ全体);APPEND/REMOVE は現在のバッチを集計。 |
matchedCount |
Integer | 有効なユーザーに一致した識別子数。 |
unmatchedCount |
Integer | 有効なユーザーに一致しなかった識別子数。 |
unmatchedSamples |
Array<Object> |
一致しなかった識別子のサンプル。リクエストメンバーと同じ構造。最大 100 件。 |
unmatchedSamplesTruncated |
Boolean | 一致しなかったサンプルが 100 件で切り詰められたか。 |
invalidCount |
Integer | 無効識別子数。inputCount に含まれません。含まれる例:非正整数の euid、euid と identity フィールドの同時送信、空または不整合の identityName/identityValue、identityName が 128 文字超、identityValue が 256 文字超、未設定の識別名、1 識別子が複数の有効ユーザーに一致。 |
invalidSamples |
Array<Object> |
無効識別子のサンプル。リクエストメンバーと同じ構造。最大 100 件。 |
invalidSamplesTruncated |
Boolean | 無効サンプルが 100 件で切り詰められたか。 |
enterCount |
Integer | 今回の実行でセグメントに実際に追加されたユーザー数。 |
exitCount |
Integer | 今回の実行でセグメントから実際に削除されたユーザー数。 |
サンプルはリクエストのメンバー識別子オブジェクト構造に従い、送信した identityValue を含む場合があります。サーバーは 24 時間の冪等キャッシュにのみサンプルを保持し、監査記録には保存しません。データコンプライアンス要件に従ってレスポンスとログを取り扱ってください。
レスポンスが PROCESSING の場合、同じ batchId、batchIndex、元のバッチ内容で再試行すると冪等な結果が得られます。バッチ進捗を照会する専用 API はありません。
エラーレスポンス
エラーは code と message を使用します。HTTP ステータスコードおよび一般的な返却コードについては、HTTP ステータスコードを参照してください。
| HTTP ステータス | コード | 説明 |
|---|---|---|
| 401 | 40050 |
API Key / API Secret の認証に失敗したか、API データソースが無効です。 |
| 400 | 40026 |
プロジェクト内に同じ名前のユーザーセグメントが既に存在します(作成パス、Metadata 透過)。 |
| 400 | 40032 |
ユーザーセグメント数の上限に達しました(作成パス、Metadata 透過)。 |
| 400 | 55201 |
ユーザーセグメントが存在しません(リストアップロードパス)。 |
| 400 | 55210 |
セグメント作成方法が REST API リストアップロードをサポートしていません:対象セグメントがリストアップロードで作成されていません(例:ルールベースセグメント)。 |
| 400 | 55211 |
セグメント更新方式が REST API リストアップロードをサポートしていません:対象セグメントが手動更新ではありません。 |
| 400 | 55212 |
セグメントのライフサイクル状態が REST API リストアップロードをサポートしていません:対象セグメントが有効ではありません。 |
| 400 | 55213 |
セグメントに利用可能なメンバー世代がありません。REST API リストアップロードは一時的にサポートされません。 |
| 400 | 55214 |
空リストによる上書きは許可されません:すべての OVERRIDE バッチ受信後、有効なユーザーが 1 件も一致しませんでした。 |
| 400 | 55004 |
リクエストフィールドまたはリストバッチパラメータが無効です。 |
| 503 | 55207 |
セグメントメタデータが一時的に利用できません。 |
| 500 | 55000 |
内部サーバーエラー。 |
セグメント作成時、Metadata のビジネスエラーコードと message は呼び出し元に透過されます(例:重複名 40026、上限 40032)。リストアップロードパスでは、「セグメントが存在しない」場合は 40027 ではなく 55201 が返されます。
一致しなかった、または無効なメンバー識別子によってリスト操作全体が失敗することはありません(一致ユーザーが 0 件の
OVERRIDEを除く。55214を参照)。レスポンスは件数と最大 100 件の識別子サンプルを返します。サンプルにidentityValueが含まれる場合があるため、レスポンスデータを適切に保護してください。










