文件目錄

客戶 API

MeetROAS 客戶 API

透過 REST API 查詢成效,並以 Dashboard 編輯器的完整欄位新增或編輯 App 與 Campaign。

1. 快速開始

投手:想用 AI 助手看廣告成效?

  1. 到 Dashboard /account/api 的「API」分頁建立 Key
  2. 完整 Key 只顯示一次;立即用安全方式存入環境變數(例如 read -rs MEETROAS_API_KEY 然後 export MEETROAS_API_KEY、密碼管理器或 CI secrets)
  3. 複製以下命令,直接執行;shell 會自動展開環境變數
Quickstart example
curl https://open.meetroas.com/v1/me \
  -H "Authorization: Bearer $MEETROAS_API_KEY"

開發者:需要整合到自己的服務或腳本?繼續閱讀下方的 REST API 參考。

2. 驗證

取得 API Key

  • 在 Dashboard /account/api 的「API」分頁建立
  • 完整 Key 只在建立時顯示一次,格式: mrp_<id>_<secret>
  • 有效期 30/90/365 天,無永久 Key
  • 每位建立者最多 5 把有效 Key,每個帳號最多 20 把

使用方式

所有 REST 請求都需要帶入 Authorization 標頭:

Authorization header
Authorization: Bearer mrp_<id>_<secret>

權限範圍

建立 Key 時可明確選擇的權限範圍;既有 Key 和預設選項維持唯讀:

  • apps:read — 讀取 App 列表
  • campaigns:read — 讀取 Campaign
  • performance:read — 讀取成效資料(含版位洞察)
  • apps:write — 新增與編輯 App;需同時授予 apps:read
  • campaigns:write — 新增與編輯 Campaign;需同時授予 apps:read 與 campaigns:read

有效權限 = Key 的權限範圍 ∩ 建立者當下角色。建立者被停用或降權後最慢 10 秒生效,撤銷立即生效。

安全提醒

API Key 等同帳號憑證。不要把完整 Key 貼進任何聊天視窗、issue、截圖或原始碼;只放進本機設定檔或環境變數。懷疑外洩就到 Dashboard 撤銷並重新建立。

3. 配額與限制

配額同時強制執行 quota unit 與請求次數。每個方案同時有每分鐘與每日上限:

方案units/分鐘units/日 (UTC)
Free301,000
Starter605,000
Pro12020,000
Scale300100,000

單位消耗

呼叫units
GET /v1/me, GET /v1/apps, GET /v1/apps/{appSlug}/campaigns1
GET /v1/apps/{appSlug}/campaigns/{campaignId}/placement-insights10
GET /v1/.../editor, GET /v1/media/staging/{receipt}1
新增/編輯 App 或 Campaign、暫存媒體5
GET /health, /openapi.json, /docs, /llms.txt0 (不需驗證)

所以 Free 方案每分鐘最多 3 次版位洞察、每日最多 100 次;一般讀取則是每分鐘 30 次、每日 1,000 次。

回應標頭

  • RateLimit-Limit — 每分鐘 units 上限
  • RateLimit-Remaining — 滾動 60 秒剩餘 units
  • RateLimit-Reset — 視窗內最舊一筆離開視窗還要幾秒
  • X-MeetROAS-Daily-Remaining — 當日剩餘 units
  • X-MeetROAS-Api-Version — 1

其他限制

  • GET /v1/apps 不分頁(方案上限最多 30 個 App)
  • 版位洞察最多回 500 個群組,其餘彙總在 other;不提供 5000 列/CSV 模式
  • 不開 CORS,瀏覽器端 JavaScript 無法直接呼叫

4. REST API 參考

基礎網域: https://open.meetroas.com/v1

GET /v1/me

所需權限:任何有效 Key · 配額單位:1

取得目前 API Key 的資訊、帳號方案與配額剩餘。

GET /v1/me
curl "https://open.meetroas.com/v1/me" \
  -H "Authorization: Bearer $MEETROAS_API_KEY"
Response
{
  "ok": true,
  "data": {
    "key": {
      "id": "a7f3k29d1mq4x8bz",
      "label": "My API Key",
      "scopes": ["apps:read", "campaigns:read", "performance:read"],
      "expiresAt": "2027-01-01T00:00:00Z"
    },
    "account": {
      "id": "acc_9f2c4d61-8b3a-4e57-9d10-2f6b8c1e4a77",
      "plan": "pro"
    },
    "creator": {
      "role": "admin"
    },
    "quota": {
      "perMinute": {
        "limit": 120,
        "remaining": 118,
        "resetInSeconds": 42
      },
      "daily": {
        "limit": 20000,
        "remaining": 15234
      }
    }
  }
}

GET /v1/apps

所需權限:apps:read · 配額單位:1

取得帳號內所有 App 的列表。

GET /v1/apps
curl "https://open.meetroas.com/v1/apps" \
  -H "Authorization: Bearer $MEETROAS_API_KEY"
Response
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "brand_4a7c9e21b8d35f60a1c4e7b209d63f8a",
        "slug": "my-game",
        "name": "My Awesome Game",
        "iconUrl": "https://assets.meetroas.com/icons/my-game.png",
        "trafficSource": {
          "id": "trafficstars",
          "label": "TrafficStars"
        },
        "campaignCount": 5,
        "reportingTimezone": "Asia/Taipei"
      }
    ]
  }
}

