ffmpeg-micro-com · Schema

Transcribe

VideoAPIAutomationFFmpegCloudMediaProcessing

Properties

Name Type Description
id string
status object
job_type string
media_url string GCS URL of the source audio/video (echoed from the request)
input_url string Same value as `media_url` (legacy field name on reads)
output_format string Always `srt` for transcribe jobs
output_url stringnull `gs://` URL of the generated SRT once `status` is `completed`. Use `/v1/transcribe/{id}/download` to obtain a signed HTTPS URL.
error_message stringnull Populated when status is `failed` or `canceled` ("Job canceled by user")
error_category string Machine classification derived from error_message (generated column). Only meaningful when status is `failed`; jobs with no error carry `unknown`, never null.
duration_seconds numbernull Duration of the source media (drives billing — input minutes)
billable_minutes numbernull Billable minutes, metered per second on input duration (a 19-second job bills 0.3167). Not an integer.
processing_time_seconds numbernull Wall-clock processing time measured by the toolkit; null until completed
queue_position integernull Jobs waiting in the job's toolkit lane at acceptance, this one included: the accepting worker's queue length right after this job was enqueued, so 1 means it was next in line. Set once at acceptance a
lane stringnull The processing lane the job runs in. Jobs with many large inputs (more than five 4K frames' worth of pixels in total) go to `heavy`, a service with more memory. Otherwise, inputs longer than two minut
started_at stringnull When the toolkit began executing the job. Set as soon as encoding starts, so null means the job is still waiting in its lane and non-null with status `processing` means it is encoding now. If that sta
created_at string
updated_at string
completed_at stringnull
user_id string Internal user identifier resolved from API key
View JSON Schema on GitHub

JSON Schema

ffmpeg-micro-com-transcribe-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/ffmpeg-micro-com/json-schema/ffmpeg-micro-com-transcribe-schema.json",
  "title": "Transcribe",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/ffmpeg-micro-com-openapi.yaml#/components/schemas/Transcribe",
  "type": "object",
  "required": [
    "id",
    "status",
    "media_url",
    "output_format",
    "created_at"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "status": {
      "$ref": "#/$defs/TranscodeStatus"
    },
    "job_type": {
      "type": "string",
      "enum": [
        "transcribe"
      ]
    },
    "media_url": {
      "type": "string",
      "description": "GCS URL of the source audio/video (echoed from the request)"
    },
    "input_url": {
      "type": "string",
      "description": "Same value as `media_url` (legacy field name on reads)"
    },
    "output_format": {
      "type": "string",
      "enum": [
        "srt"
      ],
      "description": "Always `srt` for transcribe jobs"
    },
    "output_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "`gs://` URL of the generated SRT once `status` is `completed`. Use `/v1/transcribe/{id}/download` to obtain a signed HTTPS URL.\n"
    },
    "error_message": {
      "type": [
        "string",
        "null"
      ],
      "description": "Populated when status is `failed` or `canceled` (\"Job canceled by user\")"
    },
    "error_category": {
      "type": "string",
      "enum": [
        "processing_limit",
        "file_size",
        "quota",
        "upload",
        "storage",
        "validation",
        "processing",
        "transient",
        "unknown"
      ],
      "description": "Machine classification derived from error_message (generated column). Only meaningful when status is `failed`; jobs with no error carry `unknown`, never null.\n"
    },
    "duration_seconds": {
      "type": [
        "number",
        "null"
      ],
      "description": "Duration of the source media (drives billing — input minutes)"
    },
    "billable_minutes": {
      "type": [
        "number",
        "null"
      ],
      "description": "Billable minutes, metered per second on input duration (a 19-second job bills 0.3167). Not an integer.\n"
    },
    "processing_time_seconds": {
      "type": [
        "number",
        "null"
      ],
      "description": "Wall-clock processing time measured by the toolkit; null until completed"
    },
    "queue_position": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Jobs waiting in the job's toolkit lane at acceptance, this one included: the accepting worker's queue length right after this job was enqueued, so 1 means it was next in line. Set once at acceptance and never updated: a rough \"how far back was I\", not a live counter. Once `started_at` is set the job is no longer waiting, whatever this says. Null on jobs accepted before the field existed, or when the toolkit's accept response carried no queue length.\n"
    },
    "lane": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "short",
        "long",
        "heavy",
        null
      ],
      "description": "The processing lane the job runs in. Jobs with many large inputs (more than five 4K frames' worth of pixels in total) go to `heavy`, a service with more memory. Otherwise, inputs longer than two minutes (by probed length or requested output span) go to `long`; everything else is `short`. Each lane is a separate service, so nothing in one can delay a job in another. Null on jobs accepted before lanes existed.\n"
    },
    "started_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "When the toolkit began executing the job. Set as soon as encoding starts, so null means the job is still waiting in its lane and non-null with status `processing` means it is encoding now. If that start signal was missed, it is filled from the completion or failure report. `started_at - created_at` is submission-to-start and includes the gateway's own download and probe before dispatch, so it is an upper bound on queue wait, not the wait itself.\n"
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    },
    "completed_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "user_id": {
      "type": "string",
      "description": "Internal user identifier resolved from API key"
    }
  },
  "$defs": {
    "TranscodeStatus": {
      "type": "string",
      "enum": [
        "pending",
        "processing",
        "completed",
        "failed",
        "canceled"
      ],
      "description": "Job lifecycle: `pending` (created, awaiting pickup) → `processing` → `completed` | `failed`; a user cancellation sets `canceled` (US spelling). Note there is no `queued` status — new jobs start as `pending`.\n"
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/ffmpeg-micro-com-transcribe"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.