# Retrieve Statistics

Mailjet's API has a variety of resources that help retrieve aggregated statistics for key performance indicators like opens, clicks, unsubscribes, etc.

Here is a look at just one of those resources to give you a sample of the data you can read - we’ll retrieve total aggregated statistics for your API key.

### Example

cURL
```shell
# Run :
curl -s \
	-X GET \
	--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
	https://api.mailjet.com/v3/REST/statcounters?CounterSource=APIKey\&CounterTiming=Message\&CounterResolution=Lifetime
```

PHP
```php
<?php
/*
Run :
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$filters = [
  'CounterSource' => 'APIKey',
  'CounterTiming' => 'Message',
  'CounterResolution' => 'Lifetime'
];
$response = $mj->get(Resources::$Statcounters, ['filters' => $filters]);
$response->success() && var_dump($response->getData());
?>
```

Node.js
```javascript
/**
 *
 * Run :
 *
 */
const mailjet = require ('node-mailjet')
	.connect(process.env.MJ_APIKEY_PUBLIC, process.env.MJ_APIKEY_PRIVATE)
const request = mailjet
	.get("statcounters")
	.request({
		"CounterSource":"APIKey",
		"CounterTiming":"Message",
		"CounterResolution":"Lifetime"
	})
request
	.then((result) => {
		console.log(result.body)
	})
	.catch((err) => {
		console.log(err.statusCode)
	})
```

Ruby
```ruby
# Run :
require 'mailjet'
Mailjet.configure do |config|
  config.api_key = ENV['MJ_APIKEY_PUBLIC']
  config.secret_key = ENV['MJ_APIKEY_PRIVATE']  
end
variable = Mailjet::Statcounters.all(counter_source: "APIKey",
counter_timing: "Message",
counter_resolution: "Lifetime"
)
p variable.attributes['Data']
```

Python
```python
"""
Run :
"""
from mailjet_rest import Client
import os
api_key = os.environ['MJ_APIKEY_PUBLIC']
api_secret = os.environ['MJ_APIKEY_PRIVATE']
mailjet = Client(auth=(api_key, api_secret))
filters = {
  'CounterSource': 'APIKey',
  'CounterTiming': 'Message',
  'CounterResolution': 'Lifetime'
}
result = mailjet.statcounters.get(filters=filters)
print result.status_code
print result.json()
```

Java
```java
package com.my.project;
import com.mailjet.client.errors.MailjetException;
import com.mailjet.client.errors.MailjetSocketTimeoutException;
import com.mailjet.client.MailjetClient;
import com.mailjet.client.MailjetRequest;
import com.mailjet.client.MailjetResponse;
import com.mailjet.client.resource.Statcounters;
import org.json.JSONArray;
import org.json.JSONObject;
public class MyClass {
    /**
     * Run :
     */
    public static void main(String[] args) throws MailjetException, MailjetSocketTimeoutException {
      MailjetClient client;
      MailjetRequest request;
      MailjetResponse response;
      client = new MailjetClient(System.getenv("MJ_APIKEY_PUBLIC"), System.getenv("MJ_APIKEY_PRIVATE"));
      request = new MailjetRequest(Statcounters.resource)
                  .filter(Statcounters.COUNTERSOURCE, "APIKey")
                  .filter(Statcounters.COUNTERTIMING, "Message")
                  .filter(Statcounters.COUNTERRESOLUTION, "Lifetime");
      response = client.get(request);
      System.out.println(response.getStatus());
      System.out.println(response.getData());
    }
}
```

Go
```go
/*
Run :
*/
package main
import (
	"fmt"
	"log"
	"os"
	mailjet "github.com/mailjet/mailjet-apiv3-go"
	"github.com/mailjet/mailjet-apiv3-go/resources"
)
func main () {
	mailjetClient := NewMailjetClient(os.Getenv("MJ_APIKEY_PUBLIC"), os.Getenv("MJ_APIKEY_PRIVATE"))
	var data []resources.Statcounters
	_, _, err := mailjetClient.List("statcounters", &data, Filter("CounterSource", "APIKey"), Filter("CounterTiming", "Message"), Filter("CounterResolution", "Lifetime"))
	if err != nil {
	  fmt.Println(err)
	}
	fmt.Printf("Data array: %+v\n", data)
}
```

C#
```csharp
using Mailjet.Client;
using Mailjet.Client.Resources;
using System;
using Newtonsoft.Json.Linq;
namespace Mailjet.ConsoleApplication
{
   class Program
   {
      /// <summary>
      /// Run :
      /// </summary>
      static void Main(string[] args)
      {
         RunAsync().Wait();
      }
      static async Task RunAsync()
      {
         MailjetClient client = new MailjetClient(Environment.GetEnvironmentVariable("MJ_APIKEY_PUBLIC"), Environment.GetEnvironmentVariable("MJ_APIKEY_PRIVATE"));
         MailjetRequest request = new MailjetRequest
         {
            Resource = Statcounters.Resource,
         }
         .Filter(Statcounters.Countersource, "APIKey")
         .Filter(Statcounters.Countertiming, "Message")
         .Filter(Statcounters.Counterresolution, "Lifetime");
         MailjetResponse response = await client.GetAsync(request);
         if (response.IsSuccessStatusCode)
         {
            Console.WriteLine(string.Format("Total: {0}, Count: {1}\n", response.GetTotal(), response.GetCount()));
            Console.WriteLine(response.GetData());
         }
         else
         {
            Console.WriteLine(string.Format("StatusCode: {0}\n", response.StatusCode));
            Console.WriteLine(string.Format("ErrorInfo: {0}\n", response.GetErrorInfo()));
            Console.WriteLine(response.GetData());
            Console.WriteLine(string.Format("ErrorMessage: {0}\n", response.GetErrorMessage()));
         }
      }
   }
}
```

### API Response

```
{
  "Count": "1",
  "Data": [
    {
      "APIKeyID": "123456",
      "MessageClickedCount": "1",
      "MessageDeferredCount": "0",
      "MessageHardBouncedCount": "0",
      "MessageOpenedCount": "1",
      "MessageQueuedCount": "0",
      "MessageSentCount": "1",
      "MessageSoftBouncedCount": "0",
      "MessageSpamCount": "0",
      "MessageUnsubscribedCount": "0",
      "Total": "1"
      "........................."
    }
  ],
  "Total": "1"
}
```