Index: src/main/java/org/gbif/api/model/metrics/cube/OccurrenceCube.java
===================================================================
--- src/main/java/org/gbif/api/model/metrics/cube/OccurrenceCube.java	(revision 1096)
+++ src/main/java/org/gbif/api/model/metrics/cube/OccurrenceCube.java	(working copy)
@@ -26,15 +26,15 @@
  */
 public class OccurrenceCube {
 
-  public static final Dimension<Kingdom> KINGDOM = new Dimension<Kingdom>("kingdom");
-  public static final Dimension<Country> COUNTRY = new Dimension<Country>("country");
-  public static final Dimension<Integer> YEAR = new Dimension<Integer>("year");
-  public static final Dimension<Boolean> IS_GEOREFERENCED = new Dimension<Boolean>("georeferenced");
-  public static final Dimension<BasisOfRecord> BASIS_OF_RECORD = new Dimension<BasisOfRecord>("basisOfRecord");
-  public static final Dimension<Country> HOST_COUNTRY = new Dimension<Country>("hostCountry");
-  public static final Dimension<UUID> DATASET_KEY = new Dimension<UUID>("datasetKey");
-  public static final Dimension<Integer> MONTH = new Dimension<Integer>("month");
-  public static final Dimension<Integer> NUB_KEY = new Dimension<Integer>("nubKey");
+  public static final Dimension<Kingdom> KINGDOM = new Dimension<Kingdom>("kingdom", Kingdom.class);
+  public static final Dimension<Country> COUNTRY = new Dimension<Country>("country", Country.class);
+  public static final Dimension<Integer> YEAR = new Dimension<Integer>("year", Integer.class);
+  public static final Dimension<Boolean> IS_GEOREFERENCED = new Dimension<Boolean>("georeferenced", Boolean.class);
+  public static final Dimension<BasisOfRecord> BASIS_OF_RECORD = new Dimension<BasisOfRecord>("basisOfRecord", BasisOfRecord.class);
+  public static final Dimension<Country> HOST_COUNTRY = new Dimension<Country>("hostCountry", Country.class);
+  public static final Dimension<UUID> DATASET_KEY = new Dimension<UUID>("datasetKey", UUID.class);
+  public static final Dimension<Integer> MONTH = new Dimension<Integer>("month", Integer.class);
+  public static final Dimension<Integer> NUB_KEY = new Dimension<Integer>("nubKey", Integer.class);
 
 
   public static final List<Rollup> ROLLUPS = ImmutableList.of(
Index: src/main/java/org/gbif/api/model/metrics/cube/Dimension.java
===================================================================
--- src/main/java/org/gbif/api/model/metrics/cube/Dimension.java	(revision 1096)
+++ src/main/java/org/gbif/api/model/metrics/cube/Dimension.java	(working copy)
@@ -23,14 +23,17 @@
 public class Dimension<T> {
 
   private final String key;
+  private final Class<T> type;
 
   /**
    * Force the provision of the key in construction, which should be unique for the cube.
    * 
    * @param key Which is used in the HTTP parameters
+   * @param type For the dimension, stored to enable runtime checking where required
    */
-  public Dimension(String key) {
+  public Dimension(String key, Class<T> type) {
     this.key = key;
+    this.type = type;
   }
 
   @Override
@@ -55,6 +58,12 @@
     return key;
   }
 
+  /**
+   * @return The type of the dimension
+   */
+  public Class<T> getType() {
+    return type;
+  }
 
   @Override
   public int hashCode() {
Index: src/test/java/org/gbif/api/model/metrics/cube/ReadBuilderTest.java
===================================================================
--- src/test/java/org/gbif/api/model/metrics/cube/ReadBuilderTest.java	(revision 1096)
+++ src/test/java/org/gbif/api/model/metrics/cube/ReadBuilderTest.java	(working copy)
@@ -17,49 +17,49 @@
   private static final class BooleanDimension extends Dimension<Boolean> {
 
     public BooleanDimension() {
-      super("boolean");
+      super("boolean", Boolean.class);
     }
   }
 
   private static final class DoubleDimension extends Dimension<Double> {
 
     public DoubleDimension() {
-      super("double");
+      super("double", Double.class);
     }
   }
 
   private static final class EnumDimension extends Dimension<Kingdom> {
 
     public EnumDimension() {
-      super("enum");
+      super("enum", Kingdom.class);
     }
   }
 
   private static final class FloatDimension extends Dimension<Float> {
 
     public FloatDimension() {
-      super("float");
+      super("float", Float.class);
     }
   }
 
   private static final class IntDimension extends Dimension<Integer> {
 
     public IntDimension() {
-      super("int");
+      super("int", Integer.class);
     }
   }
 
   private static final class StringDimension extends Dimension<String> {
 
     public StringDimension() {
-      super("string");
+      super("string", String.class);
     }
   }
 
   private static final class UUIDDimension extends Dimension<UUID> {
 
     public UUIDDimension() {
-      super("uuid");
+      super("uuid", UUID.class);
     }
   }
 
