diff --git a/src/libcamera/ipa_context_wrapper.cpp b/src/libcamera/ipa_context_wrapper.cpp
index 736082e9b068..b178418eb9b8 100644
--- a/src/libcamera/ipa_context_wrapper.cpp
+++ b/src/libcamera/ipa_context_wrapper.cpp
@@ -9,6 +9,8 @@

 #include <libcamera/controls.h>

+#include "utils.h"
+
 /**
  * \file ipa_context_wrapper.h
  * \brief Image Processing Algorithm context wrapper
@@ -41,7 +43,13 @@ namespace libcamera {
 IPAContextWrapper::IPAContextWrapper(struct ipa_context *context)
 	: ctx_(context)
 {
-	if (ctx_ && ctx_->ops->get_interface) {
+	int skipIntf = 0;
+	const char *skipIntfEnv =
+			utils::secure_getenv("LIBCAMERA_IPA_FORCE_C_API");
+	if (skipIntfEnv)
+		skipIntf = !!atoi(skipIntfEnv);
+
+	if (!skipIntf && ctx_ && ctx_->ops->get_interface) {
 		intf_ = reinterpret_cast<IPAInterface *>(ctx_->ops->get_interface(ctx_));
 		intf_->queueFrameAction.connect(this, &IPAContextWrapper::queueFrameAction);
 	} else {
