All MCP tools

recordings_finalize_upload

Finalize a recording upload

Use this after uploading bytes to a grant from recordings_request_upload. Finalizes the storage object into a BitterClip recording and starts transcription when the account allows it. Multipart uploads must pass every part_number/etag returned by storage.

Surface: App-only

Product release 1dce717408a55fac1047e7d779177fa3ef8ede51
Public contract commit 1ce47f7857ae3d9b6933fe83d5c33de3ae5efc64
Public contract SHA-256 241d47d25e4b4c1dae9d2263793874d06fc4ba7bc3c78d4cf2bc63fbb32ed7dc
Captured 2026-09-24T16:39:30.100Z. Review or improve this contract on GitHub.

These blocks show the complete MCP descriptors captured from serving Rails. Security schemes and resource URIs can differ by connected host.

App descriptor

{
  "name": "recordings_finalize_upload",
  "title": "Finalize a recording upload",
  "description": "Use this after uploading bytes to a grant from recordings_request_upload. Finalizes the storage object into a BitterClip recording and starts transcription when the account allows it. Multipart uploads must pass every part_number/etag returned by storage.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "upload_token": {
        "type": "string"
      },
      "parts": {
        "type": "array",
        "description": "Required for multipart uploads: one object per uploaded part.",
        "items": {
          "type": "object",
          "properties": {
            "part_number": {
              "type": "integer"
            },
            "etag": {
              "type": "string"
            }
          },
          "required": [
            "part_number",
            "etag"
          ]
        }
      }
    },
    "required": [
      "upload_token"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "app"
      ]
    },
    "openai/widgetAccessible": true,
    "openai/visibility": "private"
  },
  "outputSchema": {
    "type": "object",
    "properties": {
      "ok": {
        "type": "boolean"
      },
      "deduped": {
        "type": "boolean"
      },
      "recording_id": {
        "type": "string"
      },
      "recording_public_id": {
        "type": "string"
      },
      "status": {
        "type": "string"
      },
      "transcript_status": {
        "type": "string"
      },
      "original_filename": {
        "type": "string"
      },
      "duration_seconds": {
        "type": [
          "number",
          "null"
        ]
      },
      "insertable": {
        "type": "boolean",
        "description": "True when the finalized source has enough media duration to be inserted into a composition."
      },
      "byte_size": {
        "type": [
          "integer",
          "null"
        ]
      },
      "workspace_url": {
        "type": "string"
      }
    },
    "required": [],
    "additionalProperties": false
  }
}

Errors

[
  "invalid_upload_token",
  "upload_not_found",
  "upload_incomplete",
  "upload_mismatch",
  "multipart_upload_failed",
  "billing_required",
  "invalid_input"
]

Examples

[]