Actuals Report

    액츄얼스 리포트(Actuals Report)는 트래킹하고 있는 데이터를 자유롭게 확인할 수 있는 통계 리포트입니다.

    에어브릿지에서 제공하는 다양한 데이터 필드를 활용하여 메트릭을 지정하고 특정 기준(그룹바이)들로 데이터를 세분화하거나 필터를 적용하는 등 원하는 형태로 리포트를 커스텀하게 구성할 수 있습니다.

    웹 환경에서 고유 유저를 집계하는 기준은 '쿠키 ID'와 '유저 ID'입니다.

    • 쿠키 ID: 로그인 여부와 관계없이 서비스에 유입된 전체 유저가 집계됩니다.

    • 유저 ID: 로그인 정보를 활용해 서비스에서 1명의 회원으로 구분되는 유저가 집계됩니다. 웹 SDK에 유저를 식별하는 속성(user.externalUserID)이 설정돼야 User ID를 수집할 수 있습니다. 자세한 내용은 개발자 가이드를 참고해 주세요.


    리포트 생성하기

    POST

    https://api.airbridge.io/reports/api/v7/apps/{app_name}/actuals/query

    Actuals Report의 통계 데이터를 요청합니다.

    rate limit: 일반적인 사용량에는 별도의 제한이 없습니다. 다만, 서비스 안정성을 위협하는 과도한 요청이 감지될 경우, 일시적으로 429 Too Many Requests 응답이 반환될 수 있습니다.

    Request

    Headers

    Accept-Language
    string

    API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

    Content-Type
    string

    리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

    Authorization
    string

    API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

    Path Params

    app_name
    필수string

    에어브릿지 앱 이름(App Name)

    Body Params

    from
    필수string

    요청할 리포트 데이터의 시작일.

    • YYYY-MM-DD 형태입니다.

    • 에어브릿지 앱의 타임존이 적용된 날짜이어야 합니다.

    to
    string

    요청할 리포트 데이터의 종료일.

    • YYYY-MM-DD 형태입니다.

    • 에어브릿지 앱의 타임존이 적용된 날짜이어야 합니다.

    • 현재 날짜까지 설정할 수 있으며 한 번에 조회할 수 있는 최대 기간은 400일입니다.

    groupBys
    필수string[]

    리포트 그룹바이.

    세분화하여 보고자 하는 항목을 ‘그룹바이'으로 설정하여 리포트를 조회할 수 있습니다. 액츄얼스 리포트에서 선택할 수 있는 전체 그룹바이 리스트는 메타데이터 가져오기 (GroupBy) API를 통해서 확인 할 수 있습니다.

    최대 10개까지 설정할 수 있습니다.

    metrics
    필수string[]

    리포트 메트릭.

    메트릭으로 다양한 광고 성과 데이터를 조회할 수 있습니다. 액츄얼스 리포트에서 선택할 수 있는 전체 메트릭 리스트는 메타데이터 가져오기 (Metric) API를 통해서 확인 할 수 있습니다.

    최대 20개까지 설정할 수 있습니다.

    filters
    필수object[]

    '그룹바이'로 제공하는 항목들에 대한 필터.

    조건을 만족하는 데이터에 대한 통계 데이터를 리포트에서 조회할 수 있습니다.

    filters[0].dimension
    필수string

    필터를 지정할 그룹바이.

    groupBys 내에 정의된 값만 사용하실 수 있습니다.

    filters[0].filterType
    필수enum

    필터에 적용할 연산자.

    ENUM VALUES
    IN

    속해있다. 액츄얼스 리포트에서는 같다(is, =)에 대응합니다.

    NOT IN

    속해있지 않다. 액츄얼스 리포트에서는 같지 않다(is not, ≠)에 대응합니다.

    LIKE

    포함한다. (contains, ∋)

    NOT LIKE

    포함하지 않는다. (does not contain, ∌)

    EXIST

    값이 존재한다. (exists)

    NOT EXIST

    값이 존재하지 않는다. (does not exist)

    filters[0].values
    string[]

    필터에 적용할 값.

    sorts
    필수object[]

    '그룹바이' 또는 '메트릭'을 기준으로 리포트 데이터를 정렬할 수 있습니다.

    sorts[0].fieldName
    필수string

    정렬에 사용할 그룹바이 또는 메트릭.

    groupBys 또는 metrics 내에 정의된 값만 사용하실 수 있습니다.

    sorts[0].isAscending
    boolean

    정렬 기준의 오름차순(A-Z) 여부. (기본값: true)

    option
    object

    추가 옵션을 설정할 수 있습니다.

    option.eventTimestampSource
    enum

    이벤트가 발생한 시각을 확인할 수 있습니다. event_occurred_date가 기본 설정입니다.

    ENUM VALUES
    target_event_date

    해당 이벤트의 타겟 이벤트가 발생한 시각입니다.

    event_occurred_date

    해당 이벤트가 발생한 시각입니다.

    touchpoint_date

    해당 이벤트의 터치포인트가 발생한 시각입니다.

    Request
    12345
    curl -X POST 'https://api.airbridge.io/reports/api/v7/apps/{app_name}/actuals/query' \
      -H 'Accept-Language: ko' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}' \
      -d '{"from":"2022-11-04","groupBys":["event_source","event_type","event_category"],"metrics":["app_events"],"filters":[{"dimension":"channel","filterType":"IN","values":["App"]}],"sorts":[{"fieldName":"event_type","isAscending":true}]}'
    Payload
    1234567891011121314151617181920212223242526
    {
      "from": "2022-11-04",
      "groupBys": [
        "event_source",
        "event_type",
        "event_category"
      ],
      "metrics": [
        "app_events"
      ],
      "filters": [
        {
          "dimension": "channel",
          "filterType": "IN",
          "values": [
            "App"
          ]
        }
      ],
      "sorts": [
        {
          "fieldName": "event_type",
          "isAscending": true
        }
      ]
    }

    Response

    200SUCCESS

    task.status

    404ERROR

    Response
    123456
    {
      "task": {
        "status": "RUNNING",
        "taskId": "5e286bd4-b4b1-4c04-8f6a-670dc7ce637d"
      }
    }
    Response
    123456
    {
      "type": "about:blank",
      "title": "Not Found",
      "status": 404,
      "traceId": "1-000000-000000000000000"
    }

    리포트 가져오기

    GET

    https://api.airbridge.io/reports/api/v7/apps/{app_name}/actuals/query/{task_id}

    비동기 요청 상태 정의

    비동기 요청 상태는 API 요청 결과의 task.status로 확인할 수 있습니다.

    안내 메세지(Notification) 정의

    집계 과정에서 일부 데이터를 제거하거나 가려졌을 경우(마스킹), notification[0].code에 해당 사유를 확인할 수 있습니다.

    메타 개인정보보호정책

    메타 개인정보보호정책에 따라 에어브릿지 리포트에 설정한 조회 기간 동안 발생한 일부 메타 비즈니스(facebook.business) 데이터가 마스킹됩니다. isMasked가 true면 마스킹된 데이터입니다.

    메타 개인정보보호정책에 대한 자세한 내용은 에어브릿지 가이드를 참고해 주세요.

    Request

    Headers

    Accept-Language
    string

    API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

    Content-Type
    string

    리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

    Authorization
    string

    API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

    Path Params

    app_name
    필수string

    에어브릿지 앱 이름(App Name)

    task_id
    필수string

    '리포트 생성하기' API의 결과값에서 반환한 task_id입니다.

    Query Params

    skip
    number

    결과값에서 건너뛸 Row의 수.

    결과값에서 처음 N개의 Row를 제외하고 가져옵니다.

    기본값은 0 입니다.

    size
    number

    반환할 Row 수.

    skip으로 건너뛴 결과의 다음부터 N개의 Row를 가져옵니다.

    기본값은 100입니다.

    예시) ?skip=200&size=100

    이면 처음 200개를 건너뛰고 201번쨰부터 300번째 까지의 Row를 가져옵니다.

    keyword
    string

    GroupBy에서 필터링할 검색 키워드.

    viewFormat
    booleannullable

    대시보드에서 Actuals Report에 대한 값을 표현해 줄 때 사용하는 포맷 정보를 포함할지 여부를 결정합니다.

    true일 경우 viewFormat 필드에 (메타 애즈 마스킹과 같은) 포맷 정보가 "{value}", "{value} +α", "Privacy Block" 등 과 같은 형태로 추가됩니다.

    기본값은 false 입니다.

    Request
    1234
    curl -X GET 'https://api.airbridge.io/reports/api/v7/apps/{app_name}/actuals/query/{task_id}?skip=0&size=100&viewFormat=false' \
      -H 'Accept-Language: ko' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}'

    Response

    200SUCCESS

    데이터 집계가 완료된 결과를 반환합니다. statusSUCCESS일 경우, actuals에 데이터 및 메타데이터, 메세지 등을 담아 전송합니다.

    200SUCCESS

    비동기 요청을 처리하는 중입니다.

    해당 API를 주기적으로 폴링(Polling)하여 결과를 확인할 수 있으며, 요청 상태는 요청 상태는 task.status로 확인할 수 있습니다.

    Response
    123456789101112131415161718192021222324252627282930313233343536373839404142434445
    {
      "task": {
        "status": "SUCCESS",
        "taskId": "5e286bd4-b4b1-4c04-8f6a-670dc7ce637d",
        "endedAt": "2022-10-01T00:00:00+00:00"
      },
      "actuals": {
        "data": {
          "rows": [
            {
              "values": {
                "app_installs": {
                  "value": 100,
                  "isMasked": false,
                  "viewFormat": "{value}"
                }
              },
              "groupBys": [
                "<groupBy>"
              ]
            },
            {
              "values": {
                "app_installs": {
                  "value": 13,
                  "isMasked": true,
                  "viewFormat": "{value} +α"
                }
              },
              "groupBys": [
                "<groupBy>"
              ]
            }
          ]
        },
        "metadata": {
          "rowCount": 2
        }
      },
      "pagination": {
        "hasNext": true,
        "totalCount": 200
      },
      "notifications": []
    }
    Response
    123456
    {
      "task": {
        "status": "RUNNING",
        "taskId": "5e286bd4-b4b1-4c04-8f6a-670dc7ce637d"
      }
    }

    메타데이터 가져오기 (Metric)

    GET

    https://api.airbridge.io/dataspec/v2/apps/{app_name}/actual-report/metrics

    사용할 수 있는 리포트 메트릭을 조회합니다. [참고]

    Request

    Headers

    Accept-Language
    string

    API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

    Content-Type
    string

    리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

    Authorization
    string

    API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

    Path Params

    app_name
    필수string

    에어브릿지 앱 이름(App Name)

    Request
    1234
    curl -X GET 'https://api.airbridge.io/dataspec/v2/apps/{app_name}/actual-report/metrics' \
      -H 'Accept-Language: ko' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}'

    Response

    200SUCCESS

    404ERROR

    입력한 필드에 오류가 있거나 해당하는 리소스가 없습니다.

    Response
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
    {
      "data": [
        {
          "fields": [
            {
              "key": "touchpoints_impression_click",
              "name": "Touchpoints (Impression+click)",
              "description": "Impression 수와 Click 수의 합"
            },
            {
              "key": "impressions",
              "name": "Impressions",
              "description": "Impression 수"
            },
            {
              "key": "clicks",
              "name": "Clicks",
              "description": "Click 수"
            }
          ],
          "groupName": "Touchpoint",
          "parentGroupName": "Touchpoint"
        },
        {
          "fields": [
            {
              "key": "app_events",
              "name": "Events (App)",
              "description": "앱에서 발생한 이벤트 수"
            },
            {
              "key": "app_event_value",
              "name": "Event 값 (App)",
              "description": "앱에서 발생한 이벤트 값의 합"
            }
          ],
          "groupName": "App Event",
          "parentGroupName": "App"
        },
        {
          "fields": [
            {
              "key": "app_installs",
              "name": "Installs (App)",
              "description": "Install 수"
            },
            {
              "key": "app_first_installs",
              "name": "First Installs (App)",
              "description": "최초로 설치된 Install 수"
            }
          ],
          "groupName": "App Install",
          "parentGroupName": "App"
        },
        {
          "fields": [
            {
              "key": "app_sign_up",
              "name": "회원가입 (App)",
              "description": "앱에서 발생한 회원가입 이벤트 수"
            },
            {
              "key": "app_sign_in",
              "name": "로그인 (App)",
              "description": "앱에서 로그인 이벤트 수"
            },
            {
              "key": "app_sign_out",
              "name": "로그아웃 (App)",
              "description": "앱에서 로그아웃 이벤트 수"
            }
          ],
          "groupName": "App Standard Event",
          "parentGroupName": "App"
        }
      ]
    }
    Response
    123456
    {
      "type": "about:blank",
      "title": "Not Found",
      "status": 404,
      "traceId": "1-000000-000000000000000"
    }

    메타데이터 가져오기 (GroupBy)

    GET

    https://api.airbridge.io/dataspec/v2/apps/{app_name}/actual-report/fields

    사용할 수 있는 리포트 그룹바이를 조회합니다. [참고]

    Request

    Headers

    Accept-Language
    string

    API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

    Content-Type
    string

    리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

    Authorization
    string

    API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

    Path Params

    app_name
    필수string

    에어브릿지 앱 이름(App Name)

    Request
    1234
    curl -X GET 'https://api.airbridge.io/dataspec/v2/apps/{app_name}/actual-report/fields' \
      -H 'Accept-Language: ko' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}'

    Response

    200SUCCESS

    404ERROR

    입력한 필드에 오류가 있거나 해당하는 리소스가 없습니다.

    Response
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
    {
      "data": [
        {
          "fields": [
            {
              "key": "event_date",
              "name": "Event Date",
              "example": "2019-05-31",
              "description": "이벤트 발생 날짜와 시간 (YYYY-MM-DD)",
              "serveToFilter": true
            },
            {
              "key": "event_year",
              "name": "Event Year",
              "example": "2019",
              "description": "이벤트 발생 년도",
              "serveToFilter": true
            },
            {
              "key": "event_month",
              "name": "Event Month",
              "example": "04",
              "description": "이벤트 발생 월",
              "serveToFilter": true
            }
          ],
          "groupName": "Event Datetime",
          "parentGroupName": null
        },
        {
          "fields": [
            {
              "key": "event_source",
              "name": "Event Source",
              "example": "App",
              "description": "Event가 발생한 소스",
              "serveToFilter": true
            },
            {
              "key": "event_type",
              "name": "Event Type",
              "example": "Impression",
              "description": "Event 타입",
              "serveToFilter": true
            },
            {
              "key": "event_category",
              "name": "Event Category",
              "example": "Move to App Store (Link)",
              "description": "Event 카테고리",
              "serveToFilter": true
            }
          ],
          "groupName": "Event Hierarchy",
          "parentGroupName": null
        },
        {
          "fields": [
            {
              "key": "channel",
              "name": "Channel",
              "example": "moloco",
              "description": "Touchpoints 와 Conversion이 발생한 Channel\n",
              "serveToFilter": true
            },
            {
              "key": "campaign",
              "name": "Campaign",
              "example": "2018_summer_campaign",
              "description": "Touchpoints 와 Conversion이 발생한 Campaign \n(SAN Publisher 대시보드에서 입력한 값 또는 Tracking Link의 캠페인 파라미터 값)",
              "serveToFilter": true
            }
          ],
          "groupName": "Touchpoint",
          "parentGroupName": null
        }
      ]
    }
    Response
    123456
    {
      "type": "about:blank",
      "title": "Not Found",
      "status": 404,
      "traceId": "1-000000-000000000000000"
    }