At the moment there is no documented API, that doesn't stop us though. I would recommend using the @wext/shipit
package, which is a command line utility to upload extensions to different providers. It currently supports Chrome WebStore, Mozilla Add-ons (Firefox) and Opera Extensions.
https://github.com/LinusU/wext-shipit
It's a Node.js application, so you can install it with npm.
npm install --global @wext/shipit
Then you can issue this one command to zip a folder and upload it to addons.opera.com:
shipit opera my-extension
It will read credentials for the addons.opera.com site from the environment. Make sure that the following variables are populated:
# Email and password to log in with
WEXT_SHIPIT_OPERA_EMAIL
WEXT_SHIPIT_OPERA_PASSWORD
# ID of the extension to update
WEXT_SHIPIT_OPERA_EXTENSION_ID
If you are only interested in the submitting to Opera, that is handled by the following library:
https://github.com/LinusU/upload-opera-extension
full disclamer: I'm the author of both packages