At the moment there is no dedicated API to do so. We're working on a rewrite of the "versions" plugin where adding/removing new versions after attaching would be part of the API.
For now you can do something like this (e.g. we have a Photo model with an "image" attachment):
# generate a cropped file using an operation
cropped_file = photo.image[:original].download do |file|
Cropper.call(file, **crop_params)
end
# upload the cropped file, passing crop params into metadata for safe keeping
cropped_uploaded_file = photo.image_attacher.store!(cropped, metadata: crop_params)
# add the cropped to the versions hash
versions = photo.image
versions[:cropped] = cropped_uploaded_file
# update the attachment column with the updated versions hash
photo.update(image_data: versions.to_json)