> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.voicecheap.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Wyświetl wykorzystanie multimediów

> Pobierz stronicowaną historię zużycia minut tłumaczenia i synchronizacji ruchu ust, naliczeń i zwrotów, z opcjonalnymi filtrami daty, języka, stanu i projektu.

Pobierz stronicowaną historię zużycia minut tłumaczenia i synchronizacji ruchu ust, naliczeń i zwrotów, z opcjonalnymi filtrami daty, języka, stanu i projektu.

```http theme={null}
POST https://api.voicecheap.ai/v1/actions/usage_logs_list
```

## Uwierzytelnianie i uprawnienia

<ParamField header="x-api-key" type="string" required>
  Wyślij klucz API VoiceCheap w tym nagłówku. Obsługiwany jest również nagłówek Authorization: Bearer z tym samym kluczem API. Tokeny dostępu OAuth są
  akceptowane tylko przez MCP, a nie przez ten endpoint REST.
</ParamField>

Wymagane uprawnienia: `usage:read`.

Wymagana jest aktywna płatna subskrypcja. Uprawnienia nie zmieniają ról w zespole, własności zasobów, kredytów na multimedia ani limitów planu.

## Parametry

<ParamField body="view" type="string">
  Wartość tekstowa.

  Dozwolone wartości: "translation", "project". Wartość domyślna: "translation".
</ParamField>

<ParamField body="translatedVersionId" type="string">
  Wartość tekstowa.

  Minimalna długość: 1. Maksymalna długość: 200. Wzorzec: `^[^/]+$`.
</ParamField>

<ParamField body="project" type="string">
  Wartość tekstowa.

  Minimalna długość: 1. Maksymalna długość: 200.
</ParamField>

<ParamField body="targetLanguage" type="string">
  Wartość tekstowa.

  Minimalna długość: 2. Maksymalna długość: 64.
</ParamField>

<ParamField body="lipSyncUsage" type="string">
  Wartość tekstowa.

  Dozwolone wartości: "all", "none", "standard", "pro", "pro\_2".
</ParamField>

<ParamField body="translationStatuses" type="array">
  Lista wartości. Strukturę elementów opisuje pełny schemat danych wejściowych.

  Maksymalna liczba elementów: 4.
</ParamField>

<ParamField body="billingState" type="string">
  Wartość tekstowa.

  Dozwolone wartości: "all", "charged", "refunded", "refund\_pending".
</ParamField>

<ParamField body="fromDate" type="string">
  Wartość tekstowa.

  Format: "date". Wzorzec: `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$`.
</ParamField>

<ParamField body="toDate" type="string">
  Wartość tekstowa.

  Format: "date". Wzorzec: `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$`.
</ParamField>

<ParamField body="page" type="integer">
  Liczba całkowita.

  Minimum: 1. Maksimum: 100000. Wartość domyślna: 1.
</ParamField>

<ParamField body="pageSize" type="integer">
  Liczba całkowita.

  Minimum: 1. Maksimum: 100. Wartość domyślna: 25.
</ParamField>

<Accordion title="Pełny schemat danych wejściowych">
  Poniższy JSON Schema zachowuje dokładne nazwy pól, typy zagnieżdżone, wartości domyślne, ograniczenia i akceptowane wartości udostępniane przez mechanizm wykrywania. Dodatkowe reguły zależności między polami znajdują się w uwagach do operacji.

  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "view": {
        "default": "translation",
        "type": "string",
        "enum": ["translation", "project"]
      },
      "translatedVersionId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "pattern": "^[^/]+$"
      },
      "project": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "targetLanguage": {
        "type": "string",
        "minLength": 2,
        "maxLength": 64
      },
      "lipSyncUsage": {
        "type": "string",
        "enum": ["all", "none", "standard", "pro", "pro_2"]
      },
      "translationStatuses": {
        "maxItems": 4,
        "type": "array",
        "items": {
          "type": "string",
          "enum": ["in_progress", "completed", "failed", "timed_out"]
        }
      },
      "billingState": {
        "type": "string",
        "enum": ["all", "charged", "refunded", "refund_pending"]
      },
      "fromDate": {
        "type": "string",
        "format": "date",
        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
      },
      "toDate": {
        "type": "string",
        "format": "date",
        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
      },
      "page": {
        "default": 1,
        "type": "integer",
        "minimum": 1,
        "maximum": 100000
      },
      "pageSize": {
        "default": 25,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      }
    },
    "additionalProperties": false
  }
  ```
</Accordion>

## Przykłady żądań

Zastąp przykładowe identyfikatory zasobów i klucze multimediów wartościami zwróconymi dla Twojego konta. Przy ponawianiu tej samej operacji zmieniającej dane zachowaj identyfikator żądania.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST 'https://api.voicecheap.ai/v1/actions/usage_logs_list' \
    --header "x-api-key: $VOICECHEAP_API_KEY" \
    --header 'Content-Type: application/json' \
    --data '{"view":"translation","fromDate":"2026-10-01","toDate":"2026-10-16","page":1,"pageSize":25}'
  ```

  ```javascript JavaScript theme={null}
  const input = {
    view: 'translation',
    fromDate: '2026-10-01',
    toDate: '2026-10-16',
    page: 1,
    pageSize: 25,
  };
  const response = await fetch('https://api.voicecheap.ai/v1/actions/usage_logs_list', {
    method: 'POST',
    headers: {
      'x-api-key': process.env.VOICECHEAP_API_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(input),
  });
  const body = await response.json();
  if (!response.ok) throw new Error(body.code + ': ' + body.message);
  console.log(body);
  ```

  ```python Python theme={null}
  import os
  import requests

  response = requests.post(
      "https://api.voicecheap.ai/v1/actions/usage_logs_list",
      headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
      json={"view": "translation", "fromDate": "2026-10-01", "toDate": "2026-10-16", "page": 1, "pageSize": 25},
      timeout=120,
  )
  body = response.json()
  if not response.ok:
      raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
  print(body)
  ```
</RequestExample>

## Odpowiedź

Pierwsze pomyślne wykonanie zwraca HTTP 200 z wynikiem operacji w data. Ponowienie może zamiast tego zwrócić zapisany stan żądania. Przykład przedstawia jedną obsługiwaną odpowiedź, bez wszystkich opcjonalnych pól.

Zwraca stronicowane wiersze wykorzystania tłumaczeń lub projektów, znormalizowane filtry oraz sumy minut ze wszystkich pasujących wierszy.

<ResponseExample>
  ```json HTTP 200 theme={null}
  {
    "data": {
      "exportedAt": 1792152000000,
      "scope": "user",
      "plan": "pro",
      "view": "translation",
      "filters": {
        "view": "translation",
        "lipSyncUsage": "all",
        "translationStatuses": [],
        "billingState": "all",
        "fromDate": "2026-10-01",
        "toDate": "2026-10-16"
      },
      "pagination": {
        "page": 1,
        "pageSize": 25,
        "totalItems": 1,
        "totalPages": 1
      },
      "totals": {
        "translationBaseMinutes": 2,
        "lipSyncExtraMinutes": 0,
        "lipSyncProExtraMinutes": 0,
        "lipSyncPro2ExtraMinutes": 0,
        "totalChargedMinutes": 2,
        "refundedMinutes": 0,
        "netUsedMinutes": 2
      },
      "rows": [
        {
          "projectId": "project_123",
          "projectName": "Product launch",
          "workId": "work_123",
          "translatedVersionId": "version_123",
          "sourceLanguage": "english",
          "targetLanguage": "french",
          "startedAt": 1792065600000,
          "endedAt": 1792065720000,
          "startedByUserId": "user_123",
          "translationStatus": "completed",
          "lipSyncUsage": "none",
          "lipSyncStatus": "not_used",
          "runNumber": 1,
          "totalChargedMinutes": 2,
          "refundedMinutes": 0,
          "netUsedMinutes": 2,
          "billingState": "charged"
        }
      ]
    }
  }
  ```
</ResponseExample>

## Pola wyniku

