Skip to main content
POST
/
metrics
Get Togai Metrics
curl --request POST \
  --url https://api.togai.com/metrics \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "startTime": "2017-07-21T00:00:00Z",
  "endTime": "2017-07-22T00:00:00Z",
  "metricQueries": [
    {
      "id": "m1",
      "name": "EVENTS",
      "aggregationPeriod": "DAY",
      "filters": [
        {
          "fieldName": "ACCOUNT_ID",
          "fieldValues": [
            "account#1"
          ]
        },
        {
          "fieldName": "CUSTOMER_ID",
          "fieldValues": [
            "customer#1"
          ]
        },
        {
          "fieldName": "EVENT_STATUS",
          "fieldValues": [
            "PROCESSED"
          ]
        }
      ]
    },
    {
      "id": "m2",
      "name": "USAGE",
      "aggregationPeriod": "MONTH",
      "filters": [
        {
          "fieldName": "CUSTOMER_ID",
          "fieldValues": [
            "customer#1"
          ]
        }
      ]
    }
  ]
}
'
import requests

url = "https://api.togai.com/metrics"

payload = {
"startTime": "2017-07-21T00:00:00Z",
"endTime": "2017-07-22T00:00:00Z",
"metricQueries": [
{
"id": "m1",
"name": "EVENTS",
"aggregationPeriod": "DAY",
"filters": [
{
"fieldName": "ACCOUNT_ID",
"fieldValues": ["account#1"]
},
{
"fieldName": "CUSTOMER_ID",
"fieldValues": ["customer#1"]
},
{
"fieldName": "EVENT_STATUS",
"fieldValues": ["PROCESSED"]
}
]
},
{
"id": "m2",
"name": "USAGE",
"aggregationPeriod": "MONTH",
"filters": [
{
"fieldName": "CUSTOMER_ID",
"fieldValues": ["customer#1"]
}
]
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startTime: '2017-07-21T00:00:00Z',
endTime: '2017-07-22T00:00:00Z',
metricQueries: [
{
id: 'm1',
name: 'EVENTS',
aggregationPeriod: 'DAY',
filters: [
{fieldName: 'ACCOUNT_ID', fieldValues: ['account#1']},
{fieldName: 'CUSTOMER_ID', fieldValues: ['customer#1']},
{fieldName: 'EVENT_STATUS', fieldValues: ['PROCESSED']}
]
},
{
id: 'm2',
name: 'USAGE',
aggregationPeriod: 'MONTH',
filters: [{fieldName: 'CUSTOMER_ID', fieldValues: ['customer#1']}]
}
]
})
};

