     private let urlSession: URLSession
 
     /// Create an authenticated client for the given Server with a token.
-    public init(token: String, urlSession: URLSession = .shared) {
+    public init(token: String, teamName: String, urlSession: URLSession = .shared) {
         self.server = Server()
+        self.teamName = teamName
         self.credentials = .token(token)
         self.urlSession = urlSession
     }

    /// The Server that the Client connects to.
    public let server: Server

    /// Whether the Client is authenticated.
    public var authenticated: Bool {
        return credentials != nil

        return fetchMany(.teams, page: page, pageSize: pageSize)
    }

    public func team() -> SignalProducer<(Response, Team), Error> {
        return fetchOne(.team(teamName: teamName))
    }

    /// - Stats
    public func stats() -> SignalProducer<(Response, Stats), Error> {
        return fetchOne(.teamStats(teamName: teamName))
    }

    /// - Member
    public func members(page: UInt = 1, pageSize: UInt = 20) -> SignalProducer<(Response, Members), Error> {
        return fetchMany(.members(teamName: teamName), page: page, pageSize: pageSize)
    }

    /// - Post
    public func posts(page: UInt = 1, pageSize: UInt = 20) -> SignalProducer<(Response, Posts), Error> {
        return fetchMany(.posts(teamName: teamName), page: page, pageSize: pageSize)
    }

    public func post(postNumber: Int) -> SignalProducer<(Response, Post), Error> {
        return fetchOne(.post(teamName: teamName, postNumber: postNumber))
    }

    public func createPost(parameters: PostParameters) -> SignalProducer<(Response, Post), Error> {
        return fetchOne(.createPost(teamName: teamName, parameters: parameters))
    }

    public func updatePost(postNumber: Int, parameters: PostParameters) -> SignalProducer<(Response, Post), Error> {
        return fetchOne(.updatePost(teamName: teamName, postNumber: postNumber, parameters: parameters))
    }

    public func deletePost(postNumber: Int) -> SignalProducer<Response, Error> {
        return send(.deletePost(teamName: teamName, postNumber: postNumber))
    }

    /// - Comments
    public func comments(postNumber: Int, page: UInt = 1, pageSize: UInt = 20) -> SignalProducer<(Response, Comments), Error> {
        return fetchMany(.comments(teamName: teamName, postNumber: postNumber), page: page, pageSize: pageSize)
    }

    public func comment(commentId: Int) -> SignalProducer<(Response, Comment), Error> {
        return fetchOne(.comment(teamName: teamName, commentId: commentId))
    }

    public func createComment(postNumber: Int, bodyMd: String) -> SignalProducer<(Response, Comment), Error> {
        return fetchOne(.createComment(teamName: teamName, postNumber: postNumber, bodyMd: bodyMd))
    }

    public func updateComment(commentId: Int, bodyMd: String) -> SignalProducer<(Response, Comment), Error> {
        return fetchOne(.updateComment(teamName: teamName, commentId: commentId, bodyMd: bodyMd))
    }

    public func deleteCommet(commentId: Int) -> SignalProducer<Response, Error> {
        return send(.deleteComment(teamName: teamName, commentId: commentId))
    }

    /// - Star
    public func stargazers(postNumber: Int, page: UInt = 1, pageSize: UInt = 20) -> SignalProducer<(Response, Stargazers), Error> {
        return fetchMany(.stargazersInPost(teamName: teamName, postNumber: postNumber), page: page, pageSize: pageSize)
    }

    public func addStar(postNumber: Int, body: String = "") -> SignalProducer<Response, Error> {
        return send(.addStarInPost(teamName: teamName, postNumber: postNumber, body: body))
    }

    public func removeStar(postNumber: Int) -> SignalProducer<Response, Error> {
        return send(.removeStarInPost(teamName: teamName, postNumber: postNumber))
    }

    public func stargazers(commentId: Int, page: UInt = 1, pageSize: UInt = 20) -> SignalProducer<(Response, Stargazers), Error> {
        return fetchMany(.stargazersInComment(teamName: teamName, commentId: commentId), page: page, pageSize: pageSize)
    }

    public func addStar(commentId: Int, body: String = "") -> SignalProducer<Response, Error> {
        return send(.addStarInComment(teamName: teamName, commentId: commentId, body: body))
    }

    public func removeStar(commentId: Int) -> SignalProducer<Response, Error> {
        return send(.removeStarInComment(teamName: teamName, commentId: commentId))
    }

    /// - Watch
    public func watchers(postNumber: Int, page: UInt = 1, pageSize: UInt = 20) -> SignalProducer<(Response, Watchers), Error> {
        return fetchMany(.watchers(teamName: teamName, postNumber: postNumber), page: page, pageSize: pageSize)
    }

    public func addWatch(postNumber: Int) -> SignalProducer<Response, Error> {
        return send(.addWatch(teamName: teamName, postNumber: postNumber))
    }

    public func removeWatch(postNumber: Int) -> SignalProducer<Response, Error> {
        return send(.removeWatch(teamName: teamName, postNumber: postNumber))
    }

