> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Obter uso do workspace

POST https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time
Content-Type: application/json

Retorna o uso de créditos detalhado por tipo de produto ao longo do tempo. A resposta é uma estrutura tabular com columns, column_types, column_units e rows. Algumas colunas de ID também recebem uma coluna de nome de exibição, como user_label ou voice_name, adicionada após as colunas existentes.

Reference: https://elevenlabs.io/docs/api-reference/analytics/workspace/usage

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Body (application/json)

This endpoint expects a Body_Get_Workspace_Usage_v1_workspace_analytics_query_usage_by_product_over_time_post.

- `start_time` (integer, required) — Início do intervalo de tempo como um timestamp Unix em milissegundos. Deve ser no mínimo 2020-01-01.
- `end_time` (integer, required) — Fim do intervalo de tempo como timestamp Unix em milissegundos. Deve ser no mínimo 2020-01-01.
- `interval_seconds` (integer, optional, default: 60) — Tamanho do bucket em segundos. Cada linha da resposta abrange essa quantidade de segundos do intervalo selecionado. Por exemplo, use 3600 para buckets horários, 86400 para buckets diários ou 604800 para buckets semanais. Se `time_zone` altera os limites dos buckets depende deste valor: múltiplos de semana (por exemplo, 604800) são semanas de calendário que começam na segunda-feira à meia-noite local; múltiplos de dias inteiros que não são semanas inteiras (por exemplo, 86400) se alinham à meia-noite local; múltiplos de horas inteiras de até 24 horas (por exemplo, 3600, 14400) se alinham aos limites das horas locais a partir da meia-noite; valores inferiores a uma hora e outros tamanhos permanecem ancorados em UTC, independentemente de `time_zone`.
- `group_by` (list of enum, optional, nullable)
  - Allowed values: `product_type`, `model`, `voice_id`, `user_id`, `fiat_currency`, `fiat_charge_type`, `region`, `reporting_workspace_id`, `request_source`, `resource_id`, `subresource_id`, `request_queue_type`, `voice_multiplier`, `hashed_xi_api_key`, `billing_group_id`, `surface`, `actor`
- `filters` (list of ColumnFilter, optional, nullable)
- `time_zone` (string, optional, default: UTC) — Identificador de fuso horário IANA (por exemplo, 'America/New_York', 'Europe/London', 'UTC') usado para alinhar os limites dos intervalos para valores qualificados de `interval_seconds`. Múltiplos de semana (por exemplo, 604800) são semanas do calendário que começam na segunda-feira à meia-noite local. Múltiplos de dias inteiros que não são semanas inteiras começam à meia-noite local; múltiplos de horas inteiras de até 24 horas se alinham aos limites de horas locais a partir da meia-noite. Intervalos inferiores a uma hora e outros tamanhos de intervalo permanecem ancorados em UTC, independentemente desta configuração. O padrão é UTC.

## Response

### 200

Resposta bem-sucedida

- `columns` (list of string, required)
- `column_types` (list of enum, required)
  - Allowed values: `String`, `Float`, `DateTime`, `Int`, `Bool`, `JSON`, `Map`, `Array`
- `rows` (list of list of WorkspaceAnalyticsQueryResponseModelRowsItemsItems, required)
- `column_units` (list of enum, required)
  - Allowed values: `ms`, `s`, `min`, `duration`, `credits`, `usd`, `eur`, `inr`, `pln`, `gbp`, `ratio`, `rating`

## Errors

### 422 Unprocessable Entity Error

Erro de validação

- `detail` (list of ValidationError, optional)

## Types

### ColumnFilter

- `column` (string, required)
- `operation` (enum, required)
  - Allowed values: `in`, `not_in`, `le`, `ge`, `lt`, `gt`, `eq`, `neq`
- `values` (list of ColumnFilterValuesItems, required)

### WorkspaceAnalyticsQueryResponseModelRowsItemsItems

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### ColumnFilterValuesItems

### ValidationErrorLocItems

## Examples

**Request**

```json
{
  "start_time": 1,
  "end_time": 1
}
```

**Response**

```json
{
  "columns": [
    "string"
  ],
  "column_types": [
    "String"
  ],
  "rows": [
    [
      "string"
    ]
  ],
  "column_units": [
    "ms"
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time"

payload = {
    "start_time": 1,
    "end_time": 1
}
headers = {"Content-Type": "application/json"}

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

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"start_time":1,"end_time":1}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

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

func main() {

	url := "https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time"

	payload := strings.NewReader("{\n  \"start_time\": 1,\n  \"end_time\": 1\n}")

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

	req.Header.Add("Content-Type", "application/json")

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

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

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time")

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

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"start_time\": 1,\n  \"end_time\": 1\n}"

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

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time")
  .header("Content-Type", "application/json")
  .body("{\n  \"start_time\": 1,\n  \"end_time\": 1\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time', [
  'body' => '{
  "start_time": 1,
  "end_time": 1
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"start_time\": 1,\n  \"end_time\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "start_time": 1,
  "end_time": 1
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/workspace/analytics/query/usage-by-product-over-time")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```