fetch('https://api.togai.com/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.togai.com/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'startTime' => '2017-07-21T00:00:00Z',
'endTime' => '2017-07-22T00:00:00Z',
'metricQueries' => [
[
'id' => 'm1',
'name' => 'EVENTS',
'aggregationPeriod' => 'DAY',
'filters' => [
[
'fieldName' => 'ACCOUNT_ID',
'fieldValues' => [
'account#1'
]
],
[
'fieldName' => 'CUSTOMER_ID',
'fieldValues' => [
'customer#1'
]
],
[
'fieldName' => 'EVENT_STATUS',
'fieldValues' => [
'PROCESSED'
]
]
]
],
[
'id' => 'm2',
'name' => 'USAGE',
'aggregationPeriod' => 'MONTH',
'filters' => [
[
'fieldName' => 'CUSTOMER_ID',
'fieldValues' => [
'customer#1'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

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

func main() {

url := "https://api.togai.com/metrics"

payload := strings.NewReader("{\n \"startTime\": \"2017-07-21T00:00:00Z\",\n \"endTime\": \"2017-07-22T00:00:00Z\",\n \"metricQueries\": [\n {\n \"id\": \"m1\",\n \"name\": \"EVENTS\",\n \"aggregationPeriod\": \"DAY\",\n \"filters\": [\n {\n \"fieldName\": \"ACCOUNT_ID\",\n \"fieldValues\": [\n \"account#1\"\n ]\n },\n {\n \"fieldName\": \"CUSTOMER_ID\",\n \"fieldValues\": [\n \"customer#1\"\n ]\n },\n {\n \"fieldName\": \"EVENT_STATUS\",\n \"fieldValues\": [\n \"PROCESSED\"\n ]\n }\n ]\n },\n {\n \"id\": \"m2\",\n \"name\": \"USAGE\",\n \"aggregationPeriod\": \"MONTH\",\n \"filters\": [\n {\n \"fieldName\": \"CUSTOMER_ID\",\n \"fieldValues\": [\n \"customer#1\"\n ]\n }\n ]\n }\n ]\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.togai.com/metrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startTime\": \"2017-07-21T00:00:00Z\",\n \"endTime\": \"2017-07-22T00:00:00Z\",\n \"metricQueries\": [\n {\n \"id\": \"m1\",\n \"name\": \"EVENTS\",\n \"aggregationPeriod\": \"DAY\",\n \"filters\": [\n {\n \"fieldName\": \"ACCOUNT_ID\",\n \"fieldValues\": [\n \"account#1\"\n ]\n },\n {\n \"fieldName\": \"CUSTOMER_ID\",\n \"fieldValues\": [\n \"customer#1\"\n ]\n },\n {\n \"fieldName\": \"EVENT_STATUS\",\n \"fieldValues\": [\n \"PROCESSED\"\n ]\n }\n ]\n },\n {\n \"id\": \"m2\",\n \"name\": \"USAGE\",\n \"aggregationPeriod\": \"MONTH\",\n \"filters\": [\n {\n \"fieldName\": \"CUSTOMER_ID\",\n \"fieldValues\": [\n \"customer#1\"\n ]\n }\n ]\n }\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.togai.com/metrics")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startTime\": \"2017-07-21T00:00:00Z\",\n \"endTime\": \"2017-07-22T00:00:00Z\",\n \"metricQueries\": [\n {\n \"id\": \"m1\",\n \"name\": \"EVENTS\",\n \"aggregationPeriod\": \"DAY\",\n \"filters\": [\n {\n \"fieldName\": \"ACCOUNT_ID\",\n \"fieldValues\": [\n \"account#1\"\n ]\n },\n {\n \"fieldName\": \"CUSTOMER_ID\",\n \"fieldValues\": [\n \"customer#1\"\n ]\n },\n {\n \"fieldName\": \"EVENT_STATUS\",\n \"fieldValues\": [\n \"PROCESSED\"\n ]\n }\n ]\n },\n {\n \"id\": \"m2\",\n \"name\": \"USAGE\",\n \"aggregationPeriod\": \"MONTH\",\n \"filters\": [\n {\n \"fieldName\": \"CUSTOMER_ID\",\n \"fieldValues\": [\n \"customer#1\"\n ]\n }\n ]\n }\n ]\n}"

response = http.request(request)
puts response.read_body
{
  "results": [
    {
      "id": "m1",
      "name": "EVENTS",
      "data": [
        {
          "timestamps": [
            "2017-07-21T00:00:00Z",
            "2017-07-22T00:00:00Z"
          ],
          "metricValues": [
            53,
            32
          ]
        }
      ]
    },
    {
      "id": "m2",
      "name": "USAGE",
      "data": [
        {
          "timestamps": [
            "2017-07-01T00:00:00Z"
          ],
          "metricValues": [
            123.45
          ]
        }
      ]
    }
  ]
}
{
"message": "<string>"
}
{
"message": "<string>"
}
{
"message": "<string>"
}
{
"message": "<string>"
}
{
"message": "<Reason message>"
}

MetricQuery: Allowed field combinations

Metric NameConfig KeyAllowed ValuesDefault valueDescription
REVENUECURRENCYBASE or INVOICEBASEcurrency to return the revenue in
REVENUE_FOR_CYCLECURRENCYBASE or INVOICEBASEcurrency to return the revenue in
Metric NameFilterEntry NameAllowed groupBy fieldsDefault ValuesAllowed Values
EVENTSACCOUNT_IDACCOUNT_ID, EVENT_STATUS, SCHEMA_NAME,None*<one or more valid account IDs>
EVENTSCUSTOMER_IDACCOUNT_ID, EVENT_STATUS, SCHEMA_NAME,None*<one or more valid customer IDs>
EVENTSSCHEMA_NAMEACCOUNT_ID, EVENT_STATUS, SCHEMA_NAME,None*<at most one valid schema names>
EVENTSEVENT_STATUSACCOUNT_ID, EVENT_STATUS, SCHEMA_NAME,[PROCESSED, UNPROCESSED]oneOrMoreOf PROCESSED, UNPROCESSED, IN_PROGRESS
USAGEACCOUNT_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid account IDs>
USAGECUSTOMER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid customer IDs>
USAGEUSAGE_METER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid usage meter name>
REVENUEACCOUNT_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid account IDs>
REVENUECUSTOMER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid customer IDs>
REVENUEUSAGE_METER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid usage meter name>
USAGE_FOR_CYCLEACCOUNT_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid account IDs>
USAGE_FOR_CYCLECUSTOMER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid customer IDs>
USAGE_FOR_CYCLEUSAGE_METER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid usage meter name>
REVENUE_FOR_CYCLEACCOUNT_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid account IDs>
REVENUE_FOR_CYCLECUSTOMER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid customer IDs>
REVENUE_FOR_CYCLEUSAGE_METER_IDACCOUNT_ID, USAGE_METER_ID, CUSTOMER_IDNone*<one or more valid usage meter name>

Storage

The *_FOR_CYCLE metrics in Togai are stored against the pricing cycle start date of accounts based on their pricing schedules.For instance, metrics of an account having a MONTHLY pricing cycle configued to invoice on 5th of every month, metrics are stored as follows.
PricingCycleStartDateUsage/RevenueForCycle
2020-01-05T00:00:00Z1000
2020-02-05T00:00:00Z1200
2020-03-05T00:00:00Z1200
In case of changes to the plan, e.g, a different monthly plan which is configured to invoice on 1st of every month is associated to account from 2020-03-15, metrics are stored as follows.
PricingCycleStartDateUsage/RevenueForCycle
2020-01-05T00:00:00Z1000
2020-02-05T00:00:00Z1200
2020-03-05T00:00:00Z1250
2020-03-15T00:00:00Z600
2020-04-01T00:00:00Z1300
2020-05-01T00:00:00Z1300

Querying

Now, in order to query the *_FOR_CYCLE metrics for any pricing cycle, make sure that the PricingCycleStartDate lies within startTime (inclusive) and endTime (exclusive).Example, for metrics query with startTime as 2020-02-15T00:00:00Z and endTime as 2020-04-01T00:00:00Z results contain the data from below records.
PricingCycleStartDateUsage/RevenueForCycle
2020-03-05T00:00:00Z1250
2020-03-15T00:00:00Z600
and not data from 2020-02-15T00:00:00Z or from 2020-04-01T00:00:00Z

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

Request to get metrics from togai

startTime
string<date-time>
required

Start date time of the query (inclusive)

Example:

"2017-07-21T00:00:00Z"

endTime
string<date-time>
required

End date time of the query (exclusive)

Example:

"2017-07-21T00:00:00Z"

metricQueries
object[]
required

Response

Success response

Response to GetMetrics Request

results
object[]
required