diff options
Diffstat (limited to 'website/content/platform/getting_started/api_requests.mdx')
-rw-r--r-- | website/content/platform/getting_started/api_requests.mdx | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/website/content/platform/getting_started/api_requests.mdx b/website/content/platform/getting_started/api_requests.mdx new file mode 100644 index 00000000000..487b46dc8a0 --- /dev/null +++ b/website/content/platform/getting_started/api_requests.mdx @@ -0,0 +1,95 @@ +--- +title: REST API Requests +sidebar_position: 8 +description: How to send requests to the OpenBB Platform REST API. +keywords: +- tutorial +- OpenBB Platform +- Python client +- Fast API +- getting started +- requests +- data providers +--- + + +Most REST API endpoints are for data retrieval and are defined as `GET` requests, but some [toolkit extensions](/platform/user_guides/extensions) require data to pass through the function. In these instances, it must be a `POST` request. + +### Example + +This example will use a GET request to fetch daily VIX data from the Cboe data extension, and then make a POST request which passes through the data to a technical analysis function. + +First, start a development server. + +```bash +uvicorn openbb_core.api.rest_api:app --reload +``` + +This example will use Python and the `requests` library. + +#### Fetch Some Data + +```python +import requests + +get_url = "http://127.0.0.1:8000/api/v1/index/price/historical?provider=cboe&symbol=vix&interval=1d" +get_response = requests.get(get_url) +data_results = get_response.json()["results"] + +data_results[-1] +``` + +```json +{'date': '2023-11-17T00:00:00', + 'open': 14.18, + 'high': 14.19, + 'low': 13.67, + 'close': 13.79, + 'volume': 0, + 'calls_volume': None, + 'puts_volume': None, + 'total_options_volume': None} +``` + +#### Send a POST Request + +Next, pass the `data_results` to a function, using the `json` field in the POST headers. + +For this example, realized volatility cones, the default parameters assume the time series data is daily and that volatility should be annualized over 252 trading days. + +```python +import pandas as pd + +post_url = "http://localhost:8000/api/v1/technical/cones" +post_response = requests.post(post_url, json=data_results) +ta_results = post_response.json()["results"] + +pd.DataFrame.from_records(ta_results).head() +``` + +| window | realized | min | lower_25% | median | upper_75% | max | +|---------:|-----------:|-----------:|------------:|---------:|------------:|--------:| +| 3 | 0.396165 | 0.00701638 | 0.444709 | 0.72414 | 1.11563 | 8.47636 | +| 10 | 0.623199 | 0.190188 | 0.665584 | 0.852915 | 1.15491 | 4.83264 | +| 30 | 0.988435 | 0.332913 | 0.750007 | 0.921482 | 1.17072 | 2.98404 | +| 60 | 0.932594 | 0.47639 | 0.792548 | 0.964617 | 1.20171 | 2.35563 | +| 90 | 0.915137 | 0.551011 | 0.815229 | 0.965553 | 1.2128 | 2.04104 | + +The output from the Fast API is a serialized version of this object, and these methods are lost on conversion. OBBject can be reconstructed to recover the helpers by importing the model and validating the data. + +```python +import requests +from openbb_core.app.model.obbject import OBBject + +data = [] +symbol="SPY" +url = f"http://127.0.0.1:8000/api/v1/equity/price/historical?provider=polygon&symbol={symbol}" +headers = {"accept": "application/json"} + +response = requests.get(url, headers=headers, timeout=3) + +if response.status_code == 200: + data = OBBject.model_validate(response.json()) + +data.to_df() +``` |