{"record":{"id":"72dce5c177fb81c9","repo":"conductor-oss/conductor","slug":"azure-foundry-credential-credentialref-must-co","errorCode":null,"errorMessage":"Azure Foundry credential '{credentialRef}' must contain client_id, client_secret, and tenant_id","messagePattern":"Azure Foundry credential '(.+?)' must contain client_id, client_secret, and tenant_id","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/service/AzureFoundryAgentClient.java","lineNumber":335,"sourceCode":"            case \"failed\", \"expired\" -> ConductorAgentState.FAILED;\n            case \"cancelled\" -> ConductorAgentState.CANCELED;\n            case \"requires_action\" -> ConductorAgentState.WAITING;\n            default -> ConductorAgentState.RUNNING; // queued, in_progress\n        };\n    }\n\n    private OAuthTokenProvider buildTokenProvider(ConductorAgentStartRequest request) {\n        String credentialRef = request.getCredentialRef();\n        if (StringUtils.isBlank(credentialRef)) {\n            throw new IllegalArgumentException(\n                    \"credentialRef is required for Azure Foundry agent requests\");\n        }\n        String clientId = credentialResolutionService.resolve(credentialRef + \".client_id\");\n        String clientSecret = credentialResolutionService.resolve(credentialRef + \".client_secret\");\n        String tenantId = credentialResolutionService.resolve(credentialRef + \".tenant_id\");\n\n        if (StringUtils.isAnyBlank(clientId, clientSecret, tenantId)) {\n            throw new IllegalStateException(\n                    \"Azure Foundry credential '\"\n                            + credentialRef\n                            + \"' must contain client_id, client_secret, and tenant_id\");\n        }\n\n        String scope =\n                StringUtils.defaultIfBlank(\n                        rawConfig(request, \"scope\"),\n                        credentialResolutionService.resolve(credentialRef + \".scope\"));\n        scope = StringUtils.defaultIfBlank(scope, DEFAULT_SCOPE);\n\n        return OAuthTokenProvider.forAzureEntraId(\n                httpClient, tenantId, clientId, clientSecret, scope);\n    }\n\n    private String resolveEndpoint(ConductorAgentStartRequest request) {\n        String endpoint = rawConfig(request, \"endpoint\");\n        if (StringUtils.isBlank(endpoint)) {","sourceCodeStart":317,"sourceCodeEnd":353,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/service/AzureFoundryAgentClient.java#L317-L353","documentation":"Error \"Azure Foundry credential '{credentialRef}' must contain client_id, client_secret, and tenant_id\" thrown in conductor-oss/conductor.","triggerScenarios":"Thrown at agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/service/AzureFoundryAgentClient.java:335 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Update the referenced credential to include client_id, client_secret, and tenant_id fields for the Azure Foundry service principal."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}