{"record":{"id":"e41633a23ef2123b","repo":"affaan-m/ECC","slug":"fal-key-is-not-set-get-a-key-at-https-fal-ai-dashboard-keys","errorCode":null,"errorMessage":"FAL_KEY is not set.\n  Get a key at https://fal.ai/dashboard/keys, then either:\n    export FAL_KEY='...'\n  or run the pipeline offline with no key and no spend:\n    export TASTE_FORGE_DRY_RUN=1      (or pass --dry-run)","messagePattern":"FAL_KEY is not set\\.\n  Get a key at https://fal\\.ai/dashboard/keys, then either:\n    export FAL_KEY='\\.\\.\\.'\n  or run the pipeline offline with no key and no spend:\n    export TASTE_FORGE_DRY_RUN=1      \\(or pass --dry-run\\)","errorType":"exception","errorClass":"MissingKeyError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/falapi.py","lineNumber":199,"sourceCode":"    if os.environ.get(\"TASTE_FORGE_ALLOW_LIVE\") != \"1\":\n        raise FalError(\"live transport requires TASTE_FORGE_ALLOW_LIVE=1\")\n\n\ndef safe_url(url: str) -> str:\n    \"\"\"Log only origin: paths, queries and userinfo can carry signed secrets.\"\"\"\n    try:\n        parsed = urllib.parse.urlsplit(url)\n        return f\"{parsed.scheme}://{parsed.hostname or '[invalid-host]'}\"\n    except ValueError:\n        return \"[invalid-url]\"\n\n\ndef api_key() -> str:\n    \"\"\"Return ``FAL_KEY`` after live opt-in. Never logs the value.\"\"\"\n    require_live()\n    key = os.environ.get(\"FAL_KEY\", \"\").strip()\n    if not key:\n        raise MissingKeyError(\n            \"FAL_KEY is not set.\\n\"\n            \"  Get a key at https://fal.ai/dashboard/keys, then either:\\n\"\n            \"    export FAL_KEY='...'\\n\"\n            \"  or run the pipeline offline with no key and no spend:\\n\"\n            f\"    export {DRY_RUN_ENV}=1      (or pass --dry-run)\"\n        )\n    return key\n\n\ndef _fal():\n    \"\"\"Import ``fal_client`` lazily so dry runs work even if it is absent.\"\"\"\n    try:\n        import fal_client  # noqa: PLC0415 - deliberate lazy import\n    except ImportError as exc:  # pragma: no cover - environment dependent\n        raise FalError(\n            \"the 'fal_client' package is required for live calls: pip install fal-client\"\n        ) from exc\n    return fal_client","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/falapi.py#L181-L217","documentation":"Error \"FAL_KEY is not set.\n  Get a key at https://fal.ai/dashboard/keys, then either:\n    export FAL_KEY='...'\n  or run the pipeline offline with no key and no spend:\n    export TASTE_FORGE_DRY_RUN=1      (or pass --dry-run)\" thrown in affaan-m/ECC.","triggerScenarios":"Thrown at skills/taste-application/scripts/falapi.py:199 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["export FAL_KEY='<your key>' after creating one at https://fal.ai/dashboard/keys","Or run fully offline with TASTE_FORGE_DRY_RUN=1 / --dry-run (no key, no spend)"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}