diff --git a/products/feature-flagging/feature-flagging-api/README.md b/products/feature-flagging/feature-flagging-api/README.md
new file mode 100644
index 00000000000..5d1beece1ca
--- /dev/null
+++ b/products/feature-flagging/feature-flagging-api/README.md
@@ -0,0 +1,79 @@
+# dd-openfeature
+
+Datadog OpenFeature Provider for Java. Implements the [OpenFeature](https://openfeature.dev/) `FeatureProvider` interface for Datadog's Feature Flags and Experimentation (FFE) product.
+
+Published as `com.datadoghq:dd-openfeature` on Maven Central.
+
+## Setup
+
+```xml
+
+ com.datadoghq
+ dd-openfeature
+ ${dd-openfeature.version}
+
+```
+
+The OpenFeature SDK (`dev.openfeature:sdk`) is included as a transitive dependency.
+
+### Evaluation metrics (optional)
+
+To enable evaluation metrics (`feature_flag.evaluations` counter), add the OpenTelemetry SDK dependencies:
+
+```xml
+
+ io.opentelemetry
+ opentelemetry-sdk-metrics
+ 1.47.0
+
+
+ io.opentelemetry
+ opentelemetry-exporter-otlp
+ 1.47.0
+
+```
+
+Any OpenTelemetry API 1.x version is compatible. If these dependencies are absent, the provider operates normally without metrics.
+
+## Usage
+
+```java
+import datadog.trace.api.openfeature.Provider;
+import dev.openfeature.sdk.OpenFeatureAPI;
+import dev.openfeature.sdk.Client;
+
+OpenFeatureAPI api = OpenFeatureAPI.getInstance();
+api.setProviderAndWait(new Provider());
+Client client = api.getClient();
+
+boolean enabled = client.getBooleanValue("my-feature", false,
+ new MutableContext("user-123"));
+```
+
+## Evaluation metrics
+
+When the OTel SDK dependencies are on the classpath, the provider records a `feature_flag.evaluations` counter via OTLP HTTP/protobuf. Metrics are exported every 10 seconds to the Datadog Agent's OTLP receiver.
+
+### Configuration
+
+| Environment variable | Description | Default |
+|---|---|---|
+| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | Signal-specific OTLP endpoint (used as-is) | — |
+| `OTEL_EXPORTER_OTLP_ENDPOINT` | Generic OTLP endpoint (`/v1/metrics` appended) | — |
+| (none set) | Default endpoint | `http://localhost:4318/v1/metrics` |
+
+### Metric attributes
+
+| Attribute | Description |
+|---|---|
+| `feature_flag.key` | Flag key |
+| `feature_flag.result.variant` | Resolved variant key |
+| `feature_flag.result.reason` | Evaluation reason (lowercased) |
+| `error.type` | Error code (lowercased, only on error) |
+| `feature_flag.result.allocation_key` | Allocation key (when present) |
+
+## Requirements
+
+- Java 11+
+- Datadog Agent with Remote Configuration enabled
+- `DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true`
diff --git a/products/feature-flagging/feature-flagging-api/build.gradle.kts b/products/feature-flagging/feature-flagging-api/build.gradle.kts
index df475db801a..3999633bd1e 100644
--- a/products/feature-flagging/feature-flagging-api/build.gradle.kts
+++ b/products/feature-flagging/feature-flagging-api/build.gradle.kts
@@ -44,8 +44,15 @@ dependencies {
api("dev.openfeature:sdk:1.20.1")
compileOnly(project(":products:feature-flagging:feature-flagging-bootstrap"))
+ compileOnly(project(":utils:config-utils"))
+ compileOnly("io.opentelemetry:opentelemetry-api:1.47.0")
+ compileOnly("io.opentelemetry:opentelemetry-sdk-metrics:1.47.0")
+ compileOnly("io.opentelemetry:opentelemetry-exporter-otlp:1.47.0")
testImplementation(project(":products:feature-flagging:feature-flagging-bootstrap"))
+ testImplementation("io.opentelemetry:opentelemetry-api:1.47.0")
+ testImplementation("io.opentelemetry:opentelemetry-sdk-metrics:1.47.0")
+ testImplementation("io.opentelemetry:opentelemetry-exporter-otlp:1.47.0")
testImplementation(libs.bundles.junit5)
testImplementation(libs.bundles.mockito)
testImplementation(libs.moshi)
diff --git a/products/feature-flagging/feature-flagging-api/src/main/java/datadog/trace/api/openfeature/FlagEvalHook.java b/products/feature-flagging/feature-flagging-api/src/main/java/datadog/trace/api/openfeature/FlagEvalHook.java
new file mode 100644
index 00000000000..1132602a53f
--- /dev/null
+++ b/products/feature-flagging/feature-flagging-api/src/main/java/datadog/trace/api/openfeature/FlagEvalHook.java
@@ -0,0 +1,41 @@
+package datadog.trace.api.openfeature;
+
+import dev.openfeature.sdk.ErrorCode;
+import dev.openfeature.sdk.FlagEvaluationDetails;
+import dev.openfeature.sdk.Hook;
+import dev.openfeature.sdk.HookContext;
+import dev.openfeature.sdk.ImmutableMetadata;
+import java.util.Map;
+
+class FlagEvalHook implements Hook