EVENT エンドポイント API リファレンス
SDK 実装の代替として、サーバー間連携を通じて Singular の REST API を使用し、アトリビューション分析とキャンペーン最適化のためにアプリ内イベントと収益をトラッキングします。
概要
サーバー間(S2S)のユースケース
EVENT エンドポイントは、アトリビューション分析とキャンペーン最適化のためにアプリ内イベントと収益をトラッキングします。サーバー間連携が初めてですか?核となる概念と共通のセットアップについては S2S 基礎ガイド を参照してください。
サポートされる機能:
- イベントアトリビューション: ユーザーの行動をマーケティングキャンペーンに結び付けます
- 収益トラッキング: アプリ内購入と取引を測定し、アトリビューションします
- カスタムイベント: 登録からレベル達成まで、あらゆるユーザー操作をトラッキングします
- イベントプロパティ: より深い分析のために、イベントにコンテキストデータを付加します
ハイブリッドのユースケース: ハイブリッド連携では Singular SDK が必須であり、SDK がセッショントラッキングを管理するため、SESSION エンドポイントは使用しません。サーバーは SDK から提供された Singular Device ID(SDID)を使用して、EVENT V2 エンドポイントにイベントを送信します。
重要な要件
前提条件:
- イベントの前にセッション: イベントをトラッキングする前に、SESSION が確立されている必要があります
- 順序どおりの送信: セッションの順序が正しくない場合、データの不整合とアトリビューションエラーが発生します
イベントトラッキングのガイドライン
命名規則とデータ構造に関する Singular のベストプラクティスに従ってイベントトラッキングを実装してください。
イベントの定義
イベントを定義する
S2S 連携を実装する前に、キャンペーンのパフォーマンス分析のためにトラッキングしたいイベントの完全なリストを定義してください。
イベント設計ガイド: アプリ内イベントの定義
イベント命名の影響: Singular に渡されるイベント名は、レポート、エクスポート、ポストバックでのイベントの表示方法をそのまま決定します。
標準的なイベント命名
ベストプラクティス:
- 標準イベント: パートナー連携のマッピングを効率化するには、 Singular の標準イベント命名規則 を使用してください
- 英語の使用: サードパーティパートナーや分析ソリューションとの互換性のため、イベント名は英語で渡してください
- 標準属性: イベントプロパティには 標準のイベント属性名 を使用してください
文字数の制限
長さの制限:
- イベント名: 最大 32 ASCII 文字(非 ASCII の場合、UTF-8 変換時に 32 バイト)
- イベント属性: 属性のキーと値ごとに最大 500 ASCII 文字
エンドポイントの選択
EVENT エンドポイントには 2 つのバージョンがあります。以下のアコーディオンで、各バージョンのエンドポイント URL と必須のデバイス識別子を確認してください。その他のパラメータはすべて共通で、以下の 必須パラメータ および オプションパラメータ に一度だけ記載されています。
2026 年 7 月 15 日より V2 が必須。 2026 年 7 月 15 日以降に作成されたアカウントは Event Endpoint V2(SDID ベース)を使用する必要があり、新規アカウントでは V1 は利用できません。すでに V1 で連携済みの既存のお客様には影響ありません。V2 への移行をご希望の場合は、Singular のカスタマーサクセスマネージャーにお問い合わせください。
Singular SDK が Singular Device ID(SDID)でセッションをトラッキングし、サーバーが同じ SDID を使用してイベントを送信するハイブリッド連携には V2 を使用してください。V2 ではプラットフォーム固有のデバイス識別子は不要です。
POST https://s2s.singular.net/api/v2/evt
必須の識別子:
| パラメータ | 詳細 |
|---|---|
sdid
|
プラットフォーム:
iOS, Android, Web, PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV
|
純粋なサーバーサイド連携、または Singular SDK が SDID を使用せず、プラットフォーム固有のデバイス識別子(IDFA、IDFV、AIFA、ASID など)に依存するハイブリッド連携には V1 を使用してください。
POST https://s2s.singular.net/api/v1/evt
必須の識別子(1 つ以上):
| パラメータ | 詳細 |
|---|---|
idfa
|
プラットフォーム:
iOS
|
idfv
|
プラットフォーム:
iOS
|
aifa
|
プラットフォーム:
Android
|
asid
|
プラットフォーム:
Android
|
amid
|
プラットフォーム:
Android
|
oaid
|
プラットフォーム:
Android
|
andi
|
プラットフォーム:
Android
使用制限: Google Play デバイスでは使用が禁止されています。代わりに AIFA と ASID を使用してください。他の識別子が一切利用できず、かつアプリが Google Play 経由で配布されていない場合にのみ送信してください。
例:
|
必須パラメータ
すべての EVENT リクエストには、デバイス識別子に加えて以下の必須パラメータを含める必要があります。
パラメータの形式:
すべてのパラメータは、POST メソッドを使用してリクエストボディに
application/x-www-form-urlencoded
データとして送信する必要があります。リクエストには
Content-Type: application/x-www-form-urlencoded
ヘッダーを含める必要があります。パラメータを JSON リクエストボディで送信しないでください。
API 認証
| パラメータ | 詳細 |
|---|---|
a
|
型:
String
重要: Reporting API Key は使用しないでください。リクエストが拒否されます。
例:
|
デバイスパラメータ
| パラメータ | 詳細 |
|---|---|
p
|
型:
String
|
ip
|
型:
String
|
ve
|
型:
String
|
ma
|
プラットフォーム:
iOS, Android
|
mo
|
プラットフォーム:
iOS, Android
|
lc
|
プラットフォーム:
iOS, Android
|
bd
|
プラットフォーム:
iOS, Android
|
アプリケーションパラメータ
| パラメータ | 詳細 |
|---|---|
i
|
型:
String
|
app_v
|
型:
String
|
att_authorization_status
|
プラットフォーム:
iOS
常に必須:
ATT を実装していない場合でも、
例:
|
イベントパラメータ
| パラメータ | 詳細 |
|---|---|
n
|
型:
String
|
オプションパラメータ
オプションパラメータは、追加のコンテキストと機能によってイベントトラッキングを強化します。
タイムスタンプパラメータ
| パラメータ | 詳細 |
|---|---|
utime
|
型:
Integer
|
umilisec
|
型:
Integer
|
イベント属性
パートナー Conversion API のサポート:
Singular の Conversion API 連携を通じてこれらのイベントを広告ネットワークパートナーに転送するには、標準のオプションイベント属性(次のようなハッシュ化されたファーストパーティデータ)を含めてください:
eventId
および
ehash
)。詳細は
Conversion API 連携のための標準イベント属性
を参照してください。
| パラメータ | 詳細 |
|---|---|
e
|
型:
JSON
|
global_properties
|
型:
JSON
|
ネットワークパラメータ
| パラメータ | 詳細 |
|---|---|
use_ip
|
型:
Boolean
制限事項:
例:
|
country
|
型:
String
|
ua
|
型:
String
|
c
|
プラットフォーム:
iOS, Android
|
cn
|
プラットフォーム:
iOS, Android
|
データプライバシー
| パラメータ | 詳細 |
|---|---|
data_sharing_options
|
型:
JSON
|
dnt
|
プラットフォーム:
iOS, Android
|
dntoff
|
プラットフォーム:
iOS, Android
|
クロスデバイスのサポート
| パラメータ | 詳細 |
|---|---|
custom_user_id
|
型:
String
PII は不可: 個人を特定できる情報を渡さないでください。生のメールアドレス、電話番号、氏名ではなく、ハッシュ化または匿名化された社内識別子を使用してください。
例:
|
SKAdNetwork のサポート
| パラメータ | 詳細 |
|---|---|
skan_conversion_value
|
プラットフォーム:
iOS
|
skan_first_call_timestamp
|
プラットフォーム:
iOS
|
skan_last_call_timestamp
|
プラットフォーム:
iOS
|
収益トラッキング
適切な検証と通貨処理により、アプリ内購入と収益イベントをトラッキングします。
必須の収益パラメータ
基本的な収益トラッキング
収益の検証を自社で行う場合に、収益イベントのトラッキングに最低限必要なパラメータ。
ベストプラクティス: Singular にイベントリクエストを送信する前に、サーバー側で App Store と収益イベントを検証してください。自社で検証を行う場合は、これらのパラメータのみが必要です。
| パラメータ | 詳細 |
|---|---|
is_revenue_event
|
型:
Boolean
|
amt
|
型:
Number
|
cur
|
型:
String
|
注:
amt
パラメータを送信すると、
is_revenue_event
の値にかかわらず、そのイベントは収益イベントとして処理されます。これには
is_revenue_event=false
も含まれます。イベントを収益イベントとして扱いたくない場合は、
amt
パラメータを省略してください。金額のない収益イベントとしてマークするには、次を送信してください:
is_revenue_event=true
。
収益検証パラメータ
Singular が検証する収益
Singular が App Store とのサーバーサイド収益検証を実行するためのオプションパラメータ。
検証の要件:
- App Store との収益検証を Singular に依存する場合は必須です
- 購入レシートと署名の値の構文が正しいことを確認してください
-
形式が正しくない場合、Singular は収益をブロックし、
__iapinvalid__イベントを生成します
| パラメータ | 詳細 |
|---|---|
purchase_receipt
|
プラットフォーム:
iOS, Android
|
receipt_signature
|
プラットフォーム:
Android
|
purchase_product_id
|
型:
String
|
purchase_transaction_id
|
型:
String
|
広告収益のトラッキング
固定のイベント名と広告収益化属性を持つ標準の EVENT を送信することで、メディエーションプラットフォーム(AdMob、AppLovin MAX、ironSource など)からのインプレッション単位の広告収益をトラッキングします。広告収益は、上記と同じ EVENT エンドポイントを使用します。
メディエーションプラットフォームのデータ: 必要な広告収益属性は、メディエーションプラットフォームの SDK から直接収集してください。各メディエーションプラットフォームが提供する属性については、 広告収益 SDK ガイド を参照してください。
広告収益化の収益
標準の必須パラメータ(認証、デバイス、アプリケーション)に加えて、広告収益イベントには以下が必要です。
| パラメータ | 詳細 |
|---|---|
n
|
型:
String
|
is_admon_revenue
|
型:
Boolean
|
is_revenue_event
|
型:
Boolean
|
amt
|
型:
Number
|
cur
|
型:
String
|
e
|
型:
JSON
任意の属性:
JSON 構造:
URL エンコードの例:
注: 値のない属性は省略してください。 |
リクエストの例
サンプルコードは、複数のプログラミング言語での EVENT エンドポイント連携を示しています。
例に関する免責事項:
コードサンプルには必須パラメータがすべて含まれていない場合があります。本番実装の前に、パラメータの完全なリストを確認してください。開発/テストには一意の
i
(アプリ識別子)を使用してください。
Python の例
import requests
url = 'https://s2s.singular.net/api/v1/evt'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
params = {
'a': 'sdk_key_here',
'p': 'Android',
'i': 'com.singular.app',
'ip': '10.1.2.3',
've': '9.2',
'ma': 'samsung',
'mo': 'SM-G935F',
'lc': 'en_US',
'bd': 'Build/13D15',
'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
'n': 'sng_add_to_cart'
}
response = requests.post(url, data=params, headers=headers)
print(response.json())
cURL の例
curl -X POST "https://s2s.singular.net/api/v1/evt" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "a=sdk_key_here" \
--data-urlencode "p=Android" \
--data-urlencode "i=com.singular.app" \
--data-urlencode "ip=10.1.2.3" \
--data-urlencode "ve=9.2" \
--data-urlencode "ma=samsung" \
--data-urlencode "mo=SM-G935F" \
--data-urlencode "lc=en_US" \
--data-urlencode "bd=Build/13D15" \
--data-urlencode "aifa=8ecd7512-2864-440c-93f3-a3cabe62525b" \
--data-urlencode "asid=edee92a2-7b2f-45f4-a509-840f170fc6d9" \
--data-urlencode "n=sng_add_to_cart"
HTTP の例
POST /api/v1/evt HTTP/1.1
Host: s2s.singular.net
Content-Type: application/x-www-form-urlencoded
Accept: application/json
a=sdk_key_here&p=Android&i=com.singular.app&ip=10.1.2.3&ve=9.2&ma=samsung&mo=SM-G935F&lc=en_US&bd=Build%2F13D15&aifa=8ecd7512-2864-440c-93f3-a3cabe62525b&asid=edee92a2-7b2f-45f4-a509-840f170fc6d9&n=sng_add_to_cart
Java の例
// Endpoint
String endpoint = "https://s2s.singular.net/api/v1/evt";
// Parameters
Map<String, String> params = new HashMap<>();
params.put("a", "sdk_key_here");
params.put("p", "Android");
params.put("i", "com.singular.app");
params.put("ip", "10.1.2.3");
params.put("ve", "9.2");
params.put("ma", "samsung");
params.put("mo", "SM-G935F");
params.put("lc", "en_US");
params.put("bd", "Build/13D15");
params.put("aifa", "8ecd7512-2864-440c-93f3-a3cabe62525b");
params.put("asid", "edee92a2-7b2f-45f4-a509-840f170fc6d9");
params.put("n", "sng_add_to_cart");
// Build form-urlencoded body
StringBuilder form = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if (form.length() > 0) form.append('&');
form.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append('=')
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
}
byte[] body = form.toString().getBytes(StandardCharsets.UTF_8);
// Create connection
URL url = new URL(endpoint);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Accept", "application/json");
// Write body
try (OutputStream os = conn.getOutputStream()) {
os.write(body);
}
// Get response
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("HTTP Status Code: " + responseCode);
System.out.println("Response: " + response.toString());
conn.disconnect();
レスポンスコードとエラー
EVENT エンドポイントは、リクエストの成否を示す HTTP ステータスコードと JSON レスポンスを返します。
エラーの完全なドキュメント: S2S レスポンスコードとエラー処理
テストと検証
本番環境へのデプロイ前に、Singular SDK Console を使用してリアルタイムのデータ検証で S2S イベント連携を確認してください。
テスト手順
エンドツーエンドの検証
- テストデバイスの登録: デバイスの広告 ID を取得し、次に追加します: Singular SDK Console
- コンソールログの有効化: テストデータを取得するため、SDK Console にデバイス識別子を追加します
-
開発用 App ID の使用:
テストデータと本番データを分けるため、アプリ識別子を開発版(例:
com.singular.app.dev)で上書きします - ビルドと起動: 終了状態からアプリをビルドまたは起動します
- クライアントデータの検証: アプリが必要なすべての Singular データポイントをサーバーに送信していることを確認します
-
セッションの確認:
サーバーが必要なすべてのパラメータとともに SESSION リクエストを次に送信していることを確認します:
https://s2s.singular.net/api/v1/launch - SDK Console の確認(セッション): 数秒以内に、SESSION イベントが SDK Console に表示されるはずです
イベントのテスト
- イベントのトリガー: アプリ内でイベントをトリガーします
- イベントデータの検証: 必要なすべての Singular データポイントとともに、イベントがサーバーに送信されたことを確認します
-
サーバーリクエストの確認:
サーバーが必要なすべてのパラメータとともに EVENT リクエストをエンドポイント(V2
https://s2s.singular.net/api/v2/evtまたは V1https://s2s.singular.net/api/v1/evt)に送信していることを確認します。 - SDK Console の確認(イベント): 数秒以内に、EVENT が SDK Console に表示されるはずです
- テストの繰り返し: 送信されたすべてのイベントが期待どおりの値であることを検証します
重要な確認事項:
- EVENT を受信する前に、アプリの起動/フォアグラウンド移行時に SESSION イベントが発生していることを確認します
- EVENT の必須データポイントが SESSION のデータポイントと一致していることを確認します
成功の指標: イベントが SDK Console に表示されれば、エンドツーエンドのイベント連携テストは成功です。
参考リソース
テストのドキュメント
総合的なテストガイド: S2S 連携テストガイド