{
  "openapi": "3.1.0",
  "info": {
    "title": "MeetWave API",
    "version": "1.0.0",
    "termsOfService": "https://meetwave.io/terms",
    "description": "Turn an audio or video file, or a link to one, into text with speakers and their names. Guides and samples: https://meetwave.io/docs/api/authentication"
  },
  "servers": [
    {
      "url": "https://api.meetwave.io/v1"
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Uploads",
      "description": "Send a file before you transcribe it."
    },
    {
      "name": "Transcriptions",
      "description": "Start, read and delete transcriptions."
    },
    {
      "name": "Webhooks",
      "description": "The secret webhooks are signed with."
    },
    {
      "name": "Streaming",
      "description": "Credentials for the live transcription socket."
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Your secret API key (`mwk_…`) as a bearer token."
      }
    },
    "schemas": {
      "Upload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^up_[a-z0-9]{26}$"
          },
          "upload_url": {
            "type": "string",
            "format": "uri",
            "description": "PUT the raw file here, once, before expires_at. Opaque: use it exactly as given, query included."
          },
          "method": {
            "type": "string",
            "enum": [
              "PUT"
            ]
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "upload_url",
          "method",
          "expires_at"
        ],
        "additionalProperties": false
      },
      "Transcription": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^tr_[a-z0-9]{26}$"
          },
          "object": {
            "type": "string",
            "enum": [
              "transcription"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "After this time the transcription is gone and answers 404; null while it runs."
          },
          "options": {
            "type": "object",
            "properties": {
              "speakers": {
                "type": "boolean"
              },
              "speakers_expected": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "speaker_names": {
                "type": "boolean"
              },
              "language": {
                "type": "string"
              }
            },
            "required": [
              "speakers",
              "speakers_expected",
              "speaker_names",
              "language"
            ],
            "additionalProperties": false
          },
          "audio_duration": {
            "type": [
              "number",
              "null"
            ],
            "description": "Seconds, 2 decimals; null until the file was read."
          },
          "features": {
            "type": "object",
            "properties": {
              "speakers": {
                "type": "string",
                "enum": [
                  "pending",
                  "done",
                  "partial",
                  "failed",
                  "off"
                ]
              },
              "speaker_names": {
                "type": "string",
                "enum": [
                  "pending",
                  "done",
                  "partial",
                  "failed",
                  "off"
                ]
              }
            },
            "required": [
              "speakers",
              "speaker_names"
            ],
            "additionalProperties": false,
            "description": "pending until the transcription ends, then done or failed; off when not asked for. speakers is partial when words could not be timed: each segment carries one speaker but can cross a turn, and the job is billed as text."
          },
          "billing": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "feature": {
                "type": "string",
                "enum": [
                  "batch_text",
                  "batch_speakers",
                  "batch_names"
                ]
              },
              "audio_seconds": {
                "type": "integer",
                "minimum": 0,
                "description": "Seconds billed: the length rounded up."
              },
              "cost_usd": {
                "type": "string",
                "pattern": "^\\d+\\.\\d{6}$",
                "description": "US dollars, 6 decimals."
              }
            },
            "required": [
              "feature",
              "audio_seconds",
              "cost_usd"
            ],
            "additionalProperties": false,
            "description": "What was charged; null until the transcription completes, and for failed ones (they cost nothing)."
          },
          "error": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": false,
            "description": "Why the transcription failed; null otherwise."
          },
          "webhook": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "status": {
                "type": "string",
                "enum": [
                  "pending",
                  "delivered",
                  "failed"
                ]
              },
              "attempts": {
                "type": "integer",
                "minimum": 0
              },
              "last_status_code": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "url",
              "status",
              "attempts",
              "last_status_code"
            ],
            "additionalProperties": false
          },
          "transcript": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "language": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Language code of the transcript; null when none was detected."
              },
              "language_source": {
                "type": "string",
                "enum": [
                  "detected",
                  "requested"
                ],
                "description": "requested when the request named a language, else detected."
              },
              "duration": {
                "type": "number",
                "minimum": 0,
                "description": "Seconds of audio processed, 2 decimals."
              },
              "text": {
                "type": "string",
                "description": "The whole transcript as plain text."
              },
              "speakers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "enum": [
                        "A",
                        "B",
                        "C",
                        "D",
                        "E",
                        "F",
                        "G",
                        "H",
                        "I",
                        "J"
                      ]
                    },
                    "name": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The name said in the audio, when speaker_names was asked for and a name was heard; else null."
                    }
                  },
                  "required": [
                    "id",
                    "name"
                  ],
                  "additionalProperties": false
                },
                "description": "One entry per speaker in order of first appearance; empty without speakers."
              },
              "segments": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "start": {
                      "type": "number",
                      "description": "Seconds from the start of the file, 2 decimals."
                    },
                    "end": {
                      "type": "number",
                      "description": "Seconds from the start of the file, 2 decimals."
                    },
                    "speaker": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Display label: the speaker's name when found, else the speaker id; null without speakers."
                    },
                    "speaker_id": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "enum": [
                        "A",
                        "B",
                        "C",
                        "D",
                        "E",
                        "F",
                        "G",
                        "H",
                        "I",
                        "J"
                      ],
                      "description": "Speaker id; null without speakers."
                    },
                    "text": {
                      "type": "string"
                    },
                    "words": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "text": {
                            "type": "string"
                          },
                          "start": {
                            "type": "number",
                            "description": "Seconds from the start of the file."
                          },
                          "end": {
                            "type": "number",
                            "description": "Seconds from the start of the file."
                          }
                        },
                        "required": [
                          "text",
                          "start",
                          "end"
                        ],
                        "additionalProperties": false
                      },
                      "description": "Word times, on the speakers and names tiers; empty for plain text, where a segment has its own times only."
                    }
                  },
                  "required": [
                    "start",
                    "end",
                    "speaker",
                    "speaker_id",
                    "text",
                    "words"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "language",
              "language_source",
              "duration",
              "text",
              "speakers",
              "segments"
            ],
            "additionalProperties": false,
            "description": "The transcript once completed; null before."
          }
        },
        "required": [
          "id",
          "object",
          "status",
          "created_at",
          "completed_at",
          "expires_at",
          "options",
          "audio_duration",
          "features",
          "billing",
          "error",
          "webhook",
          "transcript"
        ],
        "additionalProperties": false
      },
      "WebhookSecret": {
        "type": "object",
        "properties": {
          "secret": {
            "type": "string",
            "pattern": "^whsec_[A-Za-z0-9+/=]+$"
          }
        },
        "required": [
          "secret"
        ],
        "additionalProperties": false
      },
      "StreamToken": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "pattern": "^mwst_[A-Za-z0-9_-]+$"
          },
          "expires_in": {
            "type": "number",
            "enum": [
              60
            ]
          }
        },
        "required": [
          "token",
          "expires_in"
        ],
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "enum": [
              false
            ]
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "details": {
                "type": "object",
                "additionalProperties": {}
              }
            },
            "required": [
              "code",
              "message"
            ]
          },
          "meta": {
            "type": "object",
            "properties": {
              "requestId": {
                "type": "string"
              },
              "timestamp": {
                "type": "number"
              }
            },
            "required": [
              "requestId",
              "timestamp"
            ]
          }
        },
        "required": [
          "success",
          "error"
        ],
        "additionalProperties": false
      },
      "CreateTranscription": {
        "type": "object",
        "properties": {
          "upload_id": {
            "type": "string",
            "pattern": "^up_[a-z0-9]{26}$",
            "description": "An upload you PUT the file to. Pass this or audio_url."
          },
          "audio_url": {
            "type": "string",
            "maxLength": 2048,
            "format": "uri",
            "description": "A public http(s) link to the file. Pass this or upload_id."
          },
          "speakers": {
            "type": "boolean",
            "default": false,
            "description": "Tell speakers apart."
          },
          "speakers_expected": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "description": "How many speakers you expect, when you know it. Needs speakers."
          },
          "speaker_names": {
            "type": "boolean",
            "default": false,
            "description": "Name speakers from what is said in the audio. Turns speakers on."
          },
          "language": {
            "type": "string",
            "default": "auto",
            "description": "\"auto\" to detect the language, or a supported language code."
          },
          "webhook_url": {
            "type": "string",
            "maxLength": 2048,
            "format": "uri",
            "description": "An https address that gets a signed POST when the transcription completes or fails."
          }
        },
        "additionalProperties": false
      }
    },
    "parameters": {}
  },
  "paths": {
    "/transcriptions/{id}": {
      "delete": {
        "operationId": "deleteTranscription",
        "summary": "Delete a transcription",
        "description": "Erases the transcription and its files now. A queued transcription costs nothing; one already processing stops, and the seconds already processed are billed.",
        "tags": [
          "Transcriptions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "pattern": "^tr_[a-z0-9]{26}$",
              "description": "The transcription id (`tr_…`)."
            },
            "required": true,
            "description": "The transcription id (`tr_…`).",
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`: The transcription or upload does not exist, belongs to another account, was deleted or has expired.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "Not found."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getTranscription",
        "summary": "Get a transcription",
        "description": "The status, the cost and, once `completed`, the transcript. A transcription is readable for 72 hours after it ends, then answers 404.",
        "tags": [
          "Transcriptions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "pattern": "^tr_[a-z0-9]{26}$",
              "description": "The transcription id (`tr_…`)."
            },
            "required": true,
            "description": "The transcription id (`tr_…`).",
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The transcription.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transcription"
                },
                "example": {
                  "id": "tr_8k2m4q7w1x9c3v5b6n0z2p4r7t",
                  "object": "transcription",
                  "status": "completed",
                  "created_at": "2026-10-21T12:00:00Z",
                  "completed_at": "2026-10-21T12:00:41Z",
                  "expires_at": "2026-10-24T12:00:41Z",
                  "options": {
                    "speakers": true,
                    "speakers_expected": null,
                    "speaker_names": true,
                    "language": "auto"
                  },
                  "audio_duration": 7.84,
                  "features": {
                    "speakers": "done",
                    "speaker_names": "done"
                  },
                  "billing": {
                    "feature": "batch_names",
                    "audio_seconds": 8,
                    "cost_usd": "0.000445"
                  },
                  "error": null,
                  "webhook": {
                    "url": "https://example.com/hooks/meetwave",
                    "status": "delivered",
                    "attempts": 1,
                    "last_status_code": 200
                  },
                  "transcript": {
                    "language": "en",
                    "language_source": "detected",
                    "duration": 7.84,
                    "text": "Hi, I'm Anna from support. Thanks Anna, this is Mark from the sales team.",
                    "speakers": [
                      {
                        "id": "A",
                        "name": "Anna"
                      },
                      {
                        "id": "B",
                        "name": "Mark"
                      }
                    ],
                    "segments": [
                      {
                        "start": 0.52,
                        "end": 3.9,
                        "speaker": "Anna",
                        "speaker_id": "A",
                        "text": "Hi, I'm Anna from support.",
                        "words": [
                          {
                            "text": "Hi,",
                            "start": 0.52,
                            "end": 0.8
                          },
                          {
                            "text": "I'm",
                            "start": 0.86,
                            "end": 1.1
                          },
                          {
                            "text": "Anna",
                            "start": 1.16,
                            "end": 1.6
                          },
                          {
                            "text": "from",
                            "start": 1.7,
                            "end": 2
                          },
                          {
                            "text": "support.",
                            "start": 2.1,
                            "end": 3.9
                          }
                        ]
                      },
                      {
                        "start": 4.1,
                        "end": 7.84,
                        "speaker": "Mark",
                        "speaker_id": "B",
                        "text": "Thanks Anna, this is Mark from the sales team.",
                        "words": [
                          {
                            "text": "Thanks",
                            "start": 4.1,
                            "end": 4.5
                          },
                          {
                            "text": "Anna,",
                            "start": 4.55,
                            "end": 5
                          },
                          {
                            "text": "this",
                            "start": 5.1,
                            "end": 5.3
                          },
                          {
                            "text": "is",
                            "start": 5.3,
                            "end": 5.45
                          },
                          {
                            "text": "Mark",
                            "start": 5.5,
                            "end": 5.9
                          },
                          {
                            "text": "from",
                            "start": 6,
                            "end": 6.25
                          },
                          {
                            "text": "the",
                            "start": 6.25,
                            "end": 6.4
                          },
                          {
                            "text": "sales",
                            "start": 6.45,
                            "end": 6.9
                          },
                          {
                            "text": "team.",
                            "start": 6.95,
                            "end": 7.84
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`: The transcription or upload does not exist, belongs to another account, was deleted or has expired.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "Not found."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/transcriptions/{id}/{format}": {
      "get": {
        "operationId": "getTranscriptionText",
        "summary": "Get the transcript as TXT, SRT or VTT",
        "description": "The transcript as a text file, UTF-8. Answers 409 `NOT_READY` until the transcription is completed, and 409 `NO_TRANSCRIPT` once it has failed.",
        "tags": [
          "Transcriptions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "pattern": "^tr_[a-z0-9]{26}$",
              "description": "The transcription id (`tr_…`)."
            },
            "required": true,
            "description": "The transcription id (`tr_…`).",
            "name": "id",
            "in": "path"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "txt",
                "srt",
                "vtt"
              ],
              "description": "The file format."
            },
            "required": true,
            "description": "The file format.",
            "name": "format",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The transcript file.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "[00:00:00] Anna: Hi, I'm Anna from support.\n[00:00:04] Mark: Thanks Anna, this is Mark from the sales team.\n"
              },
              "application/x-subrip": {
                "schema": {
                  "type": "string"
                },
                "example": "1\n00:00:00,520 --> 00:00:03,900\nAnna: Hi, I'm Anna from support.\n\n2\n00:00:04,100 --> 00:00:07,840\nMark: Thanks Anna, this is Mark from the sales team.\n"
              },
              "text/vtt": {
                "schema": {
                  "type": "string"
                },
                "example": "WEBVTT\n\n00:00:00.520 --> 00:00:03.900\n<v Anna>Hi, I'm Anna from support.\n\n00:00:04.100 --> 00:00:07.840\n<v Mark>Thanks Anna, this is Mark from the sales team.\n"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_ERROR`: The body or a parameter is invalid; details.field names it.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "VALIDATION_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "VALIDATION_ERROR",
                        "message": "The request is invalid."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`: The transcription or upload does not exist, belongs to another account, was deleted or has expired.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "Not found."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "`NOT_READY`: A text format was requested before the transcription completed. `NO_TRANSCRIPT`: A text format was requested for a failed transcription; create a new one to retry.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "NOT_READY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "NOT_READY",
                        "message": "The transcription is not completed yet."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  },
                  "NO_TRANSCRIPT": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "NO_TRANSCRIPT",
                        "message": "The transcription failed and has no transcript. Its error says why."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webhook-secret": {
      "get": {
        "operationId": "getWebhookSecret",
        "summary": "Get the webhook signing secret",
        "description": "The secret your webhooks are signed with. Created on the first call.",
        "tags": [
          "Webhooks"
        ],
        "responses": {
          "200": {
            "description": "The signing secret.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecret"
                },
                "example": {
                  "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/stream/tokens": {
      "post": {
        "operationId": "createStreamToken",
        "summary": "Create a streaming token",
        "description": "A single-use credential for a browser: pass it as `?token=` when opening the streaming socket, within 60 seconds. Create it on your server, so your API key never reaches the page.",
        "tags": [
          "Streaming"
        ],
        "responses": {
          "201": {
            "description": "The token.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamToken"
                },
                "example": {
                  "token": "mwst_Q2xH8vR0kYfJ3nB7tW5pLmZc9aDs4EuG",
                  "expires_in": 60
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/transcriptions": {
      "post": {
        "operationId": "createTranscription",
        "summary": "Create a transcription",
        "description": "Starts a transcription of an upload or of a public link and answers at once with the transcription in `queued`. Poll it with GET, or pass `webhook_url` to be told when it completes or fails. Send an `Idempotency-Key` to retry safely: the same key with the same body within 24 hours answers the same transcription.",
        "tags": [
          "Transcriptions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "description": "Any string you choose; repeating it with the same body answers the same transcription."
            },
            "required": false,
            "description": "Any string you choose; repeating it with the same body answers the same transcription.",
            "name": "Idempotency-Key",
            "in": "header"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTranscription"
              },
              "example": {
                "upload_id": "up_8k2m4q7w1x9c3v5b6n0z2p4r7t",
                "speakers": true,
                "speaker_names": true,
                "language": "auto",
                "webhook_url": "https://example.com/hooks/meetwave"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The transcription, queued.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transcription"
                },
                "example": {
                  "id": "tr_8k2m4q7w1x9c3v5b6n0z2p4r7t",
                  "object": "transcription",
                  "status": "queued",
                  "created_at": "2026-10-21T12:00:00Z",
                  "completed_at": null,
                  "expires_at": null,
                  "options": {
                    "speakers": true,
                    "speakers_expected": null,
                    "speaker_names": true,
                    "language": "auto"
                  },
                  "audio_duration": null,
                  "features": {
                    "speakers": "pending",
                    "speaker_names": "pending"
                  },
                  "billing": null,
                  "error": null,
                  "webhook": {
                    "url": "https://example.com/hooks/meetwave",
                    "status": "pending",
                    "attempts": 0,
                    "last_status_code": null
                  },
                  "transcript": null
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_ERROR`: The body or a parameter is invalid; details.field names it.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "VALIDATION_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "VALIDATION_ERROR",
                        "message": "The request is invalid."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "`INSUFFICIENT_CREDITS`: Your available credits are zero.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INSUFFICIENT_CREDITS": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INSUFFICIENT_CREDITS",
                        "message": "Not enough credits for this file."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`: The transcription or upload does not exist, belongs to another account, was deleted or has expired.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "Not found."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "`UPLOAD_NOT_READY`: The file was not PUT to the upload URL yet, or the upload was already used by a transcription. `IDEMPOTENCY_CONFLICT`: The same Idempotency-Key was sent with a different body.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "UPLOAD_NOT_READY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "UPLOAD_NOT_READY",
                        "message": "The upload has no file yet or was already used."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  },
                  "IDEMPOTENCY_CONFLICT": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "IDEMPOTENCY_CONFLICT",
                        "message": "This Idempotency-Key was used with a different request body."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "413": {
            "description": "`FILE_TOO_LARGE`: The uploaded file is larger than 350 MB.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "FILE_TOO_LARGE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "FILE_TOO_LARGE",
                        "message": "The file is larger than 350 MB."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA`: The first bytes of the upload match none of the supported formats.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "UNSUPPORTED_MEDIA": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "UNSUPPORTED_MEDIA",
                        "message": "The file is not a supported audio or video format."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`TOO_MANY_ACTIVE_JOBS`: 5 transcriptions are already queued or processing for this key, or 10 for the account; Retry-After: 30. `RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "TOO_MANY_ACTIVE_JOBS": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "TOO_MANY_ACTIVE_JOBS",
                        "message": "Too many transcriptions in progress. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  },
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/uploads": {
      "post": {
        "operationId": "createUpload",
        "summary": "Create an upload",
        "description": "Returns a one-time address to PUT a file to. Send the raw bytes with any HTTP client within 60 minutes, then pass the upload id to create a transcription. An upload can be used by one transcription only.",
        "tags": [
          "Uploads"
        ],
        "responses": {
          "201": {
            "description": "The upload and the address to PUT the file to.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Upload"
                },
                "example": {
                  "id": "up_8k2m4q7w1x9c3v5b6n0z2p4r7t",
                  "upload_url": "https://upload.meetwave.io/api-uploads/up_8k2m4q7w1x9c3v5b6n0z2p4r7t?...",
                  "method": "PUT",
                  "expires_at": "2026-10-21T13:00:00Z"
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webhook-secret/rotate": {
      "post": {
        "operationId": "rotateWebhookSecret",
        "summary": "Rotate the webhook signing secret",
        "description": "Replaces the secret. Webhooks are signed with the new one from now on; the old one stops at once.",
        "tags": [
          "Webhooks"
        ],
        "responses": {
          "200": {
            "description": "The signing secret.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this key.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecret"
                },
                "example": {
                  "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
                }
              }
            }
          },
          "401": {
            "description": "`INVALID_API_KEY`: The Authorization header is missing, malformed or names an unknown key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INVALID_API_KEY": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INVALID_API_KEY",
                        "message": "Invalid API key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "`API_KEY_INACTIVE`: The key was deactivated in the console.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "API_KEY_INACTIVE": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "API_KEY_INACTIVE",
                        "message": "This API key is deactivated. Activate it in the MeetWave console."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMIT_EXCEEDED`: More than 120 requests a minute with one key; wait for Retry-After seconds.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before trying again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Too many requests. Retry after the time in the Retry-After header."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_SERVER_ERROR`: An error on our side; retry with the same Idempotency-Key.",
            "headers": {
              "X-Request-Id": {
                "description": "Identifies this request; quote it when you contact support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "INTERNAL_SERVER_ERROR": {
                    "value": {
                      "success": false,
                      "error": {
                        "code": "INTERNAL_SERVER_ERROR",
                        "message": "Something went wrong on our side. Retry with the same Idempotency-Key."
                      },
                      "meta": {
                        "requestId": "req_8b4c2e1f-6a9d-4f3b-9c7e-2d5a1b0f4e6c",
                        "timestamp": 1792584000000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "webhooks": {}
}
