{"record":{"id":"a9ad3aab85ee9ac1","repo":"microsoft/semantic-kernel","slug":"please-provide-an-api-key","errorCode":null,"errorMessage":"Please provide an api_key","messagePattern":"Please provide an api_key","errorType":"exception","errorClass":"ServiceInitializationError","httpStatus":null,"severity":"critical","filePath":"python/semantic_kernel/connectors/ai/open_ai/services/open_ai_config_base.py","lineNumber":67,"sourceCode":"                unless the account belongs to multiple organizations.\n            service_id (str): OpenAI service ID. This is optional.\n            default_headers (Mapping[str, str]): Default headers\n                for HTTP requests. (Optional)\n            client (AsyncOpenAI): An existing OpenAI client, optional.\n            instruction_role (str): The role to use for 'instruction'\n                messages, for example, summarization prompts could use `developer` or `system`. (Optional)\n            kwargs: Additional keyword arguments.\n\n        \"\"\"\n        # Merge APP_INFO into the headers if it exists\n        merged_headers = dict(copy(default_headers)) if default_headers else {}\n        if APP_INFO:\n            merged_headers.update(APP_INFO)\n            merged_headers = prepend_semantic_kernel_to_user_agent(merged_headers)\n\n        if not client:\n            if not api_key:\n                raise ServiceInitializationError(\"Please provide an api_key\")\n            client = AsyncOpenAI(\n                api_key=api_key,\n                organization=org_id,\n                default_headers=merged_headers,\n            )\n        args = {\n            \"ai_model_id\": ai_model_id,\n            \"client\": client,\n            \"ai_model_type\": ai_model_type,\n        }\n        if service_id:\n            args[\"service_id\"] = service_id\n        if instruction_role:\n            args[\"instruction_role\"] = instruction_role\n        super().__init__(**args, **kwargs)\n\n    def to_dict(self) -> dict[str, str]:\n        \"\"\"Create a dict of the service settings.\"\"\"","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/ai/open_ai/services/open_ai_config_base.py#L49-L85","documentation":"Raised in OpenAIConfigBase when no pre-configured AsyncOpenAI client is supplied AND no api_key can be resolved. The base config logic merges default headers, then constructs a new AsyncOpenAI client — but it refuses to create one without authentication.","triggerScenarios":"Instantiating any OpenAI service (chat, text, embedding, realtime, etc.) that inherits OpenAIConfigBase without passing either client or api_key, and without OPENAI_API_KEY set in the environment or .env file.","commonSituations":"Deploying to CI/CD where the OPENAI_API_KEY secret is not injected; .env file present but key name is misspelled (e.g., OPENAI_KEY instead of OPENAI_API_KEY); local development where the .env is git-ignored and not created.","solutions":["Set the OPENAI_API_KEY environment variable or add it to your .env file","Pass api_key explicitly: OpenAIChatCompletion(api_key='sk-...')","Pass a pre-configured AsyncOpenAI client via the client= parameter if you manage your own client lifecycle"],"exampleFix":"# before\nservice = OpenAIChatCompletion(ai_model_id='gpt-4o')\n# after\nservice = OpenAIChatCompletion(ai_model_id='gpt-4o', api_key=os.environ['OPENAI_API_KEY'])","handlingStrategy":"validation","validationCode":"import os\nif not os.environ.get('OPENAI_API_KEY'):\n    raise EnvironmentError('OPENAI_API_KEY is not set in the environment or .env file')","typeGuard":null,"tryCatchPattern":"from semantic_kernel.exceptions.service_exceptions import ServiceInitializationError\n\ntry:\n    service = OpenAIChatCompletion(ai_model_id='gpt-4o')\nexcept ServiceInitializationError as e:\n    if 'api_key' in str(e):\n        raise  # surface as a deployment-config issue","preventionTips":["Validate required environment variables at application startup before constructing any service","Use python-dotenv to load .env early in your bootstrap code"],"tags":["openai","configuration","api-key","authentication"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}