When you use Put with a string as the location it just creates a regular file, not a CloudObject. What's happening is that viewing files with the cloud file manager is automatically generating the CloudObject metadata for those files. You'll want to change your code to either Put to a CloudObject explicitly, or preferably just use CloudPut:
obj = CloudDeploy[
APIFunction[{}
, CloudPut[$RequesterWolframID
, "testFiles/" <> DateString["ISODateTime"] <> ".txt"
] &
]
, "apiTest"
, Permissions -> "Public"
];
Also, there's no need to create the target directory when going directly to cloud objects, since it will be created automatically (as a CloudObject) if necessary.