diff --git a/mastodon.go b/mastodon.go
index b352e32..f5466a5 100644
--- a/mastodon.go
+++ b/mastodon.go
@@ -45,7 +45,10 @@ func (c *Client) doAPI(ctx context.Context, method string, uri string, params in
 	if values, ok := params.(url.Values); ok {
 		var body io.Reader
 		if method == http.MethodGet {
-			u.RawQuery = pg.setValues(values).Encode()
+			if pg != nil {
+				values = pg.setValues(values)
+			}
+			u.RawQuery = values.Encode()
 		} else {
 			body = strings.NewReader(values.Encode())
 		}
@@ -80,6 +83,9 @@ func (c *Client) doAPI(ctx context.Context, method string, uri string, params in
 		}
 		ct = mw.FormDataContentType()
 	} else {
+		if method == http.MethodGet && pg != nil {
+			u.RawQuery = pg.toValues().Encode()
+		}
 		req, err = http.NewRequest(method, u.String(), nil)
 		if err != nil {
 			return nil, err
@@ -253,17 +259,19 @@ func getPaginationID(rawurl, key string) (int64, error) {
 	return id, nil
 }
 
+func (p *Pagination) toValues() url.Values {
+	return p.setValues(url.Values{})
+}
+
 func (p *Pagination) setValues(params url.Values) url.Values {
-	if p != nil {
-		if p.MaxID != nil {
-			params.Set("max_id", fmt.Sprint(p.MaxID))
-		}
-		if p.SinceID != nil {
-			params.Set("since_id", fmt.Sprint(p.SinceID))
-		}
-		if p.Limit != nil {
-			params.Set("limit", fmt.Sprint(p.Limit))
-		}
+	if p.MaxID != nil {
+		params.Set("max_id", fmt.Sprint(*p.MaxID))
+	}
+	if p.SinceID != nil {
+		params.Set("since_id", fmt.Sprint(*p.SinceID))
+	}
+	if p.Limit != nil {
+		params.Set("limit", fmt.Sprint(*p.Limit))
 	}
 
 	return params