# JSON Data source

## Create the JSON Data source

1. Navigate to **Integrations** > **Data** **Sources**
2. Click **New** **Data** **Source**
3. Select **JSON**
4. Create the data source
   1. Enter a name for your data source (required)
   2. Enter Basic Authentication credentials (optional)

<figure><img src="/files/fSs1HQ1bgVwoDsFuq2Gr" alt=""><figcaption></figcaption></figure>

## Writing queries

1. Navigate to **Queries** and click **New Query**
2. In the **drop-down** on your left hand side, select your new data source

### Providing HTTP Options

The following HTTP options are used for sending a query

{% hint style="info" %}
The URL parameter is the only required parameter
{% endhint %}

* `url` - This is the URL where the RESTful API is exposed
* `method` - the HTTP method to use (default: `get`)
* `headers` - a dictionary of headers to send with the request
* `auth` - basic auth username/password (should be passed as an array: `[username, password]`)
* `params` - a dictionary of query string parameters to add to the URL
* `data` - a dictionary of values to use as the request body
* `json` - same as `data` except that it’s being converted to JSON
* `path` - accessing attributes within the response
  * `field` - rows of objects within selected attribute

#### Example query:&#x20;

```
url: https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699
path: items
fields: ["volumeInfo.authors","volumeInfo.title","volumeInfo.publisher","accessInfo.webReaderLink"]
```

<figure><img src="/files/6IeM7QzbXOi9fsuiihkA" alt=""><figcaption></figcaption></figure>

#### Example query including all HTTP options:

```
url: https://httpbin.org/post
method: post
headers: {"User-Agent": "Test", "Accept": "*/*"}
auth: [username, password]
params: {?q=myQuery}
json: {"this": "is", "my": {"json":"body"}}
path: json
fields: ["my.json"]
```

## Filtering response data: path and fields

The response data can be filtered by specifying the `path` and `fields` parameters. The `path` filter allows accessing attributes within the response, for e.g. if a key `foo` in the response contains rows of objects you want to access, specifying `path` `foo` will convert each of the objects into rows.

In the example below, we are then selecting `fields` *volumeInfo.authors, volumeInfo.title, volumeInfo.publisher and accessInfo.webReaderLink*

```
url: https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699
path: items
fields: ["volumeInfo.authors","volumeInfo.title","volumeInfo.publisher","accessInfo.webReaderLink"]
```

The resulting data from the above query is a nicely formatted table that can be searched in Apica Ascent or made available as a widget in a dashboard

<figure><img src="/files/HSZleT5MpXXFqC1Zx4Cn" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.apica.io/data-sources/api/json-data-source.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
