-
Notifications
You must be signed in to change notification settings - Fork 121
Open
Description
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"}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels