{"record":{"id":"f508362f05e56f9f","repo":"musistudio/claude-code-router","slug":"credentialissue-message","errorCode":null,"errorMessage":"${credentialIssue.message}","messagePattern":"\\$\\{credentialIssue\\.message\\}","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/src/config/config.ts","lineNumber":580,"sourceCode":"    const baseUrl = providerBaseUrl(provider);\n    const issue = providerApiKeySafetyIssue({\n      apiKey,\n      baseUrl,\n      name: provider.name\n    });\n    if (issue) {\n      throw new Error(issue.message);\n    }\n    assertProviderAccountApiKeyTargetsAreSafe(provider, apiKey, baseUrl);\n    for (const credential of provider.credentials ?? []) {\n      const credentialApiKey = providerCredentialApiKey(credential);\n      const credentialIssue = providerApiKeySafetyIssue({\n        apiKey: credentialApiKey,\n        baseUrl,\n        name: provider.name\n      });\n      if (credentialIssue) {\n        throw new Error(credentialIssue.message);\n      }\n      assertProviderCredentialAccountApiKeyTargetsAreSafe(provider, credential, credentialApiKey, baseUrl);\n    }\n  }\n}\n\nfunction assertProviderAccountApiKeyTargetsAreSafe(provider: GatewayProviderConfig, apiKey: string, baseUrl: string): void {\n  if (!apiKey || provider.account?.enabled === false) {\n    return;\n  }\n\n  const presetId = findProviderPresetByBaseUrl(baseUrl)?.id;\n  for (const connector of provider.account?.connectors ?? []) {\n    const endpoints = providerAccountConnectorApiKeyEndpoints(connector);\n    for (const endpoint of endpoints) {\n      const issue = providerEndpointCanReceiveProviderApiKey({\n        apiKey,\n        endpoint,","sourceCodeStart":562,"sourceCodeEnd":598,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/core/src/config/config.ts#L562-L598","documentation":"Same safety check as error 95 but for a per-credential entry inside provider.credentials; providerCredentialApiKey + safety issue message is thrown.","triggerScenarios":"A provider with multiple credentials where one credential's key/target fails providerApiKeySafetyIssue during config save.","commonSituations":"Multi-account setups where one account's key belongs to a different service than the baseUrl.","solutions":["Inspect issue.message to identify the offending credential.","Fix or delete that credential entry in provider.credentials.","Re-validate keys against the provider's actual endpoint."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for (const c of provider.credentials ?? []) {\n  if (providerApiKeySafetyIssue({ apiKey: providerCredentialApiKey(c), baseUrl, name: provider.name })) flag(c);\n}","typeGuard":"function credentialKeyIsSafe(cred: unknown, baseUrl: string): boolean {\n  return !providerApiKeySafetyIssue({ apiKey: providerCredentialApiKey(cred), baseUrl, name: 'x' });\n}","tryCatchPattern":"catch (e) { highlightFailingCredential(e); }","preventionTips":["Validate each credential before multi-account save.","Avoid copying keys across providers."],"tags":["config","api-key","credentials","safety"],"backgroundTag":"config-validation-failed","analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}