Skip to content

403 permission denied for get_perps_portfolio_summary function #125

@h17

Description

@h17

Most likely problem is not with the python code on the client side but on the server side.

The API key has view and trade permissions but

Replicating snippet

from coinbase.rest import RESTClient
import pandas as pd

# Pass the path to the .json file you downloaded
c = client = RESTClient(key_file="t.json")

portfolios = pd.DataFrame(client.get_portfolios().to_dict()['portfolios']).set_index('name')
defaultPortfolio = portfolios.loc['Default','uuid']
print(client.get_portfolio_breakdown(defaultPortfolio))
print(client.get_perps_portfolio_summary(defaultPortfolio))

The get_portfolio_breakdown is fine but the get_perps_portfolio_summary is giving following error

2026-03-09 19:51:00 - coinbase.RESTClient - ERROR - HTTP Error: 403 Client Error: Forbidden {"error":"PERMISSION_DENIED","error_details":"User does not have the correct permissions","message":"User does not have the correct permissions"}
 HTTPError: 403 Client Error: Forbidden {"error":"PERMISSION_DENIED","error_details":"User does not have the correct permissions","message":"User does not have the correct permissions"} 
---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)
Cell In[84], line 1
----> 1 print(client.get_perps_portfolio_summary(defaultPortfolio))

File ~/anaconda3/envs/v1/lib/python3.14/site-packages/coinbase/rest/perpetuals.py:67, in get_perps_portfolio_summary(self, portfolio_uuid, **kwargs)
     48 """
     49 **Get Perpetuals Portfolio Summary**
     50 ________________
   (...)     63 <https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getintxportfoliosummary>`_
     64 """
     65 endpoint = f"{API_PREFIX}/intx/portfolio/{portfolio_uuid}"
---> 67 return GetPerpetualsPortfolioSummaryResponse(self.get(endpoint, **kwargs))

File ~/anaconda3/envs/v1/lib/python3.14/site-packages/coinbase/rest/rest_base.py:101, in RESTBase.get(self, url_path, params, public, **kwargs)
     98 if kwargs:
     99     params.update(kwargs)
--> 101 return self.prepare_and_send_request(
    102     "GET", url_path, params, data=None, public=public
    103 )

File ~/anaconda3/envs/v1/lib/python3.14/site-packages/coinbase/rest/rest_base.py:207, in RESTBase.prepare_and_send_request(self, http_method, url_path, params, data, public)
    204 if data is not None:
    205     data = {key: value for key, value in data.items() if value is not None}
--> 207 return self.send_request(http_method, url_path, params, headers, data=data)

File ~/anaconda3/envs/v1/lib/python3.14/site-packages/coinbase/rest/rest_base.py:228, in RESTBase.send_request(self, http_method, url_path, params, headers, data)
    218 logger.debug(f"Sending {http_method} request to {url}")
    220 response = self.session.request(
    221     http_method,
    222     url,
   (...)    226     timeout=self.timeout,
    227 )
--> 228 handle_exception(response)  # Raise an HTTPError for bad responses
    230 logger.debug(f"Raw response: {response.json()}")
    232 response_data = response.json()

File ~/anaconda3/envs/v1/lib/python3.14/site-packages/coinbase/rest/rest_base.py:47, in handle_exception(response)
     45 if http_error_msg:
     46     logger.error(f"HTTP Error: {http_error_msg}")
---> 47     raise HTTPError(http_error_msg, response=response)

HTTPError: 403 Client Error: Forbidden {"error":"PERMISSION_DENIED","error_details":"User does not have the correct permissions","message":"User does not have the correct permissions"}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions