     }
     
     /// Fetch a list of objects from the API.
-    internal func fetchMany
-        <Resource: ResourceType>
-        (_ request: Request<[Resource]>, page: UInt?, pageSize: UInt?) -> SignalProducer<(Response, [Resource]), Error> where Resource.DecodedType == Resource
-    {
+    internal func execute<Resource: ResourceType>(
+        _ request: Request<[Resource]>,
+        page: UInt?,
+        pageSize: UInt?
+    ) -> SignalProducer<(Response, [Resource]), Error> where Resource.DecodedType == Resource {
         let nextPage = (page ?? 1) + 1
-        return fetch(request, page: page, pageSize: pageSize)
-            .attemptMap { response, JSON in
-                return decode(JSON)
+        return execute(request, page: page, pageSize: pageSize)
+            .attemptMap { (response: Response, json: Any) in
+                return decode(json)
                     .map { resource in
                         (response, resource)
                     }
                     .mapError(Error.jsonDecodingError)
             }
-            .flatMap(.concat) { response, JSON -> SignalProducer<(Response, [Resource]), Error> in
-                return SignalProducer(value: (response, JSON))
-                    .concat(response.links["next"] == nil ? SignalProducer.empty : self.fetchMany(request, page: nextPage, pageSize: pageSize))
+            .flatMap(.concat) { response, json -> SignalProducer<(Response, [Resource]), Error> in
+                return SignalProducer(value: (response, json))
+                    .concat(response.links["next"] == nil ? SignalProducer.empty : self.execute(request, page: nextPage, pageSize: pageSize))
             }
-    }
-
-    internal func send
-        <Resource: ResourceType>
-        (_ request: Request<Resource>) -> SignalProducer<(Response, Resource), Error> where Resource.DecodedType == Resource
-    {
-        let urlRequest = URLRequest.create(URL(server, request), request.body, request.method, credentials)
-
-        return fetch(urlRequest)
-            .attemptMap { response, JSON in
-                return decode(JSON)
-                    .map { resource in
-                        (response, resource)
-                    }
-                    .mapError(Error.jsonDecodingError)
-        }
     }
 }
 

    ///
    /// https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository
    public func releases(in repository: Repository, page: UInt = 1, perPage: UInt = 30) -> SignalProducer<(Response, [Release]), Error> {
        return fetchMany(repository.releases, page: page, pageSize: perPage)
    }
    
    /// Fetch the release corresponding to the given tag in the given repository.

    }
    
    /// Fetch an object from the API.
    internal func execute<Resource: ResourceType>(
        _ request: Request<Resource>
    ) -> SignalProducer<(Response, Resource), Error> where Resource.DecodedType == Resource {
        return execute(request, page: nil, pageSize: nil)
            .attemptMap { response, JSON in
                return decode(JSON)
                    .map { resource in
