Rendering video with custom data provided by user
The most sensible thing to do would be to host the service on your own. If you want users to input text, images and maybe even videos, you need a storage-unit which writes and reads these files incredibly quickly. An SSD-based server with a raid security would be appropriate. For the rendering: You could set up a standard After-Effects or Nuke Project. For After-Effects, you would need to do a lot of scripting to change the individual elements from your comp, but for Nuke, it should be easier, since Nuke is entirely in python and deals well with custom python-scripts. You'd then have to automate upon request that, first off, the Nuke-Script gets duplicated for the running instance, then replace the contents (text, images, etc.) accordingly, and render out. For rendering, I would recommend a GPU or CPU-based rendering-cluster with as many gpus or cpus as you need.
There probably are services that kind of do something similar, but they are either crazy expensive and not adjustable, or deviate from what you want to do.
Just don't expect this ordeal to be cheap and you won't run into bad surprises.