> ## 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.

# Mediaverbruik weergeven

> Haal gepagineerd minuutverbruik voor vertaling en lipsynchronisatie en de geschiedenis van afschrijvingen en terugboekingen op, met optionele filters op datum, taal, status en project.

Haal gepagineerd minuutverbruik voor vertaling en lipsynchronisatie en de geschiedenis van afschrijvingen en terugboekingen op, met optionele filters op datum, taal, status en project.

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

## Authenticatie en machtigingen

<ParamField header="x-api-key" type="string" required>
  Stuur een VoiceCheap API-sleutel mee in deze header. Authorization: Bearer met dezelfde API-sleutel wordt ook ondersteund. OAuth-toegangstokens
  worden alleen door MCP geaccepteerd, niet door dit REST-endpoint.
</ParamField>

Vereiste machtigingen: `usage:read`.

Een actief betaald abonnement is vereist. Machtigingen wijzigen geen teamrollen, eigendom van resources, mediategoed of abonnementslimieten.

## Parameters

<ParamField body="view" type="string">
  Tekstwaarde.

  Toegestane waarden: "translation", "project". Standaardwaarde: "translation".
</ParamField>

<ParamField body="translatedVersionId" type="string">
  Tekstwaarde.

  Minimale lengte: 1. Maximale lengte: 200. Patroon: `^[^/]+$`.
</ParamField>

<ParamField body="project" type="string">
  Tekstwaarde.

  Minimale lengte: 1. Maximale lengte: 200.
</ParamField>

<ParamField body="targetLanguage" type="string">
  Tekstwaarde.

  Minimale lengte: 2. Maximale lengte: 64.
</ParamField>

<ParamField body="lipSyncUsage" type="string">
  Tekstwaarde.

  Toegestane waarden: "all", "none", "standard", "pro", "pro\_2".
</ParamField>

<ParamField body="translationStatuses" type="array">
  Lijst met waarden. Zie het volledige invoerschema voor de structuur van de items.

  Maximaal aantal items: 4.
</ParamField>

<ParamField body="billingState" type="string">
  Tekstwaarde.

  Toegestane waarden: "all", "charged", "refunded", "refund\_pending".
</ParamField>

