Index: coalroller_service/coalroller_service/controllers/main.py
===================================================================
--- /dev/null
+++ coalroller_service/coalroller_service/controllers/main.py
@@ -0,0 +1,29 @@
+import time
+
+from passlib import pwd, hash
+
+from odoo import http
+from odoo.addons.iap import charge
+
+class CoalBurnerController(http.Controller):
+    @http.route('/roll', type='json', auth='none', csrf='false')
+    def roll(self, account_token):
+        # the service key *is a secret*, it should not be committed in
+        # the source
+        service_key = self.env['ir.config_parameter'].sudo().get_param('coalroller.service_key')
+
+        # we charge 1 credit for 10 seconds of CPU
+        cost = 1
+        # TODO: allow the user to specify how many (tens of seconds) of CPU they want to use
+        with charge(http.request.env, service_key, account_token, cost):
+
+            # 10 seconds of CPU per credit
+            end = time.time() + (10 * cost)
+            while time.time() < end:
+                # we will use CPU doing useful things: generating and
+                # hashing passphrases
+                p = pwd.genphrase()
+                h = hash.pbkdf2_sha512.hash(p)
+        # here we don't have anything useful to the client, an error
+        # will be raised & transmitted in case of issue, if no error
+        # is raised we did the job
Index: coalroller_service/coalroller_service/controllers/__init__.py
===================================================================
--- /dev/null
+++ coalroller_service/coalroller_service/controllers/__init__.py
@@ -0,0 +1,2 @@
+# -*- encoding: utf-8 -*-
+from . import main
Index: coalroller_service/coalroller_service/__init__.py
===================================================================
--- coalroller_service.orig/coalroller_service/__init__.py
+++ coalroller_service/coalroller_service/__init__.py
@@ -1 +1,2 @@
 # -*- encoding: utf-8 -*-
+from . import controllers