| Pole | Opis |
| - | - |
| `data.exportedAt` | Czas utworzenia wyniku jako znacznik czasu Unix w milisekundach. |
| `data.scope` | user dla konta osobistego lub team dla zespołu, którego jesteś właścicielem lub członkiem. |
| `data.plan` | Plan właściciela obszaru roboczego. |
| `data.view` | translation lub project, zgodnie z żądanym widokiem. |
| `data.filters` | Znormalizowane zastosowane filtry; informacje o podziale na strony są zwracane osobno. |
| `data.pagination.page` | Strona zwrócona po uwzględnieniu dostępnego zakresu stron. |
| `data.pagination.pageSize` | Liczba wierszy na stronę. |
| `data.pagination.totalItems` | Łączna liczba pasujących wierszy przed podziałem na strony. |
| `data.pagination.totalPages` | Liczba stron; co najmniej jedna, nawet dla pustego wyniku. |
| `data.totals.translationBaseMinutes` | Podstawowe minuty tłumaczenia naliczone łącznie dla pasujących wierszy. |
| `data.totals.lipSyncExtraMinutes` | Dodatkowe naliczone minuty synchronizacji ruchu ust Standard. |
| `data.totals.lipSyncProExtraMinutes` | Dodatkowe naliczone minuty synchronizacji ruchu ust Pro. |
| `data.totals.lipSyncPro2ExtraMinutes` | Dodatkowo naliczone minuty synchronizacji ruchu ust Pro 2. |
| `data.totals.totalChargedMinutes` | Łączna liczba naliczonych minut przed zwrotami. |
| `data.totals.refundedMinutes` | Zwrócone minuty. |
| `data.totals.netUsedMinutes` | Naliczone minuty pomniejszone o zwrócone minuty. |
| `data.rows` | Wiersze tłumaczeń w widoku tłumaczeń lub dane zbiorcze projektów w widoku projektów. |
| `data.rows[].projectId` | Identyfikator projektu. |
| `data.rows[].projectName` | Wyświetlana nazwa projektu. |
| `data.rows[].workId` | Identyfikator wersji językowej, obecny w widoku tłumaczeń. |
| `data.rows[].translatedVersionId` | Identyfikator przetłumaczonej wersji, obecny w widoku tłumaczeń. |
| `data.rows[].sourceLanguage` | Język źródłowy. |
| `data.rows[].targetLanguage` | Język docelowy w widoku tłumaczeń. |
| `data.rows[].startedAt` | Znacznik czasu rozpoczęcia tłumaczenia w milisekundach, w widoku tłumaczeń. |
| `data.rows[].endedAt` | Opcjonalny znacznik czasu zakończenia tłumaczenia lub synchronizacji ruchu ust w milisekundach, w widoku tłumaczeń. |
| `data.rows[].startedByUserId` | Opcjonalny identyfikator konta inicjującego, w widoku tłumaczeń. |
| `data.rows[].translationStatus` | in\_progress, completed, failed lub timed\_out w widoku tłumaczeń. |
| `data.rows[].lipSyncUsage` | none, standard, pro lub pro\_2 w widoku tłumaczeń. |
| `data.rows[].lipSyncStatus` | not\_used, in\_progress, completed, failed lub timed\_out w widoku tłumaczeń. |
| `data.rows[].runNumber` | Numer przebiegu tłumaczenia w tym projekcie i języku docelowym, w widoku tłumaczeń. |
| `data.rows[].createdAt` | Znacznik czasu utworzenia projektu w milisekundach, w widoku projektów. |
| `data.rows[].targetLanguages` | Języki docelowe reprezentowane przez dane zbiorcze projektu, w widoku projektów. |
| `data.rows[].runCount` | Liczba pasujących przebiegów tłumaczenia dla projektu, w widoku projektów. |
| `data.rows[].translationSummary` | Liczniki w widoku projektu: inProgress, completed, failed, timedOut i retryCount. |
| `data.rows[].lipSyncSummary` | Liczniki w widoku projektu: inProgress, completed, failed, timedOut, retryCount i notUsed. |
| `data.rows[].totalChargedMinutes` | Łączna liczba minut naliczonych dla wiersza przed zwrotami. |
| `data.rows[].refundedMinutes` | Minuty zwrócone dla wiersza. |
| `data.rows[].netUsedMinutes` | Minuty naliczone dla wiersza pomniejszone o zwroty. |
| `data.rows[].billingState` | charged, refunded lub refund\_pending. |

## Uwagi do operacji

