Revenue Report

    The Revenue Report allows you to view the revenue generated by users who installed the app or opened a deep link during the analysis period. Various revenue metrics and filters are available to create a customized report.

    Additionally, there are no rate limits, allowing you to generate reports as needed.


    Request Report

    POST

    https://api.airbridge.io/reports/api/v3/apps/{app_name}/revenue/query

    Request a Revenue Report.

    rate limit: There is no specific limit for normal usage. However, if excessive requests that may threaten service stability are detected, a temporary 429 Too Many Requests response may be returned.

    Request

    Headers

    Accept-Language
    string

    You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

    Content-Type
    string

    Represents the media type of the resource. Defaults to application/json.

    Authorization
    string

    The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

    Path Params

    app_name
    必須string

    Airbridge App Name. (Unique ID)

    Body Params

    from
    必須string
    to
    必須string
    cohorts
    object[]

    Only one cohort can be set up.

    You can see an example of cohort code here.

    cohorts[0].id
    必須number

    The value should be entered as 0. Other values are not supported.

    cohorts[0].name
    必須string

    The value should be entered as "Cohort". Other values are not supported.

    cohorts[0].definition
    必須object

    Define the cohorts used by the Revenue Report. Always define sub-variables in the order andClauses, orClauses, segment. Check the relationship between each variable below.

    cohorts[0].definition.andClauses
    必須object[]

    The highest-level condition in the cohort definition. All conditions you set are connected with an AND. You must set negated and orClauses as sub-variables.

    • negated (boolean): Sets whether the condition you set in orClauses is negated.

      • true: Negates the condition you set in orClauses, so the condition you set in orClauses is false.

      • false: Does not negate the condition set in orClauses. Therefore, the condition set in orClauses is true.

    cohorts[0].definition.andClauses[*].orClauses | Required ・ object[]

    The conditions you set in the child of andClauses. Connect all the conditions you set with an OR. You must set negated and segment as sub-variables.

    • negated (boolean): Sets whether the condition set in orClauses is negated.

      • true: Negates the condition you set in orClauses, so the condition you set in orClauses is false.

      • false: Does not negate the condition set in the orClauses. Therefore, the condition set in the orClauses is true.

    cohorts[0].definition.andClauses[*].orClauses[*].segment | Required ・ object

    The minimum conditions for a cohort definition. You can set event, filters, and time as sub-variables.

    • event (object): You can define an event triggered by the user and the number of times it occurs. You can set type, operator, and value as sub-variables.

      • type (string): type (string): Sets the event generated by the user. You can set it to any event by using any-event. Other events that can be set can be found in the Event Key column of [Airbridge Data Spec]>[Revenue Report - Audience Events]. Please be aware of the use of '' and _.

      • operator (enum): You can set the comparison operator used for the number of times an event occurs. You can only use one of five: equals, more than or equals, more than, less than or equals, and less than.

      • value (number): You can set the number of times the event occurs. Please enter a natural number.

    • filters (object[]): You can only see certain events out of the ones you have defined. It's the same as the had property in the cohort definition. You can set field and filterType as sub-variables.

      • field (string): Properties that can be set as filters. Please refer to the Property Key column of [Airbridge Data Spec] > [Revenue Report - Audience Properties] for the properties that can be set.

      • filterType (enum): Sets the operators that can be used on the property. Depending on the property you set, the available operators and the values you set with the filter (none, value, values) change.

    • time (object): You can set conditions for when the event occurred. The subvariable will change based on the set condition.

      • operator (enum): Set the condition from during, between, or since. Only one of the three can be set. If the condition is between, the lookup period can be set from 1 February 2023. The maximum period you could set is 90 days.

    groupBy
    必須object
    groupBy.fields
    必須string[]
    granularity
    必須enum
    ENUM VALUES
    day

    Analyze the data by day.

    week

    Analyze the data by week. Calculated in 7 day intervals from the start date.

    month

    Analyze the data by month. Calculated the same month from the start date until the corresponding date in the subsequent month. For example, given a start date of March 10, the same month would be pretended until April 10.

    intervalsPeriod
    integer

    The maximum number of intervals, or time ranges, by granularity.

    • If the granularity is day, week, or month, the default value is 30, 11, or 5, respectively.

    • If the granularity is day, week, or month, the maximum value is 120, 52, or 36, respectively. The minimum values are all 0.

    • The result includes a “0th” interval.

    startEvents
    必須enum[]
    ENUM VALUES
    app_install

    Install (App). Install events that occurred within the selected time period.

    app_deeplink_open

    Deeplink Open (App). Deeplink Open events that occurred within the selected time period.

    app_deeplink_pageview

    Deeplink Pageview (App). Deeplink Pageview events that occurred within the selected time period.

    app_sign_up

    Sign-up (App). Sign-up events that occurred within the selected time period.

    app_sign_in

    Sign-in (App). Sign-in events that occurred within the selected time period.

    returnEvents
    必須enum[]
    ENUM VALUES
    app_order_complete

    Order Complete (App). Order Complete event performed within the selected time period.

    app_first_order_complete

    First Order Complete (App). First Order Complete event performed within the selected time period.

    app_ad_impression

    Ad Impression (App). Ad Impression event performed within the selected time period.

    app_ad_click

    Ad Click (App). Ad Click event performed within the selected time period.

    app_subscribe

    Subscribe (App). Subscribe event performed within the selected time period.

    metric
    必須enum
    ENUM VALUES
    app_revenue

    Revenue(App). The revenue generated by the users who performed the Start Event and the Return Event. (In local currency) Support cumulative, on-day aggregation type.

    app_user_count

    User Count (App). The total number of unique users who performed revenue events. Support cumulative, on-day aggregation type.

    app_event_count

    Event Count (App). The total number of revenue events. Support cumulative, on-day aggregation type.

    app_roas

    ROAS (App). The return on ad spend of the users who performed the Start Event and the Retrun Event. (In local currency) Support cumulative aggregation type.

    app_arpu

    ARPU (App). The average revenue per user who performed the Start Event. (In local currency) Support cumulative aggregation type.

    app_arppu

    ARPPU (App). The average revenue per paying user who performed the Start Event. (In local currency) Support cumulative aggregation type.

    aggregationType
    必須enum
    ENUM VALUES
    cumulative

    Cumulative aggregation. Accumulate numbers from the first day of the analysis period (Day 0) to the last day (Day N).

    on-day

    On Day (N-Day). View the isolated data of each day.

    filters
    必須object[]
    filters[0].field
    必須string
    filters[0].filterType
    必須enum
    ENUM VALUES
    IN

    In. In Actuals reports, this corresponds to equals (is, =).

    NOT IN

    Not in. In Actuals reports, this corresponds to is not, ≠.

    LIKE

    Contains. ∋

    NOT LIKE

    Does not contain. ∌

    EXIST

    Value exists.

    NOT EXIST

    Value does not exist.

    filters[0].values
    string[]
    sorts
    必須object[]
    resultSpec
    object
    resultSpec.csv
    object
    resultSpec.csv.includesMetadata
    boolean
    resultSpec.csv.includesTotal
    boolean
    Request
    12345
    curl -X POST 'https://api.airbridge.io/reports/api/v3/apps/{app_name}/revenue/query' \
      -H 'Accept-Language: ko' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}' \
      -d '{"from":"2022-11-04","to":"2022-11-11","groupBy":{"fields":["channel"]},"granularity":"day","intervalsPeriod":30,"startEvents":["app_install"],"returnEvents":["app_order_complete"],"metric":"app_revenue","aggregationType":"cumulative","filters":[{"field":"campaign","filterType":"IN","values":["App"]}],"sorts":[{"fieldName":"totalRevenue","isAscending":true}],"resultSpec":{"csv":{"includesTotal":true}}}'
    Payload
    123456789101112131415161718192021222324252627282930313233343536373839
    {
      "from": "2022-11-04",
      "to": "2022-11-11",
      "groupBy": {
        "fields": [
          "channel"
        ]
      },
      "granularity": "day",
      "intervalsPeriod": 30,
      "startEvents": [
        "app_install"
      ],
      "returnEvents": [
        "app_order_complete"
      ],
      "metric": "app_revenue",
      "aggregationType": "cumulative",
      "filters": [
        {
          "field": "campaign",
          "filterType": "IN",
          "values": [
            "App"
          ]
        }
      ],
      "sorts": [
        {
          "fieldName": "totalRevenue",
          "isAscending": true
        }
      ],
      "resultSpec": {
        "csv": {
          "includesTotal": true
        }
      }
    }

    Response

    200SUCCESS

    400ERROR

    Response
    12345
    {
      "data": {
        "taskId": "5e286bd4-b4b1-4c04-8f6a-asdf1234zxcv"
      }
    }
    Response
    1
    {}

    Get Report

    GET

    https://api.airbridge.io/reports/api/v3/apps/{app_name}/revenue/query/{task_id}

    The status of an asynchronous request can be checked with task.status in the API request result.

    Response Notification

    If certain was was removed, refer to the reason in notification[0].code.

    Request

    Headers

    Accept-Language
    string

    You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

    Content-Type
    string

    Represents the media type of the resource. Defaults to application/json.

    Authorization
    string

    The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

    Path Params

    app_name
    必須string

    Airbridge App Name. (Unique ID)

    task_id
    必須string

    The task_id returned by the result of the 'Request Report' API.

    Query Params

    skip
    number

    The number of rows to be skipped.

    Get results except the first N number of rows.

    The default is 0.

    size
    number

    A limit on the number of rows to be returned.

    Get results of the next N rows after those skipped by the skip option.

    The default is 50.

    e.g.) ?skip=200&size=100

    In this case, it returns the rows 201 to 300. (skips first 200 rows, gets next 100 rows)

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

    Response

    200SUCCESS

    404ERROR

    Response
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
    {
      "data": {
        "stats": {
          "rows": [
            {
              "rows": [
                {
                  "date": "2021-11-01",
                  "total": {
                    "totalCost": {
                      "value": 0
                    },
                    "totalRevenue": {
                      "value": 10
                    },
                    "totalUniqueUsers": {
                      "value": 1,
                      "isMasked": true
                    }
                  },
                  "values": [
                    {
                      "value": 1,
                      "isMasked": false
                    },
                    {
                      "value": 2,
                      "isMasked": false
                    },
                    {
                      "value": 3,
                      "isMasked": false
                    },
                    {
                      "value": 4,
                      "isMasked": false
                    }
                  ]
                }
              ],
              "total": {
                "rows": [
                  {
                    "value": 1,
                    "isMasked": false
                  },
                  {
                    "value": 2,
                    "isMasked": false
                  },
                  {
                    "value": 3,
                    "isMasked": false
                  },
                  {
                    "value": 4,
                    "isMasked": false
                  }
                ],
                "totalCost": {
                  "value": 0
                },
                "totalRevenue": {
                  "value": 10.45
                },
                "totalUniqueUsers": {
                  "value": 1,
                  "isMasked": false
                }
              },
              "metadata": [
                "<groupBy>"
              ]
            }
          ]
        },
        "status": "SUCCESS",
        "taskId": "5e286bd4-b4b1-4c04-8f6a-670dc7ce637d",
        "endedAt": "2022-01-17T19:10:00.286939+09:00",
        "hasNext": false,
        "metadata": {
          "totalCount": 48
        }
      },
      "notification": [
        {
          "code": "AGG_DATA_MASKING_BY_FACEBOOK",
          "type": "info",
          "message": "some data is masked by facebook privacy policy."
        }
      ]
    }

    Get Metadata (Metric)

    GET

    https://api.airbridge.io/dataspec/v1/apps/{app_name}/revenue-report/metrics

    Query the available report metrics. [Note]

    Request

    Headers

    Accept-Language
    string

    You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

    Content-Type
    string

    Represents the media type of the resource. Defaults to application/json.

    Authorization
    string

    The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

    Path Params

    app_name
    必須string

    Airbridge App Name. (Unique ID)

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

    Response

    200SUCCESS

    404ERROR

    There is an error in the field you entered, or there is no such resource.

    Response
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
    {
      "data": [
        {
          "name": "Metric",
          "metrics": [
            {
              "key": "app_revenue",
              "name": "Revenue",
              "description": "Sum of value generated from revenue events",
              "valueType": "number",
              "aggregationType": [
                "cumulative",
                "on-day"
              ]
            },
            {
              "key": "app_user_count",
              "name": "User Count",
              "description": "The total number of unique users who performed revenue events",
              "valueType": "integer",
              "aggregationType": [
                "on-day",
                "unique-cumulative"
              ]
            }
          ]
        },
        {
          "name": "Sub Metric",
          "metrics": [
            {
              "key": "customer_acquisition_cost",
              "name": "CAC",
              "description": "Customer Acquisition Cost; the average cost to acquire a user who performed Start Event within the set date range<br>Total Cost/Users",
              "valueType": "number",
              "aggregationType": null
            },
            {
              "key": "start_event_users",
              "name": "Users",
              "description": "The number of users who performed Start Event to open the app within the set date range",
              "valueType": "integer",
              "aggregationType": null
            }
          ]
        }
      ]
    }
    Response
    123456
    {
      "type": "about:blank",
      "title": "Not Found",
      "status": 404,
      "traceId": "1-000000-000000000000000"
    }

    Get Metadata (GroupBy)

    GET

    https://api.airbridge.io/dataspec/v1/apps/{app_name}/revenue-report/groupbys

    Gets a list of available report groupbys. [Note]

    Request

    Headers

    Accept-Language
    string

    You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

    Content-Type
    string

    Represents the media type of the resource. Defaults to application/json.

    Authorization
    string

    The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

    Path Params

    app_name
    必須string

    Airbridge App Name. (Unique ID)

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

    Response

    200SUCCESS

    404ERROR

    There is an error in the field provided, or there is no such resource.

    Response
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
    {
      "data": [
        {
          "name": "Event Details",
          "fields": [
            {
              "key": "is_first_event_per_user_id",
              "name": "Is First Event per User ID",
              "description": "Boolean type data to show whether the event has happened in the past. (per user id)\n- true: First Event. \n- false: Not the First Event\n\n(Both Web/App Event Available)",
              "example": "true",
              "isFilter": true,
              "type": "boolean",
              "isCost": false
            },
            {
              "key": "is_first_event_per_device_id",
              "name": "Is First Event per Device ID",
              "description": "Boolean type data to show whether the event has happened in the past. (per airbridge device id)\n- true: First Event. \n- false: Not the First Event\n\n(App Event Available Only)",
              "example": "true",
              "isFilter": true,
              "type": "boolean",
              "isCost": false
            }
          ]
        },
        {
          "name": "Touchpoint",
          "fields": [
            {
              "key": "channel",
              "name": "Channel",
              "description": "The media source of the touchpoint.",
              "example": "moloco",
              "isFilter": true,
              "type": "string",
              "isCost": true
            },
            {
              "key": "campaign",
              "name": "Campaign",
              "description": "The campaign that generated the touchpoint. The campaign name entered in SAN or collected by the campaign parameter of the tracking link.",
              "example": "2018_summer_campaign",
              "isFilter": true,
              "type": "string",
              "isCost": true
            }
          ]
        }
      ]
    }
    Response
    123456
    {
      "type": "about:blank",
      "title": "Not Found",
      "status": 404,
      "traceId": "1-000000-000000000000000"
    }

    Get Metadata (Event)

    GET

    https://api.airbridge.io/dataspec/v1/apps/{app_name}/revenue-report/events

    Gets a list of available report events.[Note]

    Request

    Headers

    Accept-Language
    string

    You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

    Content-Type
    string

    Represents the media type of the resource. Defaults to application/json.

    Authorization
    string

    The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

    Path Params

    app_name
    必須string

    Airbridge App Name. (Unique ID)

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

    Response

    200SUCCESS

    404ERROR

    There is an error in the field provided, or there is no such resource.

    Response
    1234567891011121314151617181920212223242526272829303132333435363738
    {
      "data": [
        {
          "name": "Return Event",
          "events": [
            {
              "subGroup": "App Standard Event",
              "key": "app_first_order_complete",
              "name": "First Order Complete (App)",
              "description": "First Order Complete (App) event performed by users who performed the start event within the set date range"
            },
            {
              "subGroup": "App Standard Event",
              "key": "app_order_complete",
              "name": "Order Complete (App)",
              "description": "Order Complete (App) event performed by users who performed the start event within the set date range"
            }
          ]
        },
        {
          "name": "Start Event",
          "events": [
            {
              "subGroup": "",
              "key": "app_install",
              "name": "Install (App)",
              "description": "Install occurred within the set date range"
            },
            {
              "subGroup": "",
              "key": "app_deeplink_open",
              "name": "Deeplink Open (App)",
              "description": "Deeplink Open occurred within the set date range"
            }
          ]
        }
      ]
    }
    Response
    123456
    {
      "type": "about:blank",
      "title": "Not Found",
      "status": 404,
      "traceId": "1-000000-000000000000000"
    }