{
  "openapi": "3.0.1",
  "info": {
    "title": "Erome Scraper & Video Downloader",
    "description": "Scrape and download Erome albums, profiles and search. One row per video or image with the direct CDN link, a working download URL, duration, resolution, real file size, a thumbnail for every video, tags, views and full uploader details.",
    "version": "0.0",
    "x-build-id": "xBZJf5NqZo724ikSC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/1codefort~erome-scraper-downloader/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-1codefort-erome-scraper-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/1codefort~erome-scraper-downloader/runs": {
      "post": {
        "operationId": "runs-sync-1codefort-erome-scraper-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/1codefort~erome-scraper-downloader/run-sync": {
      "post": {
        "operationId": "run-sync-1codefort-erome-scraper-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": {
          "startUrls": {
            "title": "Album links, profile links, or usernames",
            "type": "array",
            "description": "Paste one or more Erome album links (https://www.erome.com/a/XXXXXXXX), user profile links (https://www.erome.com/username) or plain usernames — one per entry. Each entry is detected automatically: album links pull that album's media, profile links and bare usernames pull every album of that creator. Leave empty if you only want to search. Plain strings are also what the API accepts, so this input is a drop-in replacement for the other Erome actors.",
            "items": {
              "type": "string"
            }
          },
          "urlText": {
            "title": "Or paste links, one per line",
            "type": "string",
            "description": "Optional fallback for copy/paste batches: one album link, profile link or username per line."
          },
          "usernames": {
            "title": "Usernames",
            "type": "array",
            "description": "Optional. Bare Erome usernames to crawl, one entry per creator. Same as passing usernames inside the links field, but easier to build from a spreadsheet.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search Erome",
            "type": "string",
            "description": "Optional. A keyword to search on Erome; matching albums are collected and scraped. Use it on its own or alongside the links above."
          },
          "mediaType": {
            "title": "Media type",
            "enum": [
              "all",
              "video",
              "image"
            ],
            "type": "string",
            "description": "Which media to include from each album.",
            "default": "all"
          },
          "outputMode": {
            "title": "What to output",
            "enum": [
              "media",
              "albums",
              "both"
            ],
            "type": "string",
            "description": "One row per media item (default), one row per album (cheap catalogue runs — no album page is opened), or both.",
            "default": "media"
          },
          "maxResults": {
            "title": "Maximum media items",
            "minimum": 1,
            "type": "integer",
            "description": "The most media items (videos plus images) to return across every album, profile and search. Each media item is one result row, so this caps your cost.",
            "default": 1000
          },
          "maxAlbumsPerProfile": {
            "title": "Maximum albums per profile",
            "minimum": 1,
            "type": "integer",
            "description": "For usernames and profile links: the most albums to pull from a single creator. Ignored for direct album links.",
            "default": 50
          },
          "maxSearchPages": {
            "title": "Maximum search pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "For a keyword search: how many Erome result pages to walk (about 36 albums per page).",
            "default": 1
          },
          "maxAlbumsPerSearch": {
            "title": "Maximum albums per search",
            "minimum": 1,
            "type": "integer",
            "description": "For a keyword search: the most matching albums to scrape from the keyword.",
            "default": 50
          },
          "downloadFiles": {
            "title": "Download the actual files",
            "type": "boolean",
            "description": "When on, the real video and image files are downloaded during the run and stored in this run's key-value store. Each row then gets a permanent, public downloadUrl that works without any special header. When off (default) you get the direct CDN links plus the exact headers and a ready-to-run curl command, which is faster and cheaper. Billed as 'file stored': one event per 10 MB, minimum one (roughly $1 per GB actually downloaded).",
            "default": false
          },
          "createZip": {
            "title": "Bundle each album into a ZIP",
            "type": "boolean",
            "description": "Requires 'Download the actual files'. Also packs every downloaded file of an album into a single ZIP stored in the run's key-value store, and puts its link on the album rows.",
            "default": false
          },
          "preferredQuality": {
            "title": "Preferred quality",
            "enum": [
              "best",
              "1080p",
              "720p",
              "480p",
              "360p",
              "high",
              "low"
            ],
            "type": "string",
            "description": "Quality preference for videos. Erome currently publishes a single 720p (HD) rendition per video, so every value resolves to the best available rendition; the actual resolution is always reported in qualityRes / qualityLabel and in availableFormats.",
            "default": "best"
          },
          "includeFileSize": {
            "title": "Include real file size",
            "type": "boolean",
            "description": "Adds the true size of each media file (in bytes, plus a readable form) by asking the CDN. Costs one very cheap request per file. Turn off for the fastest possible metadata run.",
            "default": true
          },
          "includeErrorRows": {
            "title": "Write error rows to the dataset",
            "type": "boolean",
            "description": "Off by default because the platform bills every item written to the dataset — a failed link showing up as a paid row is not fair. With this off, failures are reported in the actor log and in the run's SUMMARY record (key-value store) instead. Turn it on if you prefer errors to be visible in the dataset itself, and accept that those rows are charged like any other row.",
            "default": false
          },
          "concurrency": {
            "title": "Parallel albums",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many albums are scraped at the same time. Raise it for big catalogues, lower it if a run gets rate-limited.",
            "default": 8
          },
          "maxRequestsPerSecond": {
            "title": "Requests per second",
            "minimum": 0,
            "type": "integer",
            "description": "Politeness limit applied to every request this actor makes to Erome. 0 disables the limit.",
            "default": 8
          },
          "maxZipSizeMb": {
            "title": "Maximum ZIP size (MB)",
            "minimum": 1,
            "type": "integer",
            "description": "Skip the per-album ZIP when the album is bigger than this, so a huge album cannot blow up the run's storage.",
            "default": 2048
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Erome answers fine from Apify's own infrastructure, so this is only needed if you want a specific country or you hit a rate limit. If a page request is ever refused, the actor retries it through this proxy automatically. Files are never downloaded through the proxy unless you explicitly allow it below, because bandwidth-heavy proxy traffic is expensive.",
            "default": {
              "useApifyProxy": false
            }
          },
          "useProxyForDownloads": {
            "title": "Route media files through the proxy too",
            "type": "boolean",
            "description": "Off by default on purpose: proxy traffic is billed per GB and can cost many times more than the price of the stored-file event. Turn it on only if Erome is refusing your downloads from Apify's IPs and you accept that proxy cost.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}