     request.start { (response, result) in
       switch result {
       case .success(let response):
-        if let deserialised = response.dictionaryValue {
-          if let data = deserialised["data"] as? [String:Any] {
-            if let url = data["url"] as? String {
-              completion(URL(string: url))
-            }
+        if let deserialised = JSON(response.dictionaryValue!) {
+          if let url = deserialised["data"]?["url"]?.stringValue {
+            completion(URL(string: url))
           }
         }
         break

    request.start { (response, result) in
      switch result {
      case .success(let response):
        if let deserialised = response.dictionaryValue {
          if let location = deserialised["location"] as? [String:Any] {
            completion(location["name"] as? String)
          }
        }
        break
      case .failed(let error):

    request.start { (response, result) in
      switch result {
      case .success(let response):
        if let deserialised = JSON(response.dictionaryValue!) {
          completion(deserialised["name"]?.stringValue)
        }
        break
      case .failed(let error):
