---
title: "Save a new query"
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.channelautomations.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Channel Automation API › Analytics

`POST /api/analytics/saved-queries`

## Authentication

Requires one of the following:

- `bearerAuth`
- `apiKey`

## Request body

_Required._

- `name` (`post/api/analytics/saved-queries.name`; string, required) — Name of the saved query
  - example `"Monthly Lead Conversion"`
- `query_config` (`post/api/analytics/saved-queries.query_config`; object, required) — Query builder configuration
  - example `{"selectedSources":["contacts"],"selectedFields":["id","name","lead_status"],"filters":[]}`
- `sql_query` (`post/api/analytics/saved-queries.sql_query`; string, required) — Generated SQL query
  - example `"SELECT id, name, lead_status FROM contacts WHERE workspace_id = 'workspace-id'"`
- `description` (`post/api/analytics/saved-queries.description`; string, optional) — Optional description of the query
  - example `"Track lead conversion rates by month"`
- `visualization_config` (`post/api/analytics/saved-queries.visualization_config`; object, optional) — Chart/visualization configuration
- `is_shared` (`post/api/analytics/saved-queries.is_shared`; boolean, optional) — Whether to share with workspace team
  - default `false`

## Example request

```json
{
  "name": "Monthly Lead Conversion",
  "description": "Track lead conversion rates by month",
  "query_config": {
    "selectedSources": [
      "contacts"
    ],
    "selectedFields": [
      "id",
      "name",
      "lead_status"
    ],
    "filters": []
  },
  "sql_query": "SELECT id, name, lead_status FROM contacts WHERE workspace_id = 'workspace-id'",
  "visualization_config": {},
  "is_shared": false
}
```

## Code samples

### cURL

```bash
curl --request POST \
  --url https://api.channelautomation.com/api/analytics/saved-queries \
  --header 'Content-Type: application/json' \
  --data @- <<'EOF'
{
  "name": "Monthly Lead Conversion",
  "description": "Track lead conversion rates by month",
  "query_config": {
    "selectedSources": [
      "contacts"
    ],
    "selectedFields": [
      "id",
      "name",
      "lead_status"
    ],
    "filters": []
  },
  "sql_query": "SELECT id, name, lead_status FROM contacts WHERE workspace_id = 'workspace-id'",
  "visualization_config": {},
  "is_shared": false
}
EOF
```

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/analytics/saved-queries';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    name: 'Monthly Lead Conversion',
    description: 'Track lead conversion rates by month',
    query_config: {
      selectedSources: ['contacts'],
      selectedFields: ['id', 'name', 'lead_status'],
      filters: []
    },
    sql_query: 'SELECT id, name, lead_status FROM contacts WHERE workspace_id = \'workspace-id\'',
    visualization_config: {},
    is_shared: false
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.channelautomation.com/api/analytics/saved-queries"

payload = {
    "name": "Monthly Lead Conversion",
    "description": "Track lead conversion rates by month",
    "query_config": {
        "selectedSources": ["contacts"],
        "selectedFields": ["id", "name", "lead_status"],
        "filters": []
    },
    "sql_query": "SELECT id, name, lead_status FROM contacts WHERE workspace_id = 'workspace-id'",
    "visualization_config": {},
    "is_shared": False
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

## Responses

### 201

Query saved successfully

#### Example

```json
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "workspace_id": "string",
  "user_email": "string",
  "name": "string",
  "description": "string",
  "query_config": {},
  "sql_query": "string",
  "visualization_config": {},
  "is_shared": true,
  "execution_count": 0,
  "created_at": "2019-08-24T14:15:22Z",
  "updated_at": "2019-08-24T14:15:22Z"
}
```

- `id` (`post/api/analytics/saved-queries.response.201.id`; string, optional)
  - format `uuid`
- `workspace_id` (`post/api/analytics/saved-queries.response.201.workspace_id`; string, optional)
- `user_email` (`post/api/analytics/saved-queries.response.201.user_email`; string, optional)
- `name` (`post/api/analytics/saved-queries.response.201.name`; string, optional)
- `description` (`post/api/analytics/saved-queries.response.201.description`; string, optional)
- `query_config` (`post/api/analytics/saved-queries.response.201.query_config`; object, optional)
- `sql_query` (`post/api/analytics/saved-queries.response.201.sql_query`; string, optional)
- `visualization_config` (`post/api/analytics/saved-queries.response.201.visualization_config`; object, optional)
- `is_shared` (`post/api/analytics/saved-queries.response.201.is_shared`; boolean, optional)
- `execution_count` (`post/api/analytics/saved-queries.response.201.execution_count`; integer, optional)
- `created_at` (`post/api/analytics/saved-queries.response.201.created_at`; string, optional)
  - format `date-time`
- `updated_at` (`post/api/analytics/saved-queries.response.201.updated_at`; string, optional)
  - format `date-time`

### 400

Missing required fields or invalid workspace

#### Example

```json
{
  "error": "string",
  "details": "string"
}
```

- `error` (`post/api/analytics/saved-queries.response.400.error`; string, optional)
- `details` (`post/api/analytics/saved-queries.response.400.details`; string, optional)

### 500

Server error

#### Example

```json
{
  "error": "string",
  "details": "string"
}
```

- `error` (`post/api/analytics/saved-queries.response.500.error`; string, optional)
- `details` (`post/api/analytics/saved-queries.response.500.details`; string, optional)


Source: https://developer.channelautomations.com/api/post-api-analytics-saved-queries/index.md
