アナリティクスクエリAPIを使用すると、日付範囲にわたる集約された体験メトリクスを照会できます。このAPIは次のことをサポートしています。
- あなたの体験における日々のアクティブユーザー(DAU)、収益、保持率、およびその他のメトリクスを照会。
- プラットフォーム、国、年齢層などの次元で結果をフィルタリングおよびグループ化。
- 結果をポーリングできる長時間の操作として遅いクエリを自動的に処理。
このAPIを使用する前に、あなたの体験のためにAPIキーを生成する必要があります。キーを作成する際に、アクセス権限にあなたの体験を追加し、universe.analytics:read操作へのアクセス権を付与します。すべてのリクエストのx-api-keyリクエストヘッダーにキーを含めてください。
すべてのエンドポイントはあなたのユニバースIDを使用します。これは、あなたの体験を選択し、概要ページからユニバースIDをコピーすることでクリエイターダッシュボードで見つけることができます。
メトリクスを照会する
あなたの体験のメトリクスを照会するには:
- APIキーをx-api-keyリクエストヘッダーにコピーします。
- URLの${UniverseId}をあなたの体験のユニバースIDに置き換えます。
- 照会したいメトリクスをmetricに設定します。たとえばDailyActiveUsersなど。
- startTimeとendTimeを希望の日付範囲に設定します。RFC 3339 UTCタイムスタンプを使用します。
- リクエストを送信します。
日々のアクティブユーザーを照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyActiveUsers","granularity": "OneDay","startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
ほとんどのクエリは即座に完了し、200 OKを返します。
レスポンス (200 OK)
{
"path": "v1/universes/1234567890/operations/metrics/abc123",
"done": true,
"metadata": {
"createdTime": "2026-01-15T00:00:00Z"
},
"response": {
"values": [
{
"breakdowns": [],
"dataPoints": [
{ "time": "2026-01-01T00:00:00Z", "value": 10000 },
{ "time": "2026-01-02T00:00:00Z", "value": 10500 }
]
}
]
}
}
大規模な日付範囲に対してAPIは202 Acceptedを返し、"done": falseとなる場合があります。詳細は長時間の操作を参照してください。
リクエストボディフィールド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| metric | 文字列 | はい | 照会するメトリクス。たとえばDailyActiveUsers。完全なリストはサポートされているメトリクスを参照してください。 |
| granularity | 文字列 | はい | 各データポイントの時間バケットサイズ。詳細はグラニュラリティオプションを参照してください。 |
| startTime | 文字列 | はい | 照会ウィンドウの開始。RFC 3339タイムスタンプ。包含されます。任意のUTCオフセットが受け入れられます。結果は常にUTCでバケット化されます。 |
| endTime | 文字列 | はい | 照会ウィンドウの終了。RFC 3339タイムスタンプ。排他的です。たとえば、"2026-02-01T00:00:00Z"は1月31日までのデータを含みます。 |
| breakdown | 文字列[] | いいえ | 結果をグループ化するための次元。各エントリは"Platform"のような単一の次元名です。ブレークダウンなしの場合は省略します。詳細はブレークダウンの使用を参照してください。 |
| filter | オブジェクト[] | いいえ | 特定の次元値に結果を制限するフィルタ。各エントリにはdimension、values、operationがあります。フィルタリングなしの場合は省略します。詳細は結果をフィルタリングを参照してください。 |
| limit | 整数 | いいえ | 戻るべき最大のブレークダウン系列の数。合計メトリクス値の降順でランク付けされます。granularityが"None"で、breakdownが設定されているときのみサポートされます。このフィールドを省略するか、0に設定すると、メトリクス依存のデフォルト上限が適用されます。 |
最も早いstartTimeはメトリクスタイプによって異なります:
- 標準メトリクス(エンゲージメント、収益化、獲得、保持):最大4年の履歴。
- パフォーマンスメトリクス(クラッシュ率、フレームレートなど):最大28日の履歴。
保持期間を超える照会は400エラーを返し、コード2001が付与されます。
長時間の操作
ほとんどのクエリは即座に完了し、200 OKを返します。大規模な日付範囲または多くのブレークダウン系列を持つクエリの場合、APIは202 Acceptedを返し、"done": falseとpathをポーリングします。
保留中 (202):
{
"path": "path/to/poll",
"done": false,
"metadata": {
"createdTime": "2026-01-15T00:00:00Z"
}
}
doneがfalseの場合、同じx-api-keyヘッダーを使用して、レスポンスからのpath値をhttps://apis.roblox.com/analytics-query-api/{path}に置き換えたGETリクエストを送信します。doneがtrueになるまで繰り返してください。
完了済み (200):
{
"path": "path/to/poll",
"done": true,
"metadata": {
"createdTime": "2026-01-15T00:00:00Z"
},
"response": {
"values": [
{
"breakdowns": [],
"dataPoints": [
{
"time": "2026-01-01T00:00:00Z",
"value": 10000
}
]
}
]
}
}
空のbreakdowns配列は、ブレークダウンが要求されなかったことを示しています。ブレークダウンが使用されている場合、response.valuesの各エントリは1つの次元値に対応します。詳細はブレークダウンの使用を参照してください。
操作が失敗した場合、ボディにはresponseの代わりにerrorが含まれます:
{
"path": "path/to/poll",
"done": true,
"metadata": {
"createdTime": "2026-01-15T00:00:00Z"
},
"error": {
"code": 2001,
"message": "要求されたグラニュラリティはこのメトリクスに対してサポートされていません。"
}
}
| フィールド | 型 | 説明 |
|---|---|---|
| path | 文字列 | 操作のパス。初期レスポンスで返された値と一致します。 |
| done | ブール | エラーが存在する場合は常にtrue。 |
| metadata.createdTime | 文字列 | 操作が作成されたときのRFC 3339タイムスタンプ。 |
| error.code | 整数 | 数値エラーコード。詳細は一般的なエラーを参照してください。 |
| error.message | 文字列 | エラーの人間が読み取れる説明。 |
response.valuesの各エントリは1つの系列を表し、ブレークダウンが使用されている場合は次元値ごとに1つのエントリです。またはブレークダウンが要求されていない場合はbreakdowns: []の単一エントリです。dataPoints内の各データポイントには:
| フィールド | 説明 |
|---|---|
| time | 時間バケットの開始時刻のUTCタイムスタンプ。 |
| value | 数値メトリクス値。 |
| stringValues | データポイントのテキスト値。文字列の配列としてのみ存在します。テキスト値メトリクスについては、以下のテキスト値メトリクスを参照してください。 |
| status | データポイントの状態インジケーター。シリーズに適用されない場合は省略されます。詳細はデータポイントの状態を参照してください。 |
テキスト値メトリクス
ほとんどのメトリクスは数値であり、結果をvalueに報告します。一部のメトリクスは、番号の代わりに各データポイントをテキストで記述します。その場合、データはstringValues配列で返され、valueは意味を持ちません。数値メトリクスの場合、stringValuesフィールドは完全に省略されます。
たとえば、ThumbnailWinningSegmentsは、各時間バケットのWinning thumbnail segmentsを文字列のリストとして報告します:
{
"time": "2026-01-01T00:00:00Z",
"value": 0,
"stringValues": ["TopEngagement", "HighCTR"]
}
データポイントの状態
| ステータス | 説明 | 例 |
|---|---|---|
| Valid | データポイントは完全で、完全な時間バケットをカバーしています。 | 確定されたクリエイター報酬の支払い。 |
| Projected | 値は推定値であり、変更される可能性があります。 | 確定されていない期間の推定クリエイター報酬の支払い。 |
| NotStatisticallySignificant | サンプルサイズが信頼できる値を生成するには不十分です。 | 小さな国のクラッシュ率。その場合、ノイズの多い値が実際の回帰と誤解される可能性があります。 |
グラニュラリティオプション
granularityフィールドは、レスポンス内の各時間バケットのサイズを制御します。バケットの境界はUTCに整列されています。たとえば、OneDayバケットはUTCの真 midnightからUTCの真 midnightまで実行されるため、startTimeまたはendTimeの任意のUTCオフセットはバケット化の前にUTCに正規化されます。
すべてのメトリクスがすべてのグラニュラリティをサポートしているわけではありません。詳細についてはサポートされているメトリクスを参照してください。
| グラニュラリティ | 説明 | 備考 |
|---|---|---|
| OneMinute | 1分バケット | パフォーマンスメトリクスのみ。 |
| HalfHour | 30分バケット | パフォーマンスメトリクスのみ。 |
| OneHour | 1時間バケット | パフォーマンスメトリクスの他、収益化および推奨イベントメトリクスの一部。 |
| OneDay | 1日バケット | すべてのメトリクスでサポートされています。 |
| OneWeek | 1週間バケット | ほとんどのエンゲージメント、収益化、獲得メトリクス。 |
| OneMonth | 1か月バケット | ほとんどのエンゲージメント、収益化、獲得メトリクス。 |
| None | 全体範囲の単一データポイント | ほとんどのエンゲージメント、収益化、獲得メトリクス。 |
ブレークダウンの使用
すべてのメトリクスがすべてのブレークダウンをサポートしているわけではありません。どのブレークダウンが各メトリクスに利用可能かはサポートされているメトリクスを参照してください。
ブレークダウンは次元によってメトリクス結果をグループ化し、ユニークな次元値ごとに1つの系列を返します。リクエストに1つ以上の次元名を持つbreakdown配列を追加します。
プラットフォーム別の収益を照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyRevenue","granularity": "OneDay","breakdown": ["Platform"],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
response.values内の各エントリには、その系列の次元値を識別するbreakdowns配列が含まれています:
{
"response": {
"values": [
{
"breakdowns": [{ "dimension": "Platform", "value": "Computer" }],
"dataPoints": [{ "time": "2026-01-01T00:00:00Z", "value": 8200 }]
},
{
"breakdowns": [{ "dimension": "Platform", "value": "Phone" }],
"dataPoints": [{ "time": "2026-01-01T00:00:00Z", "value": 3400 }]
}
]
}
}
breakdowns内の各オブジェクトは:
| フィールド | 説明 |
|---|---|
| dimension | 次元名。breakdownリクエストフィールドのエントリと一致します。 |
| value | 生の次元値。filterクエリを構築する際に使用します。 |
| displayValue | 次元値の人間が読み取れるラベル。表示ラベルが存在しない場合は省略されます。製品IDやファネルステップ名のような次元では、valueとは異なる場合があります。 |
結果をフィルタリング
フィルタはクエリ結果を特定の次元値に制限します。リクエストにfilter配列を追加し、各エントリにdimension、一致させるvalues、適用するoperationを指定します。
モバイルデバイスのみのDAUを照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyActiveUsers","granularity": "OneDay","filter": [{"dimension": "Platform","values": ["Phone", "Tablet"],"operation": "In"}],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
フィルタ操作
| 操作 | 説明 |
|---|---|
| In | 次元値が提供されたセットに含まれている結果を含めます。 |
| NotIn | 次元値が提供されたセットに含まれている結果を除外します。 |
| GreaterThan | 数値次元値が提供された値より大きい結果を含めます。 |
| GreaterThanOrEqual | 数値次元値が提供された値以上の結果を含めます。 |
| LessThan | 数値次元値が提供された値より小さい結果を含めます。 |
| LessThanOrEqual | 数値次元値が提供された値以下の結果を含めます。 |
| Match | 次元値が提供された文字列パターンと一致する結果を含めます。 |
フィルタとブレークダウンを同じリクエストで組み合わせることができます。
次元値の発見
次元値エンドポイントは、メトリクスの1つ以上の次元に対する利用可能な値を日付範囲内でリストします。メトリクス自体を計算せずに、filterおよびbreakdownクエリの有効な値を発見するのに役立ちます。たとえば、国、製品ID、ファネルステップIDなどです。
あなたの体験の次元値を照会するには:
- APIキーをx-api-keyリクエストヘッダーにコピーします。
- URLの${UniverseId}をあなたの体験のユニバースIDに置き換えます。
- 照会する次元の文脈を提供するメトリクスをmetricに設定します。
- 値を取得したい次元名をdimensionsに設定します。
- startTimeとendTimeを希望の日付範囲に設定します。RFC 3339 UTCタイムスタンプを使用します。
- リクエストを送信します。
DAUの国コードを発見するcurl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/dimension-values' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyActiveUsers","dimensions": ["Country"],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
リクエストボディフィールド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| metric | 文字列 | はい | 次元解決のためのメトリクス。次元ルックアップの名前空間を提供します。 |
| dimensions | 文字列[] | はい | 値を取得するための次元名。各エントリは単一の次元名です。たとえば"Country"。 |
| startTime | 文字列 | はい | 照会ウィンドウの開始。RFC 3339タイムスタンプ。包含されます。任意のUTCオフセットが受け入れられます。結果は常にUTCでバケット化されます。 |
| endTime | 文字列 | はい | 照会ウィンドウの終了。RFC 3339タイムスタンプ。排他的です。たとえば、"2026-02-01T00:00:00Z"は1月31日までのデータを含みます。 |
| filter | オブジェクト[] | いいえ | 特定の次元値に結果を制限するフィルタ。各エントリにはdimension、values、operationがあります。フィルタリングなしの場合は省略します。詳細は結果をフィルタリングを参照してください。 |
| granularity | 文字列 | いいえ | 時間バケットサイズ。メトリクスエンドポイントとは異なり、このフィールドはオプションです。詳細はグラニュラリティオプションを参照してください。 |
| limit | 整数 | いいえ | 次元ごとに戻るべき最大の値の数。合計メトリクス値の降順でランク付けされます。granularityが省略されるか、"None"の場合のみサポートされます。このフィールドを省略するか、0に設定すると、メトリクス依存のデフォルト上限が適用されます。 |
ほとんどのクエリは即座に完了し、200 OKと"done": trueを返します。大規模な日付範囲のクエリに対してAPIは202 Acceptedを返し、"done": falseとなる場合があります。詳細は長時間の操作を参照してください。ポーリングするときは、レスポンスからのpath値を使用します。これはv1/universes/{universeId}/operations/dimension-values/{operationId}にポイントします。
完了済み (200):
{
"path": "path/to/poll",
"done": true,
"metadata": {
"createdTime": "2026-01-15T00:00:00Z"
},
"response": {
"values": [
{
"dimension": "Country",
"values": [{ "value": "US" }, { "value": "GB" }]
}
]
}
}
response.values内の各エントリは要求された1つの次元を表します。values内の各オブジェクトには:
| フィールド | 説明 |
|---|---|
| value | 生の次元値。filterクエリを構築する際に使用します。 |
| displayValue | 次元値の人間が読み取れるラベル。製品IDのようなID型次元に対してのみ存在します。ほとんどの次元に対して省略されており、Countryなどの次元には表示されません。valueと異なる場合があります。 |
エラーはメトリクスエンドポイントと同じdone: trueおよびerrorラッパーを使用します。指定されたメトリックに対してサポートされていない次元の場合、400とともにコード2001が返されます。詳細は一般的なエラーを参照してください。
一般的なクエリ
次の例は、クリエイターダッシュボードの分析ページで利用可能なメトリクスを含む一般的なクエリを示します。
収益
日々の収益をRobuxで照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyRevenue","granularity": "OneDay","startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
D1保持
D1保持を照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "ForwardD1Retention","granularity": "OneDay","startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
新規ユーザー対戻りユーザー
新規対戻りユーザーでブレークダウンされたDAUを照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyActiveUsers","granularity": "OneDay","breakdown": ["IsNewUser"],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
週間集計
より少ないデータポイントで長い範囲のビューを得るために、粗いグラニュラリティを使用します。OneWeekのグラニュラリティでは、各バケットは7日間の期間を通じて異なるユーザーをカウントします — 日々の値の合計ではありません。
週間のグラニュラリティでDAUを照会curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyActiveUsers","granularity": "OneWeek","startTime": "2026-01-01T00:00:00Z","endTime": "2026-04-01T00:00:00Z"}'
トップNブレークダウン
1つのメトリクスでランキングし、同じ値のセットに対して別のものを表示するには、2つのリクエストを使用します。たとえば、DAUによる上位5つの国の有料ユーザー転換を見るには:
ステップ1: トップNの次元値を発見します。granularity: "None"を使用して、単一の集約結果を得て、limitで戻るシリーズの数を制限します:
DAUによる上位5か国を発見curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "DailyActiveUsers","granularity": "None","breakdown": ["Country"],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z","limit": 5}'
ステップ2: ステップ1で返された値にフィルタして表示メトリクスを照会します:
上位5カ国の有料ユーザー転換curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "PayingUsersCVR","granularity": "OneDay","breakdown": ["Country"],"filter": [{"dimension": "Country","values": ["US", "GB", "PH", "VN", "DE"],"operation": "In"}],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
ファネルステップ
ファネルは、ユーザーがあなたの体験内の定義されたステップのシーケンスをどのように進むかを示します。ファネルメトリクスを照会するには、2つのリクエストが必要です。なぜなら、ステップIDが動的だからです。
ステップ1: ファネルステップを発見します。ファネルステップは、少なくとも1人のユーザーがそのステップに到達した日だけ結果に表示されます。通常のルックバック期間(90日)は、安全なデフォルトです。不定期に到達するステップでも、発見レスポンスに表示されることを保証します。granularity: "None"を使用して、各ステップごとに単一の集約結果を取得します:
Levelsファネルのファネルステップを発見curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "FunnelUserTotalCount","granularity": "None","breakdown": ["FunnelStep"],"filter": [{"dimension": "FunnelName","values": ["Levels"],"operation": "In"}],"startTime": "2025-11-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
ステップ2: ステップIDを用いて各ステップのファネルメトリクスを照会します:
Levelsファネルの各ステップの場合のユーザー離脱率curl --location 'https://apis.roblox.com/analytics-query-api/v1/universes/${UniverseId}/metrics' \--header 'x-api-key: ${ApiKey}' \--header 'Content-Type: application/json' \--data '{"metric": "FunnelUserChurnRate","granularity": "None","breakdown": ["FunnelStep"],"filter": [{"dimension": "FunnelStep","values": ["1", "2", "3", "4", "5"],"operation": "In"},{"dimension": "FunnelName","values": ["Levels"],"operation": "In"}],"startTime": "2026-01-01T00:00:00Z","endTime": "2026-02-01T00:00:00Z"}'
一般的なエラー
ほとんどのエラーはクエリ操作の失敗として返されます:レスポンスボディには"done": trueと数値のcodeおよびmessage文字列を含むerrorオブジェクトが含まれます。認証およびリソースエラー(401、404)はプレーンなHTTPレスポンスであり、ボディラッパーは存在しないため、以下の表ではエラーコードが—と表示されています。
| ステータス | コード | 原因 | 解決策 |
|---|---|---|---|
| 400 | 2001 | 必要なフィールドが欠けているか、フィールド値が無効です(たとえば、認識されないmetricまたはgranularity)。 | リクエストボディフィールドテーブルを確認し、すべての値が正しくスペルされていることを確かめてください。 |
| 400 | 2001 | 指定されたメトリクスまたは日付範囲に対して要求されたグラニュラリティがサポートされていません。 | グラニュラリティオプションを参照してください。2年以上の期間を超える場合は、OneWeek、OneMonth、またはNoneを使用してください。 |
| 400 | 2001 | filterまたはbreakdownにある次元が指定されたメトリクスに対してサポートされていません。 | サポートされているメトリクスを参照してください。 |
| 400 | 2001 | startTimeがメトリクスのデータ保持期間を超えています。 | 標準メトリクスは最大4年間データを保持します。パフォーマンスメトリクスは28日間データを保持します。 |
| 401 | — | x-api-keyヘッダーが欠けているか、無効であるか、取り消されたものであるか、またはキーがこのユニバースの分析権限を持っていません。 | キーの値を確認し、APIキーがクリエイターダッシュボードで正しい権限を持っていることを確認してください。 |
| 404 | — | 操作IDが存在しません。 | 初期レスポンスで返された操作IDを確認し、ユニバースIDが正しいことを確認してください。 |
| 429 | 3000 | クエリがデータポイントの予算を超えました。 | 日付範囲を縮小するか、粗いグラニュラリティを使用するか、limitを使用してブレークダウンシリーズの数を減らしてください。 |
| 500 | 2000 | 予期しないサーバーエラーが発生しました。 | リクエストを再試行してください。エラーが継続する場合は、新しいDevForum投稿を作成してください。 |
| 503 | 2002 | 短時間の障害が発生しました。 | 短い遅延の後にリクエストを再試行してください。 |
| 504 | 1000 | クエリが最大再試行数の後にタイムアウトしました。 | 短い日付範囲、少ないブレークダウン、または粗いグラニュラリティを試してください。 |