public function getSubscription($name = null, $beginDateTime = null, $endDateTime = null, $fileName = null, $bookmark = null)
    {
        // Format date times
        if (null !== $beginDateTime) {
            $beginDateTime = $this->formatDateTime($beginDateTime);
        }

        if (null !== $endDateTime) {
            $endDateTime = $this->formatDateTime($endDateTime);
        }

        // If user provided a begin date time but no end date time, we assume the end date time is now
        if (null !== $beginDateTime && null === $endDateTime) {
            $endDateTime = $this->formatDateTime(time());
        }

        $this->name = $name;
        $this->beginDateTime = $beginDateTime;
        $this->endDateTime = $endDateTime;
        $this->fileName = $fileName;
        $this->bookmark = $bookmark;

        // Create request
        $access = $this->createAccess();
        $request = $this->createRequest();

        $this->response = $this->getRequest()->request($access, $request, $this->compileEndpointUrl(self::ENDPOINT));
        $response = $this->response->getResponse();

        if (null === $response) {
            throw new Exception('Failure (0): Unknown error', 0);
        }

        if ($response->Response->ResponseStatusCode == 0) {
            throw new Exception(
                "Failure ({$response->Response->Error->ErrorSeverity}): {$response->Response->Error->ErrorDescription}",
                (int)$response->Response->Error->ErrorCode
            );
        } else {
            if (isset($response->Bookmark)) {
                $this->setBookmark((string)$response->Bookmark);
            } else {
                $this->setBookmark(null);
            }

            return $this->formatResponse($response);
        }
    }