GET /v1/apps/{appSlug}/campaigns

所需權限:apps:read + campaigns:read · 配額單位:1

取得指定 App 內所有 Campaign。

GET /v1/apps/{appSlug}/campaigns
curl "https://open.meetroas.com/v1/apps/my-game/campaigns" \
  -H "Authorization: Bearer $MEETROAS_API_KEY"
Response
{
  "ok": true,
  "data": {
    "app": {
      "id": "brand_4a7c9e21b8d35f60a1c4e7b209d63f8a",
      "slug": "my-game",
      "name": "My Awesome Game"
    },
    "items": [
      {
        "id": "brand:brand_4a7c9e21b8d35f60a1c4e7b209d63f8a",
        "kind": "primary",
        "label": "My Awesome Game",
        "host": "my-game.meetroas.com",
        "enabled": true,
        "objective": "pwa_install",
        "trafficSource": {
          "id": "trafficstars",
          "label": "TrafficStars"
        }
      }
    ]
  }
}

GET /v1/apps/{appSlug}/campaigns/{campaignId}/placement-insights

所需權限:apps:read + campaigns:read + performance:read · 配額單位:10

取得指定 Campaign 的版位洞察報表與建議。

查詢參數:

  • range: today | 7d | 30d (預設: 7d)
  • dimension: placement | subPlacement | creative | upstreamCampaign | country | environment (預設: placement)
GET placement-insights
curl "https://open.meetroas.com/v1/apps/my-game/campaigns/brand:brand_9f2c41ab7d0e4c518a63b2d7e04f19c5/placement-insights?range=7d&dimension=placement" \
  -H "Authorization: Bearer $MEETROAS_API_KEY"

回應包含 campaigns、totals、rows(最多 500 筆)、other 與 advice(block、whitelist、bids、targeting),詳見 https://open.meetroas.com/openapi.json

新增與編輯 App、Campaign

所有寫入須帶 Idempotency-Key(8–128 字元);PATCH 也須帶對應 /editor GET 回傳的 If-Match ETag。版本過期會回 412。

  • POST /v1/apps、PATCH /v1/apps/{appSlug}:JSON,支援 Dashboard App 編輯器的 content、primary、destination、objective、media。
  • POST /v1/apps/{appSlug}/campaigns、PATCH /v1/apps/{appSlug}/campaigns/{campaignId}:multipart 表單,支援 Dashboard Campaign 編輯器的全部欄位。以 JSON {enabled:boolean} 可調整一般 Campaign 狀態。
  • GET /v1/apps/{appSlug}/editor、GET /v1/apps/{appSlug}/campaigns/{campaignId}/editor:取得完整可編輯資料與 ETag。主要 Campaign 使用 App 編輯器欄位及 apps:write。
  • POST /v1/media/staging:上傳圖示、截圖、主視覺或影片,再把回傳收據填入媒體欄位。新增時 target 為 new-app:{Idempotency-Key} 或 new-page:{appId}:{Idempotency-Key}。

請求欄位與 JSON 結構見 https://open.meetroas.com/openapi.json

5. 錯誤與重試

HTTP意義處理
401 invalid_api_keyKey 無效、已撤銷、已到期,或帳號/建立者失效不要重試;換 Key
403 forbidden_scope權限範圍不足不要重試;用權限足夠的 Key
404 not_foundApp slug 或 campaign id 不存在先用 /v1/apps、/v1/apps/{slug}/campaigns 取正確 id
400 validation_failed參數格式錯(例如 range=14d)修正參數
409 conflict / idempotency_conflict方案限制或重複新增鍵的內容不同後者可依 createdId 找到先前建立的資源
412 precondition_failed編輯快照已變更重新取得 /editor 與 ETag
422 unprocessable_entity編輯器欄位驗證失敗檢查 fieldErrors
428 precondition_required編輯缺少 If-Match先取得 /editor 的 ETag
429 rate_limited / quota_exceededunits 或請求次數超限依 Retry-After 等待
503 service_unavailable相依服務暫時不可用依 Retry-After 等待
5xx (無 Retry-After)內部錯誤指數退避 2/4/8/16/32 秒 + jitter,最多 5 次

GET 請求可直接重試;寫入請保留相同 Idempotency-Key,編輯衝突時重新取得 /editor 與 ETag。

6. 與 Partner Event API 的差異

特性Partner Event API客戶 API
對象下游目標平台商MeetROAS 客戶(投手)與其開發者
主機api.meetroas.comopen.meetroas.com
Workermeetroas (Traffic)meetroas-api (新)
驗證HMAC signature (Key ID + Secret + timestamp)Bearer token (API Key)
方向接收轉換事件(寫入)查詢帳號與成效,管理 App 與 Campaign
配額每 Key 每 60 秒 300 次依方案的 units(Free 30 units/分鐘、1,000 units/日)
OpenAPIdevelopers.meetroas.com/openapi.jsonopen.meetroas.com/openapi.json (Hub /api/openapi.json 307 轉向)

7. 第 2 期預告

GET /v1/apps 第 1 期不分頁(方案上限 30 個 App)。第 2 期起無上限的列表端點支援 ?limit= (1–100, 預設 50) 與不透明的 ?cursor=, 回應 {items, nextCursor}.

OAuth 2.1 規劃在第 3 期。