<ParamField body="fromDate" type="string">
  Tekstwaarde.

  Formaat: "date". Patroon: `^(?:(?:\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">
  Tekstwaarde.

  Formaat: "date". Patroon: `^(?:(?:\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">
  Gehele waarde.

  Minimum: 1. Maximum: 100000. Standaardwaarde: 1.
</ParamField>

<ParamField body="pageSize" type="integer">
  Gehele waarde.

  Minimum: 1. Maximum: 100. Standaardwaarde: 25.
</ParamField>

<Accordion title="Volledig invoerschema">
  Het onderstaande JSON Schema behoudt de exacte veldnamen, geneste typen, standaardwaarden, grenzen en toegestane waarden die discovery beschikbaar stelt. Aanvullende regels tussen velden staan in de opmerkingen bij de bewerking.

  ```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>

## Voorbeeldaanvragen

Vervang de voorbeeldidentificaties van resources en mediasleutels door waarden die voor je account zijn geretourneerd. Behoud dezelfde aanvraagidentificatie wanneer je dezelfde wijziging opnieuw probeert.

<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>

## Antwoord

Een geslaagde eerste uitvoering retourneert HTTP 200 met het resultaat van de bewerking onder data. Een herhaalde aanvraag kan in plaats daarvan de opgeslagen aanvraagstatus retourneren. Het voorbeeld toont één ondersteund antwoord, niet alle optionele velden.

Retourneert gepagineerde verbruiksrijen voor vertalingen of projecten, genormaliseerde filters en minutentotalen over alle overeenkomende rijen.

<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>

## Resultaatvelden

| Veld | Beschrijving |
| - | - |
| `data.exportedAt` | Tijdstip waarop het resultaat is geproduceerd, als Unix-tijdstempel in milliseconden. |
| `data.scope` | user voor een persoonlijk account of team voor een team waarvan je eigenaar of lid bent. |
| `data.plan` | Abonnement van de eigenaar van de werkruimte. |
| `data.view` | translation of project, overeenkomstig de gevraagde weergave. |
| `data.filters` | Genormaliseerde toegepaste filters; paginering wordt afzonderlijk geretourneerd. |
| `data.pagination.page` | Geretourneerde pagina nadat het beschikbare paginabereik is toegepast. |
| `data.pagination.pageSize` | Aantal rijen per pagina. |
| `data.pagination.totalItems` | Totaal aantal overeenkomende rijen vóór paginering. |
| `data.pagination.totalPages` | Aantal pagina's; minstens één, ook bij een leeg resultaat. |
| `data.totals.translationBaseMinutes` | In rekening gebrachte basisvertaalminuten over de overeenkomende rijen. |
| `data.totals.lipSyncExtraMinutes` | Extra in rekening gebrachte minuten voor Standard-lipsynchronisatie. |
| `data.totals.lipSyncProExtraMinutes` | Extra in rekening gebrachte Pro-minuten voor lipsynchronisatie. |
| `data.totals.lipSyncPro2ExtraMinutes` | Extra afgeschreven minuten voor Pro 2-lipsynchronisatie. |
| `data.totals.totalChargedMinutes` | Totaal afgeschreven minuten vóór terugboekingen. |
| `data.totals.refundedMinutes` | Teruggeboekte minuten. |
| `data.totals.netUsedMinutes` | Afgeschreven minuten minus teruggeboekte minuten. |
| `data.rows` | Vertaalrijen in de weergave translation, of samengevoegde projectgegevens in de weergave project. |
| `data.rows[].projectId` | Projectidentificatie. |
| `data.rows[].projectName` | Weergavenaam van het project. |
| `data.rows[].workId` | Identificatie van de taalversie, aanwezig in de weergave translation. |
| `data.rows[].translatedVersionId` | Identificatie van de vertaalde versie, aanwezig in de weergave translation. |
| `data.rows[].sourceLanguage` | Brontaal. |
| `data.rows[].targetLanguage` | Doeltaal in de weergave translation. |
| `data.rows[].startedAt` | Starttijdstempel van de vertaling in milliseconden, in de weergave translation. |
| `data.rows[].endedAt` | Optioneel eindtijdstempel van de vertaling of lipsynchronisatie in milliseconden, in de weergave translation. |
| `data.rows[].startedByUserId` | Optionele identificatie van het initiërende account, in de weergave translation. |
| `data.rows[].translationStatus` | in\_progress, completed, failed of timed\_out in de weergave translation. |
| `data.rows[].lipSyncUsage` | none, standard, pro of pro\_2 in de weergave translation. |
| `data.rows[].lipSyncStatus` | not\_used, in\_progress, completed, failed of timed\_out in de weergave translation. |
| `data.rows[].runNumber` | Nummer van de vertaaluitvoering binnen dit project en deze doeltaal, in de weergave translation. |
| `data.rows[].createdAt` | Tijdstempel van het maken van het project in milliseconden, in de weergave project. |
| `data.rows[].targetLanguages` | Doeltalen die door de samengevoegde projectgegevens worden vertegenwoordigd, in de weergave project. |
| `data.rows[].runCount` | Aantal overeenkomende vertaaluitvoeringen voor het project, in de weergave project. |
| `data.rows[].translationSummary` | Aantallen in de weergave project: inProgress, completed, failed, timedOut en retryCount. |
| `data.rows[].lipSyncSummary` | Aantallen in de weergave project: inProgress, completed, failed, timedOut, retryCount en notUsed. |
| `data.rows[].totalChargedMinutes` | Totaal afgeschreven minuten voor de rij vóór terugboekingen. |
| `data.rows[].refundedMinutes` | Teruggeboekte minuten voor de rij. |
| `data.rows[].netUsedMinutes` | Afgeschreven minuten voor de rij minus terugboekingen. |
| `data.rows[].billingState` | charged, refunded of refund\_pending. |

## Opmerkingen bij de bewerking

* view is standaard translation, page is standaard 1 en pageSize is standaard 25; pageSize mag niet hoger zijn dan 100.
* Datumfilters gebruiken YYYY-MM-DD en vergelijken de startdatum van de vertaling in Europe/Paris. fromDate mag niet na toDate liggen.
* project doorzoekt projectnamen en ID's zonder onderscheid tussen hoofdletters en kleine letters. translatedVersionId zoekt op deeltekenreeksen in versie-ID's in de weergave translation en wordt genegeerd in de weergave project.
* Totalen omvatten alle overeenkomende vertaalrijen, vóór paginering. De projectweergave groepeert die rijen per project.
* Openbare rijen laten de e-mailadressen van initiërende gebruikers en onbewerkte verwerkingsfoutmeldingen weg.

## Verbruik

Elke geslaagde aanroep verbruikt één maandelijkse API/MCP-aanroep. Ook het mediategoed en de eigen generatielimieten van de bewerking zijn van toepassing.

## Fouten

| HTTP-status | Code | Betekenis of herstel |
| - | - | - |
| 400 | `CREDENTIAL_IN_QUERY` | Inloggegevens zijn opgegeven in een queryparameter access\_token of api\_key. Stuur inloggegevens in headers. |
| 400 | `VALIDATION_ERROR` | Het JSON-object bevat een niet-ondersteund veld, een ongeldige waarde of een ontbrekend verplicht argument. |
| 401 | `API_KEY_EXPIRED` | De API-sleutel is verlopen. |
| 401 | `INVALID_API_KEY` | Geef een geldige, niet-verlopen API-sleutel op. |
| 401 | `INVALID_CREDENTIAL` | De Authorization-header heeft een ongeldige indeling of is in strijd met x-api-key. |
| 401 | `MISSING_CREDENTIAL` | Er is geen bruikbaar authenticatiemiddel in de header opgegeven, of het overschreed 4096 tekens. |
| 401 | `USER_NOT_FOUND` | Het account dat bij de toegangsgegevens hoort, bestaat niet meer. |
| 403 | `AMBIGUOUS_TEAM_API_KEY` | De gebruiker van het authenticatiemiddel behoort tot meer dan één team, waardoor de factureringscontext onduidelijk is. |
| 403 | `INSUFFICIENT_SCOPE` | Verleen alle vereiste machtigingen of kies andere toegangsgegevens. |
| 403 | `INTEGRATION_PLAN_UNSUPPORTED` | De integratielimieten van het account konden niet worden geverifieerd. |
| 403 | `SUBSCRIPTION_REQUIRED` | Gebruik een actief betaald abonnement. |
| 403 | `TEAM_MEMBERSHIP_INVALID` | Het huidige teamlidmaatschap van het account komt niet overeen met de werkruimte van deze verbinding. Vernieuw het lidmaatschap en maak opnieuw verbinding. |
| 403 | `TEAM_OWNER_NOT_FOUND` | Het effectieve account van de teameigenaar kon niet worden gevonden. |
| 404 | `ACCOUNT_NOT_FOUND` | Het account of het account van de actieve werkruimte kon niet worden gevonden. |
| 429 | `INTEGRATION_MONTHLY_LIMIT_REACHED` | Wacht tot de maandelijkse reset of wijzig je abonnement. |
| 429 | `INTEGRATION_RATE_LIMIT_REACHED` | Wacht de tijd uit Retry-After af wanneer deze aanwezig is en vergroot de wachttijd tussen nieuwe pogingen. |
| 500 | `INTERNAL_ERROR` | Controleer de opgeslagen aanvraagstatus en de resourcegeschiedenis voordat je besluit een wijziging opnieuw te proberen. |
| 503 | `SERVER_RESTARTING` | De server wordt opnieuw gestart. Probeer het zo opnieuw en behoud bij een wijziging dezelfde aanvraagidentificatie. |

```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.