# Tanod Subtitles Convert

> Tanod Subtitles Convert is a paid API for AI agents from tanod.dev, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-29).

Converts subtitle files between SRT, WebVTT, and JSON formats with optional time-shifting of all cues

## Facts

- Endpoint: POST https://tanod.dev/v1/text/subtitles-convert?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tanod-subtitles-convert-2e500200
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_dgezdY7Xm_TPOoqrXcgic

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability tanod-subtitles-convert-2e500200 -d '<json body>'
```

Example prompt: Convert this SRT subtitle file to WebVTT format and shift all the cues 500 milliseconds later — here's the file content: '1\n00:00:01,000 --> 00:00:03,500\nHello there.\n\n2\n00:00:04,000 --> 00:00:06,000\nBye.\n'

## When to prefer this

Use this endpoint when you need a reliable, pay-per-call subtitle format conversion between SRT, VTT, and JSON without setting up a local library. It is especially useful when you also need time-shifting in the same operation, or when you're working with AI transcription output (JSON segments from /v1/audio/transcribe) and need to produce a standard subtitle file. Prefer this over generic text transformation endpoints because it understands subtitle timing semantics and handles cue dropping when shifts make cues negative.

## Known failure modes

- Invalid or malformed SRT/VTT content returns a parse error
- Providing both content and segments simultaneously may cause a conflict error
- from_format mismatch with actual content format triggers a validation error
- Content exceeding 1,000,000 characters or 10,000 cues is rejected
- shift_ms outside the range -86400000 to 86400000 is rejected
- Missing both content and segments fields returns a missing input error

## How this service works

utilpeek (Tanod) subtitle converter: SRT, WebVTT and JSON segments, with a time shift. Use when an agent must convert subtitles between SRT, WebVTT and JSON segments or shift their timing.

## Output

A JSON object containing the converted subtitle output as a string (in SRT, VTT, or JSON format), the number of cues converted, the number of cues dropped (if shift moved them before time 0), the total duration in seconds, the detected input format, the output format, and the applied time shift in milliseconds.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "to": {
   "enum": [
    "srt",
    "vtt",
    "json"
   ],
   "type": "string",
   "description": "Output format: srt (SubRip), vtt (WebVTT) or json (a list of {start, end, text}, seconds)."
  },
  "content": {
   "anyOf": [
    {
     "type": "string",
     "maxLength": 1000000,
     "minLength": 1
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "The SRT or WebVTT file as text (at most 1,000,000 characters, 10,000 cues). The format is detected from a WEBVTT header unless from_format is given. Use this or segments."
  },
  "segments": {
   "anyOf": [
    {
     "type": "array",
     "items": {
      "type": "object",
      "required": [
       "start",
       "end",
       "text"
      ],
      "properties": {
       "end": {
        "type": "number",
        "maximum": 359999.999,
        "minimum": 0,
        "description": "End in seconds, not before start."
       },
       "text": {
        "type": "string",
        "maxLength": 5000,
        "minLength": 1
       },
       "start": {
        "type": "number",
        "maximum": 359999.999,
        "minimum": 0,
        "description": "Start in seconds."
       }
      },
      "additionalProperties": false
     },
     "maxItems": 10000
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "A JSON segment list [{start, end, text}] in seconds, as /v1/audio/transcribe returns it. Use this or content."
  },
  "shift_ms": {
   "type": "integer",
   "default": 0,
   "maximum": 86400000,
   "minimum": -86400000,
   "description": "Time shift in milliseconds for every cue (negative = earlier; a cue that ends before 0 is dropped)."
  },
  "from_format": {
   "anyOf": [
    {
     "enum": [
      "srt",
      "vtt",
      "json"
     ],
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "Optional input format check: content is srt or vtt, segments are json."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "to": "vtt",
  "cues": 2,
  "from": "srt",
  "output": "WEBVTT\n\n00:00:01.000 --> 00:00:03.500\nHello there.\n\n00:00:04.000 --> 00:00:06.000\nBye.\n\n",
  "dropped": 0,
  "duration": 6,
  "segments": null,
  "shift_ms": 0,
  "operation": "subtitles-convert"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tanod-subtitles-convert-2e500200/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tanod.dev](https://www.zero.xyz/host/tanod.dev/llms.txt)
