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

# List saved subtitles action results

> List your saved integration outputs, including large results that do not fit in action polling responses. Use nextCursor as beforeResultId.

List your saved integration outputs, including large results that do not fit in action polling responses. Use nextCursor as beforeResultId.

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

## Authentication and permissions

<ParamField header="x-api-key" type="string" required>
  Send a VoiceCheap API key in this header. Authorization: Bearer with the same API key is also supported. OAuth access tokens are accepted only by
  MCP, not by this REST endpoint.
</ParamField>

Required permissions: `subtitles:read`.

An active paid subscription is required. Permissions do not change team roles, resource ownership, media credits, or plan limits.

## Parameters

<ParamField body="limit" type="integer">
  Integer value.

  Minimum: 1. Maximum: 100. Default: 30.
</ParamField>

<ParamField body="beforeResultId" type="string">
  Text value.

  Format: "uuid". Pattern: `^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$`.
</ParamField>

<Accordion title="Complete input schema">
  The JSON Schema below preserves the exact field names, nested types, defaults, bounds, and accepted values exposed by discovery. Additional cross-field rules are listed in the operation notes.

  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "limit": {
        "default": 30,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      },
      "beforeResultId": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "additionalProperties": false
  }
  ```
</Accordion>

## Request examples

Replace example resource identifiers and media keys with values returned for your account. Keep the request identifier stable when retrying the same mutation.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_result_list' \
    --header "x-api-key: $VOICECHEAP_API_KEY" \
    --header 'Content-Type: application/json' \
    --data '{"limit":30}'
  ```

  ```javascript JavaScript theme={null}
  const input = {
    limit: 30,
  };
  const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_result_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/subtitles_result_list",
      headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
      json={"limit": 30},
      timeout=120,
  )
  body = response.json()
  if not response.ok:
      raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
  print(body)
  ```
</RequestExample>

## Response

A successful first execution returns HTTP 200 with the operation result under data. A replay may return saved request state instead. The example shows one supported response, not every optional field.

A paginated list of owned integration result metadata. Each item provides the operations needed to retrieve complete output.

<ResponseExample>
  ```json HTTP 200 theme={null}
  {
    "data": {
      "items": [
        {
          "resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
          "operation": "captions_transcribe",
          "createdAt": 1792152000000,
          "fileName": "voicecheap-captions_transcribe-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
          "byteLength": 190,
          "contentType": "application/json; charset=utf-8",
          "status": "completed",
          "requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
          "getAction": "subtitles_result_get",
          "downloadAction": "subtitles_result_download",
          "listAction": "subtitles_result_list"
        },
        {
          "resultId": "a12bc34d-5e67-4890-8abc-0123456789de",
          "operation": "subtitles_create",
          "createdAt": 1792152000000,
          "fileName": "voicecheap-subtitles_create-a12bc34d-5e67-4890-8abc-0123456789de.json",
          "byteLength": 411,
          "contentType": "application/json; charset=utf-8",
          "status": "completed",
          "requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
          "getAction": "subtitles_result_get",
          "downloadAction": "subtitles_result_download",
          "listAction": "subtitles_result_list"
        }
      ],
      "nextCursor": null
    }
  }
  ```
</ResponseExample>

## Result fields

| Field | Description |
| - | - |
| `data.items` | Saved-output metadata objects for this domain, including resultId, operation, timestamps, file metadata, status and retrieval actions. |
| `data.nextCursor` | Last resultId when another page exists, otherwise null. |

## Operation notes

* Requires a paid subscription and the action permission. The actor's personal tool plan is rechecked at execution; saved tools and upload references belong to that actor, including when the credential is associated with a team.
* A successful action uses one shared monthly API/MCP call. Beginner allows 500, Starter 5,000 and Creator 25,000 calls/month; Pro, Scale and Enterprise have no monthly ceiling. Per-minute limits still apply: 30, 60, 120, 180, 300 and 600 respectively. Tool generation allowances are separate.
* resultId is a UUID from a completed generation reference or this domain's result\_list. It is different from the action requestId and web-tool historyId.
* Results are owned by the authenticated actor and permission domain. A subtitles result cannot be read through transcription actions, or the reverse.
* Complete saved JSON is encrypted at rest and retained independently of the bounded action polling cache. Retrieval remains authenticated; no public transcript or caption JSON URL is issued.
* These actions retrieve existing output and do not generate media or use a daily allowance. Each successful retrieval still uses one monthly integration call.
* Pending metadata means output persistence needs recovery. Reading content or downloading attempts recovery of an already saved encrypted object; check it before starting another generation.
* limit defaults to 30 and accepts 1 through 100. Results are ordered by createdAt descending. Pass nextCursor as beforeResultId to retrieve the next page; null marks the end.
* Items include both pending and completed metadata. A list entry contains no generated text, caption words, storage key or encryption material.

## Usage

Each successful invocation consumes one monthly API/MCP call. Media credits and the operation's own generation allowances also apply.

## Errors

| HTTP status | Code | Meaning or recovery |
| - | - | - |
| 400 | `CREDENTIAL_IN_QUERY` | Credentials were supplied in an access\_token or api\_key query parameter. Send credentials in headers. |
| 400 | `VALIDATION_ERROR` | Arguments do not satisfy the action schema, or an unknown argument was supplied. |
| 401 | `API_KEY_EXPIRED` | The API key has expired. |
| 401 | `INVALID_API_KEY` | Provide a valid, unexpired API key. |
| 401 | `INVALID_CREDENTIAL` | The Authorization header is malformed or conflicts with x-api-key. |
| 401 | `MISSING_CREDENTIAL` | No usable header credential was supplied, or it exceeded 4096 characters. |
| 401 | `USER_NOT_FOUND` | The credential's account no longer exists. |
| 403 | `AMBIGUOUS_TEAM_API_KEY` | The credential's user belongs to more than one team, so the billing context is ambiguous. |
| 403 | `INSUFFICIENT_SCOPE` | The API key or MCP connection lacks the required action permission. |
| 403 | `INTEGRATION_PLAN_UNSUPPORTED` | The account's integration limits could not be verified. |
| 403 | `PAID_SUBSCRIPTION_REQUIRED` | The authenticated actor no longer has a paid subscription when this tool action executes. |
| 403 | `SUBSCRIPTION_REQUIRED` | Use an active paid subscription. |
| 403 | `TEAM_OWNER_NOT_FOUND` | The effective team owner account could not be found. |
| 404 | `TOOL_RESULT_NOT_FOUND` | beforeResultId is not an actor-owned cursor in this permission domain. |
| 429 | `INTEGRATION_MONTHLY_LIMIT_REACHED` | Used and pending calls have reached the shared monthly API/MCP allowance. |
| 429 | `INTEGRATION_RATE_LIMIT_REACHED` | The account has reached its per-minute integration limit; inspect retryAfterSeconds. |
| 500 | `INTERNAL_ERROR` | Saved result metadata could not be listed. |
| 503 | `SERVER_RESTARTING` | The server is restarting. Retry shortly and keep the same request identifier for a mutation. |

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


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