diff --git a/inc/API.php b/inc/API.php
index 8ecfdd1..1eac89f 100644
--- a/inc/API.php
+++ b/inc/API.php
@@ -145,7 +145,22 @@
 
       case 'getCurrentClasses':
         self::checkRequestMethod('GET');
-        $classes = Classes::getCurrentClasses();
+        $classes = Classes::getClasses();
+        if ($classes === false)
+          self::returnError();
+        else
+          self::returnPayload([
+            'classes' => $classes
+          ]);
+        break;
+
+      case 'getClassesInTime':
+        self::checkRequestMethod('GET');
+        if (!$parts[1]) self::returnError("You must provide a unix time");
+        $unix_time = filter_var($parts[1], FILTER_VALIDATE_INT);
+        if (!$unix_time) self::returnError("Received parameter is not an integer");
+
+        $classes = Classes::getClasses($unix_time);
         if ($classes === false)
           self::returnError();
         else
diff --git a/inc/Classes.php b/inc/Classes.php
index 6bfa0c8..c1ee0b3 100644
--- a/inc/Classes.php
+++ b/inc/Classes.php
@@ -4,17 +4,22 @@
 class Classes {
   // Marge en segons per seguir retornant una assignatura abans o després que
   // acabi, quan s'obtenen les classes actuals.
-  const MARGIN_BEGINS = 5*60;
-  const MARGIN_ENDS = 5*60;
+  const CURRENT_MARGIN_BEGINS = 5*60;
+  const CURRENT_MARGIN_ENDS = 5*60;
 
-  public static function getCurrentClasses() {
+  const INTIME_MARGIN_BEGINS = 0*60;
+  const INTIME_MARGIN_ENDS = 0*60;
+
+
+  public static function getClasses(int $unix_time = NULL) {
     global $con;
 
     $isSignedIn = Users::isSignedIn();
 
-    $sentence = 'SELECT c.id, c.calendar_name, c.room, c.begins, c.ends, c.calendar_name, s.id subject_id, s.friendly_name'.($isSignedIn ? ', u_s.id user_subject_id' : '').',
+    $sentence = 'SELECT c.id, c.calendar_name, c.room, c.begins, c.ends, c.calendar_name, s.id subject_id, s.friendly_name
+      '.($isSignedIn ? ', u_s.id user_subject_id' : '').',
           CASE
-            WHEN c.begins > UNIX_TIMESTAMP() OR c.ends < UNIX_TIMESTAMP()
+            WHEN c.begins > :unix_time OR c.ends < :unix_time
               THEN 0
               ELSE 1
           END is_current
@@ -25,8 +30,8 @@
           ON s.id = u_s.subject_id
         ' : '').
         'WHERE
-          c.begins - '.self::MARGIN_BEGINS.' <= UNIX_TIMESTAMP() AND
-          c.ends + '.self::MARGIN_ENDS.' >= UNIX_TIMESTAMP()'.($isSignedIn ? ' AND
+          c.begins - '.($unix_time ? self::CURRENT_MARGIN_BEGINS : self::INTIME_MARGIN_BEGINS).' <= :unix_time AND
+          c.ends + '.($unix_time ? self::CURRENT_MARGIN_ENDS: self::INTIME_MARGIN_ENDS).' >= :unix_time'.($isSignedIn ? ' AND
           (
             u_s.user_id = :user_id OR
             u_s.subject_id IS NULL
@@ -37,10 +42,13 @@
           '.($isSignedIn ? 'u_s.subject_id IS NULL,
           ' : '').'s.friendly_name ASC';
     $query = $con->prepare($sentence);
-    
-    if (!$query->execute(($isSignedIn ? ['user_id' => Users::getUserId()] : [])))
-      return false;
 
+    if (!$unix_time) $unix_time = time();
+
+    $query_params = ['unix_time' => $unix_time];
+    if ($isSignedIn) $query_params['user_id'] = Users::getUserId();
+
+    if (!$query->execute($query_params)) return false;
     $classes = $query->fetchAll(\PDO::FETCH_ASSOC);
 
     foreach ($classes as &$class) {