* view ma domyślnie wartość translation, page — 1, a pageSize — 25; pageSize nie może przekraczać 100.
* Filtry dat używają YYYY-MM-DD i porównują datę rozpoczęcia tłumaczenia w strefie Europe/Paris. fromDate nie może być późniejsze niż toDate.
* project przeszukuje nazwy i identyfikatory projektów bez rozróżniania wielkości liter. translatedVersionId dopasowuje identyfikatory wersji według podciągu w widoku tłumaczeń i jest ignorowany w widoku projektów.
* Sumy obejmują wszystkie pasujące wiersze tłumaczeń przed podziałem na strony. Widok projektów agreguje te wiersze według projektu.
* Publiczne wiersze pomijają adresy e-mail użytkowników inicjujących operację i surowe komunikaty błędów przetwarzania.

## Wykorzystanie

Każde pomyślne wywołanie zużywa jedno wywołanie z miesięcznego limitu API/MCP. Obowiązują również kredyty na multimedia oraz limity generowania danej operacji.

## Błędy

| Status HTTP | Kod | Znaczenie lub sposób rozwiązania |
| - | - | - |
| 400 | `CREDENTIAL_IN_QUERY` | Dane uwierzytelniające zostały podane w parametrze zapytania access\_token lub api\_key. Wysyłaj dane uwierzytelniające w nagłówkach. |
| 400 | `VALIDATION_ERROR` | Obiekt JSON zawiera nieobsługiwane pole, nieprawidłową wartość lub brakuje w nim wymaganego argumentu. |
| 401 | `API_KEY_EXPIRED` | Klucz API wygasł. |
| 401 | `INVALID_API_KEY` | Podaj prawidłowy, niewygasły klucz API. |
| 401 | `INVALID_CREDENTIAL` | Nagłówek Authorization ma nieprawidłowy format lub jest sprzeczny z x-api-key. |
| 401 | `MISSING_CREDENTIAL` | Nie podano użytecznych danych uwierzytelniających w nagłówku lub przekroczyły one 4096 znaków. |
| 401 | `USER_NOT_FOUND` | Konto powiązane z poświadczeniem już nie istnieje. |
| 403 | `AMBIGUOUS_TEAM_API_KEY` | Użytkownik, do którego należą dane uwierzytelniające, należy do więcej niż jednego zespołu, więc kontekst rozliczeniowy jest niejednoznaczny. |
| 403 | `INSUFFICIENT_SCOPE` | Nadaj wszystkie wymagane uprawnienia lub wybierz inne dane uwierzytelniające. |
| 403 | `INTEGRATION_PLAN_UNSUPPORTED` | Nie udało się zweryfikować limitów integracji konta. |
| 403 | `SUBSCRIPTION_REQUIRED` | Użyj aktywnej płatnej subskrypcji. |
| 403 | `TEAM_MEMBERSHIP_INVALID` | Bieżące członkostwo konta w zespole nie odpowiada obszarowi roboczemu tego połączenia. Odśwież członkostwo i połącz się ponownie. |
| 403 | `TEAM_OWNER_NOT_FOUND` | Nie znaleziono konta faktycznego właściciela zespołu. |
| 404 | `ACCOUNT_NOT_FOUND` | Nie znaleziono konta lub konta aktywnego obszaru roboczego. |
| 429 | `INTEGRATION_MONTHLY_LIMIT_REACHED` | Poczekaj na odnowienie miesięcznego limitu lub zmień plan. |
| 429 | `INTEGRATION_RATE_LIMIT_REACHED` | Jeśli występuje nagłówek Retry-After, odczekaj wskazany czas i stosuj rosnące odstępy między ponowieniami. |
| 500 | `INTERNAL_ERROR` | Sprawdź stan zapisanego żądania i historię zasobu przed podjęciem decyzji o ponowieniu operacji zmieniającej dane. |
| 503 | `SERVER_RESTARTING` | Serwer jest uruchamiany ponownie. Spróbuj ponownie wkrótce i zachowaj ten sam identyfikator żądania dla operacji zmieniającej dane. |

```json theme={null}
{
  "code": "INSUFFICIENT_SCOPE",
  "message": "This credential does not permit the requested action.",
  "status": 403,
  "details": {
    "requiredScopes": ["usage:read"]
  }
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.