I would say that calling these "C APIs" is a bit misleading, as they have to call `new` for these helper types to be useful. I would call these legacy C++ APIs, although I have recently seen new APIs written with this horribly awful `void foo(T* out_param_for_owning_ptr)` interface.
Interfacing with these with a smart pointer without a helper type is kind of inconvenient, since then you need to do something like:
T* raw_owning_ptr;
foo(&raw_owning_ptr);
std::unique_ptr<T> ptr(raw_owning_ptr);
`out_ptr` and friends are a bit niche, just for interfacing with these kinds of APIs.