---
title: Read Authentications Per Application
description: You can get the authentications per application counts for a selected environment over a specified time period. The GET {{apiPath}}/v1/environments/{{envID}}/applicationSignons request must specify a filter expression that designates a date for the occurredAt attribute. The samplePeriod, and samplePeriodCount query parameters are expected values in the request URL, but they are not part of the filter expression. The limit request parameter is optional and can be omitted.
component: pingone-api
page_id: pingone-api:platform:authentications-per-application/read-authentications-per-application
canonical_url: https://developer.pingidentity.com/pingone-api/platform/authentications-per-application/read-authentications-per-application.html
section_ids:
  filtering-data: Filtering data
  headers: Headers
  example-request: Example Request
  example-response: Example Response
---

# Read Authentications Per Application

##

```none
GET {{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2
```

You can get the authentications per application counts for a selected environment over a specified time period. The `GET {{apiPath}}/v1/environments/{{envID}}/applicationSignons` request must specify a `filter` expression that designates a date for the `occurredAt` attribute. The `samplePeriod`, and `samplePeriodCount` query parameters are expected values in the request URL, but they are not part of the `filter` expression. The `limit` request parameter is optional and can be omitted.

|   |                                                                                                 |
| - | ----------------------------------------------------------------------------------------------- |
|   | If the `limit` query parameter is omitted from the request, its value is set to 100 by default. |

When the `endDate` in the response is determined to overlap the current date, the `partial` attribute shows that the response represents a shorter duration than requested by the `samplePeriod` and `samplePeriodCount`. The request shows the `partial` attribute in the response.

### Filtering data

These SCIM operators can be applied to the following query parameters:

* `ge` (greater than or equal to)

  Supported attributes: `occurredAt`

|   |                                                                                                                                                                                                                                                                                                                                        |
| - | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | These SCIM operators are not supported: `eq` (equal to), `gt` (greater than), `lt` (less than), `le` (less than or equal to), `ne` (not equal), `co` (contains), `ew` (ends with), `in` (includes), `pr` (present, is a non-empty or non-null value), `sw` (starts with), `and` (logical AND), `or` (logical OR), `not` (logical NOT). |

> **Collapse: Query parameters**
>
> The following query parameter value ranges are allowed in the request:
>
> | Query parameter | Attributes (or allowed limits) |
> | --------------- | ------------------------------ |
> | `filter`        | `occuredAt` (ge)               |
> | `limit`         | \[1-1000]                      |
> | `expand`        | N/A                            |
> | `order`         | N/A                            |
>
> In addition, the product of the properties, `samplePeriod * samplePeriodCount * limit` must be less than or equal to 100,000. If one query parameter limitation is violated, the service returns an error with HTTP status code 400.

> **Collapse: Request Model**
>
> | Property                   | Type    | Required? |
> | -------------------------- | ------- | --------- |
> | `id`                       | String  | Required  |
> | `authentication.startDate` | Date    | Required  |
> | `authentication.endDate`   | Date    | Required  |
> | `authentication.signons`   | Integer | Required  |

### Headers

Authorization      Bearer {{accessToken}}

##

### Example Request

* cURL

* C#

* Go

* HTTP

* Java

* jQuery

* NodeJS

* Python

* PHP

* Ruby

* Swift

```shell
curl --location --globoff '{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2' \
--header 'Authorization: Bearer {{accessToken}}'
```

```csharp
var options = new RestClientOptions("{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Get);
request.AddHeader("Authorization", "Bearer {{accessToken}}");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

```golang
package main

import (
  "fmt"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

```http
GET /v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2 HTTP/1.1
Host: {{apiPath}}
Authorization: Bearer {{accessToken}}
```

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2")
  .method("GET", body)
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
```

```javascript
var settings = {
  "url": "{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2",
  "method": "GET",
  "timeout": 0,
  "headers": {
    "Authorization": "Bearer {{accessToken}}"
  },
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'GET',
  'url': '{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2',
  'headers': {
    'Authorization': 'Bearer {{accessToken}}'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
```

```python
import requests

url = "{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2"

payload = {}
headers = {
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => 'Bearer {{accessToken}}'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

```ruby
require "uri"
require "net/http"

url = URI("{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer {{accessToken}}"

response = http.request(request)
puts response.read_body
```

```swift
var request = URLRequest(url: URL(string: "{{apiPath}}/v1/environments/{{envID}}/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2")!,timeoutInterval: Double.infinity)
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
```

### Example Response

200 OK

```json
{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/applicationSignons?filter=occurredAt%20ge%20%222019-09-01T19%3A00%3A00Z%22&limit=2&samplePeriod=24&samplePeriodCount=2"
        },
        "next": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/applicationSignons?cursor=ewogICJvY2N1cnJlZEF0IiA6ICIyMDE5LTA5LTAxVDE5OjAwOjAwWiIsCiAgInNhbXBsZVBlcmlvZCIgOiAyNCwKICAic2FtcGxlUGVyaW9kQ291bnQiIDogMiwKICAibGltaXQiIDogMiwKICAidG9rZW4iIDogIjAwMWUwMDEwMDAxMjAwMTAzZmEyNzllMjNiOGM0MjdiOWI5MjIxOWVhNTVjOTg5ZmYwN2ZmZmZmZmRmMDdmZmZmZmZkZTQxMWVhOTgzY2Q0NTQyYjg3YjI4YWVmNDkwYWY5NzkwMDA0IiwKICAiY291bnQiIDogMTQKfQ%3D%3D"
        }
    },
    "_embedded": {
        "applications": [
            {
                "id": "3fa279e2-3b8c-427b-9b92-219ea55c989f",
                "authentications": [
                    {
                        "startDate": "2019-09-01T19:00:00Z",
                        "endDate": "2019-09-02T18:59:59Z",
                        "signons": 351
                    },
                    {
                        "startDate": "2019-09-02T19:00:00Z",
                        "endDate": "2019-09-03T18:59:59Z",
                        "signons": 476
                    }
                ]
            },
            {
                "id": "1095f42a-2a71-4590-a833-69f5112d95ce",
                "authentications": [
                    {
                        "startDate": "2019-09-01T19:00:00Z",
                        "endDate": "2019-09-02T18:59:59Z",
                        "signons": 1256
                    },
                    {
                        "startDate": "2019-09-02T19:00:00Z",
                        "endDate": "2019-09-03T18:59:59Z",
                        "signons": 1567
                    }
                ]
            }
        ]
    },
    "count": 14,
    "size": 2
}
```
