{
  "openapi": "3.0.1",
  "info": {
    "title": "Loom Video Downloader: MP4, Transcript & Metadata",
    "description": "Turn any public Loom share link into a downloadable MP4 URL, full transcript, VTT captions, and rich metadata in one run. No login required. Handles share links, embed links, iframe snippets, and raw video IDs. Also flags meeting recordings and archived videos, with folder context.",
    "version": "0.1",
    "x-build-id": "eNYlVG1hEdEDhtW22"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~loom-video-downloader/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-loom-video-downloader",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/getascraper~loom-video-downloader/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-loom-video-downloader",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/getascraper~loom-video-downloader/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-loom-video-downloader",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "targets": {
            "title": "Loom videos",
            "type": "array",
            "description": "One or more Loom videos to resolve. Paste a share link, embed link, full iframe snippet, or raw 32-character video ID. Duplicate URLs that identify the same video are emitted once.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Loom URLs and public pages",
            "type": "array",
            "description": "Optional alias for targets. With Discover from public pages enabled, public Loom folders or pages are scanned for visible share/embed links.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "Public Loom URL",
                  "type": "string",
                  "description": "A public Loom share, embed, folder, or page URL."
                }
              },
              "required": [
                "url"
              ]
            }
          },
          "urls": {
            "title": "Video URLs (alias)",
            "type": "array",
            "description": "Compatibility alias for targets. Accepts the same Loom links, iframe snippets, and raw video IDs.",
            "items": {
              "type": "string"
            }
          },
          "videoUrls": {
            "title": "Video URLs (alias)",
            "type": "array",
            "description": "Compatibility alias for targets, useful for generic video-workflow inputs.",
            "items": {
              "type": "string"
            }
          },
          "discoverFromPages": {
            "title": "Discover videos from public pages",
            "type": "boolean",
            "description": "When enabled, fetches supplied public Loom folder/page URLs and extracts only visible share/embed links. It does not bypass login, password, or workspace controls.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode",
            "enum": [
              "snapshot",
              "changes"
            ],
            "type": "string",
            "description": "Snapshot emits every current source-backed row. Changes compares successful scans using stateKey and suppresses unchanged rows.",
            "default": "snapshot"
          },
          "stateKey": {
            "title": "State key",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.-]{0,79}$",
            "maxLength": 80,
            "type": "string",
            "description": "Stable monitoring scope name. Required for monitorMode=changes. Use the same value on scheduled runs; different keys keep independent histories.",
            "default": "loom-video-downloader"
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of videos to process. You are billed per video returned. Leave empty to process every target.",
            "default": 25
          },
          "includeTranscript": {
            "title": "Include full transcript",
            "type": "boolean",
            "description": "Attach the clean, concatenated transcript text plus timestamped phrases (ready to paste into an LLM or notes) to every video. Only available when the video owner enabled transcription.",
            "default": true
          },
          "includeCaptions": {
            "title": "Include captions (VTT)",
            "type": "boolean",
            "description": "Attach the raw WebVTT captions file content and its source URL, suitable for subtitle files or video editors.",
            "default": true
          },
          "downloadFile": {
            "title": "Download and store the video file",
            "type": "boolean",
            "description": "When enabled, the actor streams the actual MP4 file into this run's key-value storage and returns run storage details in 'savedFile'. When disabled (default), the actor only returns Loom's temporary signed video URL. Signed URLs can expire; no permanent media URL is promised. Downloading large videos adds noticeable time and is billed separately.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Loom has no bot-detection wall, so a plain datacenter proxy (the default) works. Only switch to residential if you are running very high volume from a single location.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}