diff --git a/server/djrandom/frontend/api_views.py b/server/djrandom/frontend/api_views.py
index b8a8dbbb7bb47d3b9f73da88c8c5e3eee5dba7b3..460427472a0cddab870bc882f734e41655ea825b 100644
--- a/server/djrandom/frontend/api_views.py
+++ b/server/djrandom/frontend/api_views.py
@@ -165,11 +165,19 @@ def last_uploaded_json():
     return jsonify(results=last_uploaded)
 
 
-@app.route('/json/random', methods=['POST'])
+@app.route('/json/markov', methods=['POST'])
 @require_auth
-def random_json():
+def markov_json():
     n = int(request.form.get('n', 10))
     hashes = request.form.get('h', '').split(',')
     last_song = hashes[-1]
     sequence = svcs['markov'].generate_sequence(last_song, 2, n)
     return jsonify(results=sequence)
+
+
+@app.route('/json/random', methods=['GET'])
+@require_auth
+def random_json():
+    n = int(request.form.get('n', 10))
+    random_songs = [x.sha1 for x in MP3.get_random_songs(n)]
+    return jsonify(results=random_songs)
diff --git a/server/djrandom/model/mp3.py b/server/djrandom/model/mp3.py
index cb2c220243696195566e1879f2870a6a534d017d..662614e1400e9f2d7474bde120274e1d329ded86 100644
--- a/server/djrandom/model/mp3.py
+++ b/server/djrandom/model/mp3.py
@@ -42,6 +42,17 @@ class MP3(Base):
         return cls.query.filter_by(ready=True).order_by(
             desc(cls.uploaded_at)).limit(n)
 
+    @classmethod
+    def get_random_songs(cls, n=10):
+        """Return N completely random songs."""
+        results = []
+        num_songs = cls.query.filter_by(ready=True).count()
+        for idx in xrange(n):
+            song = cls.query.filter_by(ready=True).limit(1).offset(
+                random.randint(num_songs)).one()
+            results.append(song)
+        return results
+
 
 class PlayLog(Base):