{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk AI Translator: Website, Files & Datasets (No API Key)",
    "description": "Translate product catalogs, websites, datasets, CSV/XLSX/JSON files and SRT/VTT subtitles into 40+ languages. AI translation with brand-term locking and HTML/placeholder safety. No API key, and repeat runs only pay for what changed.",
    "version": "0.1",
    "x-build-id": "z56WiiCiSgL2bGVAD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fayoussef~bulk-ai-translator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fayoussef-bulk-ai-translator",
        "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/fayoussef~bulk-ai-translator/runs": {
      "post": {
        "operationId": "runs-sync-fayoussef-bulk-ai-translator",
        "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/fayoussef~bulk-ai-translator/run-sync": {
      "post": {
        "operationId": "run-sync-fayoussef-bulk-ai-translator",
        "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",
        "required": [
          "mode",
          "targetLanguages"
        ],
        "properties": {
          "mode": {
            "title": "What do you want to translate?",
            "enum": [
              "text",
              "dataset",
              "website",
              "file"
            ],
            "type": "string",
            "description": "Pick where the text comes from. Only the fields for the mode you pick are used, so you can ignore the rest.",
            "default": "text"
          },
          "targetLanguages": {
            "title": "Translate into",
            "uniqueItems": true,
            "type": "array",
            "description": "Pick one or more languages. Every item is translated into each language you select.\n\n⚡ Unlock full pages and higher limits by subscribing to an [Apify plan](https://apify.com/pricing?fpr=youssef).\n💼 Need a custom solution? Reach out at youssefarhan24@gmail.com\n🌐 Got a site in mind? [Suggest it here](https://automationbyexperts.com/apify)",
            "items": {
              "type": "string",
              "enum": [
                "ar",
                "bn",
                "pt-br",
                "bg",
                "zh",
                "zh-tw",
                "hr",
                "cs",
                "da",
                "nl",
                "en",
                "et",
                "fi",
                "fr",
                "de",
                "el",
                "he",
                "hi",
                "hu",
                "id",
                "it",
                "ja",
                "ko",
                "lv",
                "lt",
                "ms",
                "no",
                "fa",
                "pl",
                "pt",
                "ro",
                "ru",
                "sr",
                "sk",
                "sl",
                "es",
                "sv",
                "th",
                "tr",
                "uk",
                "ur",
                "vi"
              ],
              "enumTitles": [
                "Arabic (ar)",
                "Bengali (bn)",
                "Brazilian Portuguese (pt-br)",
                "Bulgarian (bg)",
                "Chinese (Simplified) (zh)",
                "Chinese (Traditional) (zh-tw)",
                "Croatian (hr)",
                "Czech (cs)",
                "Danish (da)",
                "Dutch (nl)",
                "English (en)",
                "Estonian (et)",
                "Finnish (fi)",
                "French (fr)",
                "German (de)",
                "Greek (el)",
                "Hebrew (he)",
                "Hindi (hi)",
                "Hungarian (hu)",
                "Indonesian (id)",
                "Italian (it)",
                "Japanese (ja)",
                "Korean (ko)",
                "Latvian (lv)",
                "Lithuanian (lt)",
                "Malay (ms)",
                "Norwegian (no)",
                "Persian (fa)",
                "Polish (pl)",
                "Portuguese (pt)",
                "Romanian (ro)",
                "Russian (ru)",
                "Serbian (sr)",
                "Slovak (sk)",
                "Slovenian (sl)",
                "Spanish (es)",
                "Swedish (sv)",
                "Thai (th)",
                "Turkish (tr)",
                "Ukrainian (uk)",
                "Urdu (ur)",
                "Vietnamese (vi)"
              ]
            },
            "default": [
              "de"
            ]
          },
          "texts": {
            "title": "Texts (Text mode)",
            "type": "array",
            "description": "The strings to translate. One entry per line.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset (Dataset mode)",
            "type": "string",
            "description": "Pick a dataset produced by any other Actor run, and its text fields get translated."
          },
          "startUrls": {
            "title": "Start URLs (Website mode)",
            "type": "array",
            "description": "Pages to translate. The crawler stays on the same domain.",
            "items": {
              "type": "string"
            }
          },
          "fileUrls": {
            "title": "File URLs (File mode)",
            "type": "array",
            "description": "Direct links to the files to translate. Supported: .pdf, .csv, .tsv, .json, .xlsx, .srt, .vtt, .md, .markdown, .txt. Anything else is skipped rather than guessed at. Scanned or image-only PDFs are rejected: they have no text layer to translate.",
            "items": {
              "type": "string"
            }
          },
          "uploadedFile": {
            "title": "Or upload a file (File mode)",
            "type": "string",
            "description": "Upload a file straight from your computer instead of hosting it somewhere. Same formats as above. Use the URL list when you have several files."
          },
          "fields": {
            "title": "Fields to translate",
            "type": "array",
            "description": "Which columns or fields to translate in Dataset, CSV, JSON and XLSX input. Leave empty to auto-detect: text fields are translated, and IDs, URLs, SKUs and numbers are left alone.",
            "items": {
              "type": "string"
            }
          },
          "glossary": {
            "title": "Never translate these terms",
            "type": "array",
            "description": "Brand names, product names, SKUs and anything else that must survive untouched.",
            "items": {
              "type": "string"
            }
          },
          "tone": {
            "title": "Tone",
            "enum": [
              "neutral",
              "formal",
              "casual",
              "marketing",
              "technical"
            ],
            "type": "string",
            "description": "How the translation should read.",
            "default": "neutral"
          },
          "model": {
            "title": "Model",
            "enum": [
              "anthropic/claude-opus-5-fast",
              "anthropic/claude-opus-5",
              "anthropic/claude-sonnet-5",
              "anthropic/claude-opus-4.8-fast",
              "anthropic/claude-opus-4.8",
              "anthropic/claude-opus-4.7-fast",
              "anthropic/claude-opus-4.7",
              "anthropic/claude-sonnet-4.6",
              "anthropic/claude-opus-4.6",
              "anthropic/claude-opus-4.5",
              "anthropic/claude-haiku-4.5",
              "anthropic/claude-sonnet-4.5",
              "anthropic/claude-opus-4.1",
              "anthropic/claude-opus-4",
              "anthropic/claude-sonnet-4",
              "anthropic/claude-3-haiku",
              "anthropic/claude-fable-5",
              "google/gemini-3.6-flash",
              "google/gemini-3.5-flash-lite",
              "google/gemini-3.5-flash",
              "google/gemini-3.1-flash-lite",
              "google/gemini-3.1-flash-lite-preview",
              "google/gemini-3.1-pro-preview-customtools",
              "google/gemini-3.1-pro-preview",
              "google/gemini-3-flash-preview",
              "google/gemini-2.5-flash-lite",
              "google/gemini-2.5-flash",
              "google/gemini-2.5-pro",
              "google/gemini-2.5-pro-preview",
              "google/gemini-2.5-pro-preview-05-06",
              "google/gemma-4-26b-a4b-it",
              "google/gemma-4-31b-it",
              "google/gemma-3n-e4b-it",
              "google/gemma-3-4b-it",
              "google/gemma-3-12b-it",
              "google/gemma-3-27b-it",
              "google/gemma-2-27b-it",
              "google/gemma-4-26b-a4b-it:free",
              "google/gemma-4-31b-it:free",
              "openai/gpt-5.6-luna-pro",
              "openai/gpt-5.6-luna",
              "openai/gpt-5.6-terra-pro",
              "openai/gpt-5.6-terra",
              "openai/gpt-5.6-sol-pro",
              "openai/gpt-5.6-sol",
              "openai/gpt-5.5-pro",
              "openai/gpt-5.5",
              "openai/gpt-5.4-nano",
              "openai/gpt-5.4-mini",
              "openai/gpt-5.4-pro",
              "openai/gpt-5.4",
              "openai/gpt-5.3-chat",
              "openai/gpt-5.3-codex",
              "openai/gpt-5.2-codex",
              "openai/gpt-5.2-chat",
              "openai/gpt-5.2-pro",
              "openai/gpt-5.2",
              "openai/gpt-5.1-codex-max",
              "openai/gpt-5.1",
              "openai/gpt-5.1-chat",
              "openai/gpt-5.1-codex",
              "openai/gpt-5.1-codex-mini",
              "openai/o3-deep-research",
              "openai/o4-mini-deep-research",
              "openai/gpt-5-pro",
              "openai/gpt-5-codex",
              "openai/gpt-5-chat",
              "openai/gpt-5",
              "openai/gpt-5-mini",
              "openai/gpt-5-nano",
              "openai/o3-pro",
              "openai/o4-mini-high",
              "openai/o3",
              "openai/o4-mini",
              "openai/gpt-4.1",
              "openai/gpt-4.1-mini",
              "openai/gpt-4.1-nano",
              "openai/gpt-4o-mini-search-preview",
              "openai/gpt-4o-search-preview",
              "openai/o3-mini-high",
              "openai/o3-mini",
              "openai/gpt-4o-2024-11-20",
              "openai/gpt-4o-2024-08-06",
              "openai/gpt-4o-mini",
              "openai/gpt-4o-mini-2024-07-18",
              "openai/gpt-4o",
              "openai/gpt-4o-2024-05-13",
              "openai/gpt-4-turbo",
              "openai/gpt-4-turbo-preview",
              "openai/gpt-4",
              "openai/gpt-chat-latest",
              "openai/gpt-oss-120b",
              "openai/gpt-oss-20b",
              "openai/o1-pro",
              "openai/o1",
              "openai/gpt-3.5-turbo-0613",
              "openai/gpt-3.5-turbo-instruct",
              "openai/gpt-3.5-turbo-16k",
              "openai/gpt-3.5-turbo",
              "openai/gpt-oss-20b:free",
              "deepseek/deepseek-v3.2",
              "deepseek/deepseek-v3.2-exp",
              "deepseek/deepseek-v3.1-terminus",
              "deepseek/deepseek-chat-v3.1",
              "deepseek/deepseek-r1-0528",
              "deepseek/deepseek-chat-v3-0324",
              "deepseek/deepseek-r1-distill-llama-70b",
              "deepseek/deepseek-r1",
              "deepseek/deepseek-chat",
              "deepseek/deepseek-v4-pro",
              "deepseek/deepseek-v4-flash",
              "x-ai/grok-4.5",
              "x-ai/grok-4.3",
              "x-ai/grok-4.20-multi-agent",
              "x-ai/grok-4.20",
              "x-ai/grok-build-0.1",
              "meta-llama/llama-4-maverick",
              "meta-llama/llama-4-scout",
              "meta-llama/llama-3.3-70b-instruct",
              "meta-llama/llama-3.2-1b-instruct",
              "meta-llama/llama-3.2-3b-instruct",
              "meta-llama/llama-3.1-70b-instruct",
              "meta-llama/llama-3.1-8b-instruct",
              "qwen/qwen3.7-plus",
              "qwen/qwen3.7-max",
              "qwen/qwen3.5-plus-20260420",
              "qwen/qwen3.6-flash",
              "qwen/qwen3.6-35b-a3b",
              "qwen/qwen3.6-max-preview",
              "qwen/qwen3.6-27b",
              "qwen/qwen3.6-plus",
              "qwen/qwen3.5-9b",
              "qwen/qwen3.5-35b-a3b",
              "qwen/qwen3.5-27b",
              "qwen/qwen3.5-122b-a10b",
              "qwen/qwen3.5-flash-02-23",
              "qwen/qwen3.5-plus-02-15",
              "qwen/qwen3.5-397b-a17b",
              "qwen/qwen3-max-thinking",
              "qwen/qwen3-coder-next",
              "qwen/qwen3-vl-32b-instruct",
              "qwen/qwen3-vl-8b-thinking",
              "qwen/qwen3-vl-8b-instruct",
              "qwen/qwen3-vl-30b-a3b-thinking",
              "qwen/qwen3-vl-30b-a3b-instruct",
              "qwen/qwen3-vl-235b-a22b-thinking",
              "qwen/qwen3-vl-235b-a22b-instruct",
              "qwen/qwen3-max",
              "qwen/qwen3-coder-plus",
              "qwen/qwen3-coder-flash"
            ],
            "type": "string",
            "description": "Which AI model does the translating. Prices in brackets are the model's own per-million-token rates, charged separately from this Actor: model usage is billed by Apify's OpenRouter integration (or by OpenRouter directly if you supply your own key below). This Actor only charges for the output it produces. Note that on the Free Plan the model integration charges around 10x what paid plans pay, so an Apify plan pays for itself quickly. Cheap flash-class models handle product data, UI strings and metadata well; pricier ones read better for marketing and long-form copy.",
            "default": "google/gemini-2.5-flash"
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Safety cap on how many strings, dataset items or files are translated in one run.",
            "default": 1000
          },
          "maxPages": {
            "title": "Max pages (Website mode)",
            "minimum": 1,
            "type": "integer",
            "description": "How many pages to crawl and translate.",
            "default": 25
          },
          "followLinks": {
            "title": "Follow links (Website mode)",
            "type": "boolean",
            "description": "Crawl links found on the start URLs. Turn off to translate only the URLs you listed.",
            "default": true
          },
          "maxSubtitleChars": {
            "title": "Max characters per subtitle line",
            "minimum": 0,
            "type": "integer",
            "description": "Translations run longer than English, so subtitle cues are re-wrapped to this width. Set to 0 to leave line breaks alone.",
            "default": 42
          },
          "reuseCache": {
            "title": "Reuse translations from previous runs",
            "type": "boolean",
            "description": "Keeps a translation cache on your account so a re-run only pays for strings that actually changed. Turn it off to force a fresh translation of everything.",
            "default": true
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many translation requests run at once. Raise it for speed, lower it if you hit rate limits.",
            "default": 5
          },
          "maxRetries": {
            "title": "Max retries",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries per failed translation request.",
            "default": 3
          },
          "customModel": {
            "title": "Custom model",
            "type": "string",
            "description": "Optional. Override the Quality preset with a specific model ID."
          },
          "apifyToken": {
            "title": "Apify token",
            "type": "string",
            "description": "Optional. Only needed when running this Actor locally. On the Apify platform it is filled in automatically."
          },
          "openrouterApiKey": {
            "title": "OpenRouter API key",
            "type": "string",
            "description": "Optional. Bring your own OpenRouter key and translation calls go straight to OpenRouter, billed by them on your own OpenRouter account instead of through Apify. Useful on the Free Plan, where the Apify model integration charges around 10x. Leave empty to use the built-in access, which needs no key at all."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}