> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# View outcomes

> View and export push notification outcome metrics such as clicks, conversions, and custom events.

View the details of all the outcomes associated with your app.

## Overview

Use this API to retrieve Outcome metrics associated with your OneSignal app, including push notification interactions and custom-defined events. Outcomes include data points like:

* **Clicks**: Number of users who clicked on a push.
* **Confirmed Deliveries**: Number of confirmed message deliveries.
* **Session Durations**: Number of sessions initiated.
* **Custom Events**: Actions like purchases, form submissions, or any event your app tracks via custom Outcome names.

For details on configuring custom Outcomes, refer to the [Outcomes documentation](/docs/en/custom-outcomes).

<Info>
  Outcomes are stored for approximately 30 days. To retain this data, you should regularly export it before it expires.
</Info>

***

## How to use this API

This API allows you to filter and aggregate Outcome data using several query parameters.

### `outcome_names`

Specify one or more Outcome names with an aggregation type suffix (`.count` or `.sum`).

**Default Outcome names:**

* `os__click.count` – Push notification clicks.
* `os__confirmed_delivery.count` – Confirmed deliveries.
* `os__session_duration.count` – Total sessions.

**Custom Outcome names:**

* You can track any custom event name (e.g. `Purchase`, `Signup`).
* If the custom name contains a comma, include only one name per request to avoid parsing issues.
* Example: `outcome_names=os__click.count,Purchase.count`

### `outcome_time_range`

The time range values can be one of the following:

* `1h` = (default) the last 1 hour data.
* `1d` = the last 1 day data.
* `1mo` = the last 1 month data.

### `outcome_platforms`

Maps to the subscription type property. Default is data from all platforms enabled for your OneSignal App.

| `device_type` | `type`      |
| ------------- | ----------- |
| 0             | iOSPush     |
| 1             | AndroidPush |
| 2             | FireOSPush  |
| 5             | ChromePush  |
| 8             | FirefoxPush |
| 11            | Email       |
| 14            | SMS         |
| 17            | SafariPush  |

Example: `outcome_platform=0` for iOS `outcome_platform=17,8` for Safari and Firefox.

### `outcome_attribution`

The way in which the Outcome occurred:

* `direct` = the Outcome occurred when the user interacted with the message. Some Outcomes only have `direct` attribution like `os__click` and `os__confirmed_delivery` because they only occur as the direct result of the message.
* `influenced` = the Outcome occurred within the Time Window of the message being sent, but the user never interacted with the message. See [Outcomes](/docs/en/custom-outcomes) for details.
* `unattributed` = the Outcome occurred without a direct or influenced attribute.
* `total` = (default) the sum of direct+influenced+unattributed.

***


## OpenAPI

````yaml GET /apps/{app_id}/outcomes?outcome_names={outcome_names}&outcome_time_range={outcome_time_range}&outcome_platforms={outcome_platforms}&outcome_attribution={outcome_attribution}
openapi: 3.1.0
info:
  title: api.onesignal.com
  version: '11.6'
servers:
  - url: https://api.onesignal.com
security:
  - {}
paths:
  /apps/{app_id}/outcomes?outcome_names={outcome_names}&outcome_time_range={outcome_time_range}&outcome_platforms={outcome_platforms}&outcome_attribution={outcome_attribution}:
    get:
      summary: View outcomes
      description: >-
        View and export push notification outcome metrics such as clicks,
        conversions, and custom events.
      operationId: view-outcomes
      parameters:
        - name: app_id
          in: path
          description: >-
            Your OneSignal App ID in UUID v4 format. See [Keys &
            IDs](/docs/en/keys-and-ids).
          schema:
            type: string
          required: true
        - name: Authorization
          in: header
          description: >-
            Your App API key with prefix `Key `. See [Keys &
            IDs](/docs/en/keys-and-ids).
          required: true
          schema:
            type: string
            default: Key YOUR_APP_API_KEY
        - name: outcome_names
          in: query
          description: >-
            The name and aggregation type of the outcome(s) you want to fetch.
            Example: `my_outcome.count` or `my_outcome.sum`. For clicks, use
            `os__click.count`. For confirmed deliveries, use
            `os__confirmed_delivery.count`. For session duration, use
            `os__session_duration.count`.
          schema:
            type: array
            items:
              type: string
              default:
                - os__click.count
                - os__confirmed_delivery.count
                - os__session_duration.count
        - name: outcome_time_range
          in: query
          description: >-
            Time range for the returned data. Available values: `1h` (1 hour),
            `1d` (1 day), `1mo` (1 month)
          schema:
            type: string
            enum:
              - 1h
              - 1d
              - 1mo
            default: 1h
        - name: outcome_platforms
          in: query
          description: >-
            The platforms in which you want to pull the data represented as the
            `device_type` integer.
          schema:
            type: string
            default: 0,1,2,5,8,11,14,17
        - name: outcome_attribution
          in: query
          description: Attribution type for the outcomes.
          schema:
            type: string
            enum:
              - direct
              - influenced
              - unattributed
              - total
            default: total
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                type: object
                properties:
                  outcomes:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: os__session_duration
                        value:
                          type: integer
                          example: 100
                          default: 0
                        aggregation:
                          type: string
                          example: sum
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value:
                    errors:
                      - Add .sum or .count to every requested outcome id
              schema:
                $ref: '#/components/schemas/BasicErrorResponse'
        '403':
          description: '403'
          content:
            application/json:
              examples:
                Result:
                  value:
                    errors:
                      - >-
                        Access denied.  Please include an 'Authorization: ...'
                        header with a valid API key (/docs/accounts-and-keys).
              schema:
                $ref: '#/components/schemas/BasicErrorResponse'
        '429':
          description: >-
            Rate limit exceeded. Wait the number of seconds in the `Retry-After`
            header before retrying.
          headers:
            Retry-After:
              description: >-
                Number of seconds to wait before retrying the request. Always
                emitted on 429 responses.
              schema:
                type: integer
                minimum: 0
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicErrorResponse'
              example:
                errors:
                  - API rate limit exceeded
        '503':
          description: >-
            Service temporarily unavailable. Retry after a short backoff. The
            body may be empty or non-JSON in some failure modes.
          headers:
            Retry-After:
              description: >-
                Number of seconds to wait before retrying. Optional — may be
                absent when the response is generated upstream.
              schema:
                type: integer
                minimum: 0
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicErrorResponse'
              example:
                errors:
                  - Service temporarily unavailable
      deprecated: false
      x-codeSamples:
        - lang: typescript
          label: Node.js SDK
          source: >-
            import Onesignal from '@onesignal/node-onesignal';


            const configuration = Onesignal.createConfiguration({
                restApiKey: 'YOUR_REST_API_KEY',
            });

            const apiInstance = new Onesignal.DefaultApi(configuration);


            // string | The OneSignal App ID for your app.  Available in Keys &
            IDs.

            const appId: string = "00000000-0000-0000-0000-000000000000";

            // string | Required Comma-separated list of names and the value
            (sum/count) for the returned outcome data. Note: Clicks only support
            count aggregation. For out-of-the-box OneSignal outcomes such as
            click and session duration, please use the \"os\" prefix with two
            underscores. For other outcomes, please use the name specified by
            the user.
            Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum 

            const outcomeNames: string =
            "os__session_duration.count,os__click.count";

            // string | Optional If outcome names contain any commas, then
            please specify only one value at a time. Example:
            outcome_names[]=os__click.count&outcome_names[]=Sales,
            Purchase.count where \"Sales, Purchase\" is the custom outcomes with
            a comma in the name.  (optional)

            const outcomeNames2: string = "os__session_duration.count";

            // string | Optional Time range for the returned data. The values
            can be 1h (for the last 1 hour data), 1d (for the last 1 day data),
            or 1mo (for the last 1 month data). Default is 1h if the parameter
            is omitted.  (optional)

            const outcomeTimeRange: string = "1d";

            // string | Optional Platform id. Refer device\'s platform ids for
            values. Example: outcome_platform=0 for iOS outcome_platform=7,8 for
            Safari and Firefox Default is data from all platforms if the
            parameter is omitted.  (optional)

            const outcomePlatforms: string = "0,1";

            // string | Optional Attribution type for the outcomes. The values
            can be direct or influenced or unattributed. Example:
            outcome_attribution=direct Default is total (returns
            direct+influenced+unattributed) if the parameter is omitted. 
            (optional)

            const outcomeAttribution: string = "direct";


            try {
              const response = await apiInstance.getOutcomes(appId, outcomeNames, outcomeNames2, outcomeTimeRange, outcomePlatforms, outcomeAttribution);
              console.log(response);
            } catch (e) {
              if (e instanceof Onesignal.ApiException) {
                // `e.errorMessages` flattens any error-envelope shape to a `string[]`;
                // the raw parsed body remains on `e.body`.
                console.error("getOutcomes failed: HTTP " + e.code, e.errorMessages);
              } else {
                throw e;
              }
            }
        - lang: python
          label: Python SDK
          source: >-
            import onesignal

            from onesignal.api import default_api

            from onesignal.models import *

            from pprint import pprint


            # See configuration.py for a list of all supported configuration
            parameters.

            # Some of the OneSignal endpoints require ORGANIZATION_API_KEY token
            for authorization, while others require REST_API_KEY.

            # We recommend adding both of them in the configuration page so that
            you will not need to figure it out yourself.

            configuration = onesignal.Configuration(
                rest_api_key = "YOUR_REST_API_KEY", # App REST API key required for most endpoints
                organization_api_key = "YOUR_ORGANIZATION_API_KEY" # Organization key is only required for creating new apps and other top-level endpoints
            )



            # Enter a context with an instance of the API client

            with onesignal.ApiClient(configuration) as api_client:
                # Create an instance of the API class
                api_instance = default_api.DefaultApi(api_client)
                app_id = "00000000-0000-0000-0000-000000000000" # The OneSignal App ID for your app.  Available in Keys & IDs. 
                outcome_names = "os__session_duration.count,os__click.count" # Required Comma-separated list of names and the value (sum/count) for the returned outcome data. Note: Clicks only support count aggregation. For out-of-the-box OneSignal outcomes such as click and session duration, please use the \"os\" prefix with two underscores. For other outcomes, please use the name specified by the user. Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum  
                outcome_names2 = "os__session_duration.count"  # Optional If outcome names contain any commas, then please specify only one value at a time. Example: outcome_names[]=os__click.count&outcome_names[]=Sales, Purchase.count where \"Sales, Purchase\" is the custom outcomes with a comma in the name.  (optional) 
                outcome_time_range = "1d"  # Optional Time range for the returned data. The values can be 1h (for the last 1 hour data), 1d (for the last 1 day data), or 1mo (for the last 1 month data). Default is 1h if the parameter is omitted.  (optional) 
                outcome_platforms = "0,1"  # Optional Platform id. Refer device's platform ids for values. Example: outcome_platform=0 for iOS outcome_platform=7,8 for Safari and Firefox Default is data from all platforms if the parameter is omitted.  (optional) 
                outcome_attribution = "direct"  # Optional Attribution type for the outcomes. The values can be direct or influenced or unattributed. Example: outcome_attribution=direct Default is total (returns direct+influenced+unattributed) if the parameter is omitted.  (optional) 

                try:
                    # View Outcomes
                    api_response = api_instance.get_outcomes(app_id, outcome_names, outcome_names2=outcome_names2, outcome_time_range=outcome_time_range, outcome_platforms=outcome_platforms, outcome_attribution=outcome_attribution)
                    pprint(api_response)
                except onesignal.ApiException as e:
                    print("Exception when calling DefaultApi->get_outcomes: %s\n" % e)
                    print("Status Code: %s" % e.status)
                    print("Response Body: %s" % e.body)
        - lang: php
          label: PHP SDK
          source: >-
            <?php

            require_once(__DIR__ . '/vendor/autoload.php');



            // Configure Bearer authorization: rest_api_key

            $config = onesignal\client\Configuration::getDefaultConfiguration()
                                                            ->setRestApiKeyToken('YOUR_REST_API_KEY')
                                                            ->setOrganizationApiKeyToken('YOUR_ORGANIZATION_API_KEY');



            $apiInstance = new onesignal\client\Api\DefaultApi(
                // If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
                // This is optional, `GuzzleHttp\Client` will be used as default.
                new GuzzleHttp\Client(),
                $config
            );

            $app_id = '00000000-0000-0000-0000-000000000000'; // string | The
            OneSignal App ID for your app.  Available in Keys & IDs.

            $outcome_names = 'os__session_duration.count,os__click.count'; //
            string | Required Comma-separated list of names and the value
            (sum/count) for the returned outcome data. Note: Clicks only support
            count aggregation. For out-of-the-box OneSignal outcomes such as
            click and session duration, please use the \"os\" prefix with two
            underscores. For other outcomes, please use the name specified by
            the user.
            Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum

            $outcome_names2 = 'os__session_duration.count'; // string | Optional
            If outcome names contain any commas, then please specify only one
            value at a time. Example:
            outcome_names[]=os__click.count&outcome_names[]=Sales,
            Purchase.count where \"Sales, Purchase\" is the custom outcomes with
            a comma in the name.

            $outcome_time_range = '1d'; // string | Optional Time range for the
            returned data. The values can be 1h (for the last 1 hour data), 1d
            (for the last 1 day data), or 1mo (for the last 1 month data).
            Default is 1h if the parameter is omitted.

            $outcome_platforms = '0,1'; // string | Optional Platform id. Refer
            device's platform ids for values. Example: outcome_platform=0 for
            iOS outcome_platform=7,8 for Safari and Firefox Default is data from
            all platforms if the parameter is omitted.

            $outcome_attribution = 'direct'; // string | Optional Attribution
            type for the outcomes. The values can be direct or influenced or
            unattributed. Example: outcome_attribution=direct Default is total
            (returns direct+influenced+unattributed) if the parameter is
            omitted.


            try {
                $result = $apiInstance->getOutcomes($app_id, $outcome_names, $outcome_names2, $outcome_time_range, $outcome_platforms, $outcome_attribution);
                print_r($result);
            } catch (\onesignal\client\ApiException $e) {
                echo 'Exception when calling DefaultApi->getOutcomes: ', $e->getMessage(), PHP_EOL;
                echo 'Status Code: ', $e->getCode(), PHP_EOL;
                // getErrorMessages() flattens any error-envelope shape to a string[];
                // the raw body remains on getResponseBody().
                echo 'Error Messages: ', implode(', ', $e->getErrorMessages()), PHP_EOL;
                echo 'Response Body: ', $e->getResponseBody(), PHP_EOL;
            } catch (\Exception $e) {
                echo 'Exception when calling DefaultApi->getOutcomes: ', $e->getMessage(), PHP_EOL;
            }
        - lang: go
          label: Go SDK
          source: |-
            package main

            import (
                "context"
                "fmt"
                "os"

                "github.com/OneSignal/onesignal-go-api/v5"
            )

            func main() {
                appId := "00000000-0000-0000-0000-000000000000" // string | The OneSignal App ID for your app.  Available in Keys & IDs.
                outcomeNames := "os__session_duration.count,os__click.count" // string | Required Comma-separated list of names and the value (sum/count) for the returned outcome data. Note: Clicks only support count aggregation. For out-of-the-box OneSignal outcomes such as click and session duration, please use the \"os\" prefix with two underscores. For other outcomes, please use the name specified by the user. Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum 
                outcomeNames2 := "os__session_duration.count" // string | Optional If outcome names contain any commas, then please specify only one value at a time. Example: outcome_names[]=os__click.count&outcome_names[]=Sales, Purchase.count where \"Sales, Purchase\" is the custom outcomes with a comma in the name.  (optional)
                outcomeTimeRange := "1d" // string | Optional Time range for the returned data. The values can be 1h (for the last 1 hour data), 1d (for the last 1 day data), or 1mo (for the last 1 month data). Default is 1h if the parameter is omitted.  (optional)
                outcomePlatforms := "0,1" // string | Optional Platform id. Refer device's platform ids for values. Example: outcome_platform=0 for iOS outcome_platform=7,8 for Safari and Firefox Default is data from all platforms if the parameter is omitted.  (optional)
                outcomeAttribution := "direct" // string | Optional Attribution type for the outcomes. The values can be direct or influenced or unattributed. Example: outcome_attribution=direct Default is total (returns direct+influenced+unattributed) if the parameter is omitted.  (optional)

                configuration := onesignal.NewConfiguration()
                apiClient := onesignal.NewAPIClient(configuration)

                restAuth := context.WithValue(context.Background(), onesignal.RestApiKey, "YOUR_REST_API_KEY") // App REST API key required for most endpoints

                resp, r, err := apiClient.DefaultApi.GetOutcomes(restAuth, appId).OutcomeNames(outcomeNames).OutcomeNames2(outcomeNames2).OutcomeTimeRange(outcomeTimeRange).OutcomePlatforms(outcomePlatforms).OutcomeAttribution(outcomeAttribution).Execute()

                if err != nil {
                    fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.GetOutcomes``: %v\n", err)
                    fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
                    if apiErr, ok := err.(*onesignal.GenericOpenAPIError); ok {
                        // ErrorMessages() flattens any error-envelope shape to a []string;
                        // the raw body remains on Body().
                        fmt.Fprintf(os.Stderr, "Error Messages: %v\n", apiErr.ErrorMessages())
                        fmt.Fprintf(os.Stderr, "Response Body: %s\n", apiErr.Body())
                    }
                }
                // response from `GetOutcomes`: OutcomesData
                fmt.Fprintf(os.Stdout, "Response from `DefaultApi.GetOutcomes`: %v\n", resp)
            }
        - lang: ruby
          label: Ruby SDK
          source: >-
            require 'onesignal'

            # setup authorization

            OneSignal.configure do |config|
              # Configure Bearer authorization: rest_api_key
              config.rest_api_key = 'YOUR_REST_API_KEY'

            end


            api_instance = OneSignal::DefaultApi.new

            app_id = '00000000-0000-0000-0000-000000000000' # String | The
            OneSignal App ID for your app.  Available in Keys & IDs.

            outcome_names = 'os__session_duration.count,os__click.count' #
            String | Required Comma-separated list of names and the value
            (sum/count) for the returned outcome data. Note: Clicks only support
            count aggregation. For out-of-the-box OneSignal outcomes such as
            click and session duration, please use the \"os\" prefix with two
            underscores. For other outcomes, please use the name specified by
            the user.
            Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum 

            opts = {
              outcome_names2: 'os__session_duration.count', # String | Optional If outcome names contain any commas, then please specify only one value at a time. Example: outcome_names[]=os__click.count&outcome_names[]=Sales, Purchase.count where \"Sales, Purchase\" is the custom outcomes with a comma in the name. 
              outcome_time_range: '1d', # String | Optional Time range for the returned data. The values can be 1h (for the last 1 hour data), 1d (for the last 1 day data), or 1mo (for the last 1 month data). Default is 1h if the parameter is omitted. 
              outcome_platforms: '0,1', # String | Optional Platform id. Refer device's platform ids for values. Example: outcome_platform=0 for iOS outcome_platform=7,8 for Safari and Firefox Default is data from all platforms if the parameter is omitted. 
              outcome_attribution: 'direct' # String | Optional Attribution type for the outcomes. The values can be direct or influenced or unattributed. Example: outcome_attribution=direct Default is total (returns direct+influenced+unattributed) if the parameter is omitted. 
            }


            begin
              # View Outcomes
              result = api_instance.get_outcomes(app_id, outcome_names, opts)
              p result
            rescue OneSignal::ApiError => e
              puts "Error when calling DefaultApi->get_outcomes: #{e}"
              puts "Status Code: #{e.code}"
              # `e.error_messages` flattens any error-envelope shape to an Array<String>;
              # the raw body remains on `e.response_body`.
              puts "Error Messages: #{e.error_messages}"
              puts "Response Body: #{e.response_body}"
            end
        - lang: java
          label: Java SDK
          source: |-
            // Import classes:
            import com.onesignal.client.ApiClient;
            import com.onesignal.client.ApiException;
            import com.onesignal.client.Configuration;
            import com.onesignal.client.auth.*;
            import com.onesignal.client.model.*;
            import com.onesignal.client.api.DefaultApi;

            public class Example {
              public static void main(String[] args) {
                ApiClient defaultClient = Configuration.getDefaultApiClient();
                defaultClient.setBasePath("https://api.onesignal.com");
                
                // Configure HTTP bearer authorization: rest_api_key
                HttpBearerAuth rest_api_key = (HttpBearerAuth) defaultClient.getAuthentication("rest_api_key");
                rest_api_key.setBearerToken("YOUR_REST_API_KEY");

                DefaultApi apiInstance = new DefaultApi(defaultClient);
                String appId = "00000000-0000-0000-0000-000000000000"; // String | The OneSignal App ID for your app.  Available in Keys & IDs.
                String outcomeNames = "os__session_duration.count,os__click.count"; // String | Required Comma-separated list of names and the value (sum/count) for the returned outcome data. Note: Clicks only support count aggregation. For out-of-the-box OneSignal outcomes such as click and session duration, please use the \"os\" prefix with two underscores. For other outcomes, please use the name specified by the user. Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum 
                String outcomeNames2 = "os__session_duration.count"; // String | Optional If outcome names contain any commas, then please specify only one value at a time. Example: outcome_names[]=os__click.count&outcome_names[]=Sales, Purchase.count where \"Sales, Purchase\" is the custom outcomes with a comma in the name. 
                String outcomeTimeRange = "1d"; // String | Optional Time range for the returned data. The values can be 1h (for the last 1 hour data), 1d (for the last 1 day data), or 1mo (for the last 1 month data). Default is 1h if the parameter is omitted. 
                String outcomePlatforms = "0,1"; // String | Optional Platform id. Refer device's platform ids for values. Example: outcome_platform=0 for iOS outcome_platform=7,8 for Safari and Firefox Default is data from all platforms if the parameter is omitted. 
                String outcomeAttribution = "direct"; // String | Optional Attribution type for the outcomes. The values can be direct or influenced or unattributed. Example: outcome_attribution=direct Default is total (returns direct+influenced+unattributed) if the parameter is omitted. 
                try {
                  OutcomesData result = apiInstance.getOutcomes(appId, outcomeNames, outcomeNames2, outcomeTimeRange, outcomePlatforms, outcomeAttribution);
                  System.out.println(result);
                } catch (ApiException e) {
                  System.err.println("Exception when calling DefaultApi#getOutcomes");
                  System.err.println("Status code: " + e.getCode());
                  // getErrorMessages() flattens any error-envelope shape to a List<String>;
                  // the raw body remains on getResponseBody().
                  System.err.println("Error messages: " + e.getErrorMessages());
                  System.err.println("Reason: " + e.getResponseBody());
                  System.err.println("Response headers: " + e.getResponseHeaders());
                  e.printStackTrace();
                }
              }
            }
        - lang: csharp
          label: C# SDK
          source: |-
            using System;
            using System.Collections.Generic;
            using System.Diagnostics;
            using OneSignalApi.Api;
            using OneSignalApi.Client;
            using OneSignalApi.Model;

            namespace Example
            {
                public class GetOutcomesExample
                {
                    public static void Main()
                    {
                        Configuration config = new Configuration();
                        config.BasePath = "https://api.onesignal.com";
                        // Configure Bearer token for authorization: rest_api_key
                        config.AccessToken = "YOUR_REST_API_KEY";

                        var apiInstance = new DefaultApi(config);
                        var appId = "00000000-0000-0000-0000-000000000000";  // string | The OneSignal App ID for your app.  Available in Keys & IDs.
                        var outcomeNames = "os__session_duration.count,os__click.count";  // string | Required Comma-separated list of names and the value (sum/count) for the returned outcome data. Note: Clicks only support count aggregation. For out-of-the-box OneSignal outcomes such as click and session duration, please use the \"os\" prefix with two underscores. For other outcomes, please use the name specified by the user. Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum 
                        var outcomeNames2 = "os__session_duration.count";  // string | Optional If outcome names contain any commas, then please specify only one value at a time. Example: outcome_names[]=os__click.count&outcome_names[]=Sales, Purchase.count where \"Sales, Purchase\" is the custom outcomes with a comma in the name.  (optional) 
                        var outcomeTimeRange = "1d";  // string | Optional Time range for the returned data. The values can be 1h (for the last 1 hour data), 1d (for the last 1 day data), or 1mo (for the last 1 month data). Default is 1h if the parameter is omitted.  (optional) 
                        var outcomePlatforms = "0,1";  // string | Optional Platform id. Refer device's platform ids for values. Example: outcome_platform=0 for iOS outcome_platform=7,8 for Safari and Firefox Default is data from all platforms if the parameter is omitted.  (optional) 
                        var outcomeAttribution = "direct";  // string | Optional Attribution type for the outcomes. The values can be direct or influenced or unattributed. Example: outcome_attribution=direct Default is total (returns direct+influenced+unattributed) if the parameter is omitted.  (optional) 

                        try
                        {
                            // View Outcomes
                            OutcomesData result = apiInstance.GetOutcomes(appId, outcomeNames, outcomeNames2, outcomeTimeRange, outcomePlatforms, outcomeAttribution);
                            Debug.WriteLine(result);
                        }
                        catch (ApiException  e)
                        {
                            Debug.Print("Exception when calling DefaultApi.GetOutcomes: " + e.Message );
                            Debug.Print("Status Code: "+ e.ErrorCode);
                            // e.ErrorMessages flattens any error-envelope shape to an IReadOnlyList<string>;
                            // the raw body remains on e.ErrorContent.
                            Debug.Print("Error Messages: " + string.Join(", ", e.ErrorMessages));
                            Debug.Print("Response Body: " + e.ErrorContent);
                            Debug.Print(e.StackTrace);
                        }
                    }
                }
            }
        - lang: rust
          label: Rust SDK
          source: |-
            use onesignal_rust_api::apis::configuration::Configuration;
            use onesignal_rust_api::apis::default_api;


            #[tokio::main]
            async fn main() {
                let mut configuration = Configuration::new();
                configuration.rest_api_key_token = Some("YOUR_REST_API_KEY".to_string());


                // Realistic values are pulled from the spec's `example:` fields where present.
                let app_id: &str = "00000000-0000-0000-0000-000000000000";
                let outcome_names: &str = "os__session_duration.count,os__click.count";
                let outcome_names2: Option<&str> = None;
                let outcome_time_range: Option<&str> = None;
                let outcome_platforms: Option<&str> = None;
                let outcome_attribution: Option<&str> = None;

                match default_api::get_outcomes(&configuration, app_id, outcome_names, outcome_names2, outcome_time_range, outcome_platforms, outcome_attribution).await {
                    Ok(resp) => println!("{:?}", resp),
                    Err(e @ onesignal_rust_api::apis::Error::ResponseError(_)) => {
                        // `e.error_messages()` flattens any error-envelope shape to a Vec<String>;
                        // the raw response remains on the ResponseError variant.
                        eprintln!("get_outcomes failed: {:?}", e.error_messages());
                    }
                    Err(e) => eprintln!("get_outcomes failed: {:?}", e),
                }
            }
components:
  schemas:
    BasicErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
          description: One or more human-readable error messages.
        success:
          type: boolean
          description: >-
            Present (and `false`) on some endpoints (notifications, templates,
            segments). Not emitted by every endpoint.
        reference:
          type: array
          items:
            type: string
          description: >-
            Documentation URL fragments related to the error. Only emitted by
            the API-key auth error helpers.

````