{"record":{"id":"e62867eeb652d9ec","repo":"quarkusio/quarkus","slug":"unable-to-determine-the-proper-baseurl-baseuri-co","errorCode":null,"errorMessage":"Unable to determine the proper baseUrl/baseUri. Consider registering using @RegisterRestClient(baseUri=\"someuri\"), @RegisterRestClient(configKey=\"orkey\"), or by adding '${quarkus.config.rest.url.format}' or '${quarkus.config.rest.uri.format}' to your Quarkus configuration","messagePattern":"Unable to determine the proper baseUrl/baseUri\\. Consider registering using @RegisterRestClient\\(baseUri=\"someuri\"\\), @RegisterRestClient\\(configKey=\"orkey\"\\), or by adding '(.+?)' or '(.+?)' to your Quarkus configuration","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/resteasy-classic/resteasy-client/runtime/src/main/java/io/quarkus/restclient/runtime/RestClientBase.java","lineNumber":286,"sourceCode":"    }\n\n    protected void configureTimeouts(RestClientBuilder builder) {\n        Long connectTimeout = restClientConfig.connectTimeout().orElse(this.configRoot.connectTimeout());\n        if (connectTimeout != null) {\n            builder.connectTimeout(connectTimeout, TimeUnit.MILLISECONDS);\n        }\n\n        Long readTimeout = restClientConfig.readTimeout().orElse(this.configRoot.readTimeout());\n        if (readTimeout != null) {\n            builder.readTimeout(readTimeout, TimeUnit.MILLISECONDS);\n        }\n    }\n\n    protected void configureBaseUrl(RestClientBuilder builder) {\n        Optional<String> baseUrlOptional = oneOf(restClientConfig.uriReload(), restClientConfig.urlReload());\n        if (((baseUriFromAnnotation == null) || baseUriFromAnnotation.isEmpty()) && baseUrlOptional.isEmpty()) {\n            String propertyPrefix = configKey != null ? configKey : proxyType.getName();\n            throw new IllegalArgumentException(\n                    String.format(\n                            \"Unable to determine the proper baseUrl/baseUri. \" +\n                                    \"Consider registering using @RegisterRestClient(baseUri=\\\"someuri\\\"), @RegisterRestClient(configKey=\\\"orkey\\\"), \"\n                                    +\n                                    \"or by adding '%s' or '%s' to your Quarkus configuration\",\n                            String.format(QUARKUS_CONFIG_REST_URL_FORMAT, propertyPrefix),\n                            String.format(QUARKUS_CONFIG_REST_URI_FORMAT, propertyPrefix)));\n        }\n        String baseUrl = baseUrlOptional.orElse(baseUriFromAnnotation);\n\n        try {\n            builder.baseUrl(new URL(baseUrl));\n        } catch (MalformedURLException e) {\n            if (e.getMessage().contains(\n                    \"It must be enabled by adding the --enable-url-protocols=https option to the native-image command\")) {\n                throw new IllegalArgumentException(baseUrl\n                        + \" requires SSL support but it is disabled. You probably have set quarkus.ssl.native to false.\");\n            }","sourceCodeStart":268,"sourceCodeEnd":304,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/resteasy-classic/resteasy-client/runtime/src/main/java/io/quarkus/restclient/runtime/RestClientBase.java#L268-L304","documentation":"configureBaseUrl() refuses to build the client when it cannot determine the target URL: neither @RegisterRestClient(baseUri/url) nor any config property supplied one. Quarkus requires an explicit base URI/URL for every MicroProfile REST client and fails fast with guidance listing the exact property name expected for the configKey or interface name.","triggerScenarios":"The interface has no baseUri in @RegisterRestClient and no quarkus.rest-client.<key>.url / .uri (or <configKey>.url/.uri, or the MP-style <FQCN>/mp-rest/url) property is set for either the proxy type name or the configKey.","commonSituations":"Property written under the wrong prefix (interface name changed, configKey typo); property defined only in an inactive profile (e.g. %prod); env-var mapping mismatch (QUARKUS_REST_CLIENT_<KEY>_URL not resolvable); @RegisterRestClient configKey set but config uses the plain class name.","solutions":["Add quarkus.rest-client.<key>.url=https://host (where <key> is the configKey or FQCN of the interface)","Or set baseUri on the annotation: @RegisterRestClient(baseUri = \"https://api.example.com\")","Check the active profile — put the property in application.properties, not just application-<inactive-profile>.properties","Verify env var mapping in containers and ensure no profile qualifier suppresses the property"],"exampleFix":"// before (application.properties)\n# quarkus.rest-client.weather-client.url missing\n// after\n// @RegisterRestClient(configKey = \"weather-client\")\nquarkus.rest-client.weather-client.url=https://api.weather.example.com","handlingStrategy":"validation","validationCode":"// assert a base URL is resolvable for each client before use\nConfig cfg = ConfigProvider.getConfig();\nString url = cfg.getOptionalValue(\"quarkus.rest-client.my-client.url\", String.class)\n    .or(() -> cfg.getOptionalValue(\"my-client/mp-rest/url\", String.class))\n    .orElseThrow(() -> new IllegalStateException(\"No base URL configured for my-client\"));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set @RegisterRestClient(baseUri=...) as a safe default and override via config per environment","Standardize one config-key naming convention across projects","Include client URL properties in deployment config templates for every profile","Add a startup health check that resolves all client URLs"],"tags":["configuration","rest-client","url","microprofile"],"backgroundTag":"missing-base-url","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}