     }
 
     public func GET(path: String, parameters: [String:String]? = nil,
-        headers: [String:String]? = nil, completion: (Result<HTTPResponse, BothamAPIClientError>) -> ()) {
+        headers: [String:String]? = nil, completion: ((Result<HTTPResponse, BothamAPIClientError>) -> ())? = nil) {
         return sendRequest(.GET, path: path, params: parameters, headers: headers, completion: completion)
     }
 
     public func POST(path: String, parameters: [String:String]? = nil,
         headers: [String:String]? = nil,
         body: [String: AnyObject]? = nil,
-        completion: (Result<HTTPResponse, BothamAPIClientError>) -> ()) {
+        completion: ((Result<HTTPResponse, BothamAPIClientError>) -> ())? = nil) {
         return sendRequest(.POST, path: path, params: parameters, headers: headers,
             body: body, completion: completion)
     }

    public func PATCH(path: String, parameters: [String:String]? = nil,
        headers: [String:String]? = nil,
        body: [String: AnyObject]? = nil,
        completion: (Result<HTTPResponse, BothamAPIClientError>) -> ()) {
        return sendRequest(.PATCH, path: path, params: parameters, headers: headers,
                body: body, completion: completion)
    }

                            body: body,
                            completion: completion)
                    } else {
                        completion?(result)
                    }
                }
            }
    }

    private func sendRequest(request: HTTPRequest, completion: ((Result<HTTPResponse, BothamAPIClientError>) -> ())? = nil) {
        httpClient.send(request) { result in
            if let _ = result.error {
                completion?(result)
            } else if let response = result.value {
                self.applyResponseInterceptors(response) { interceptorResult in
                    let mappedResult = interceptorResult.flatMap { httpResponse in
                        return self.mapHTTPResponseToBothamAPIClientError(httpResponse)
                    }
                    completion?(mappedResult)
                }
            }
        }
