> For the complete documentation index, see [llms.txt](https://v2.dataos.info/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://v2.dataos.info/references/interfaces/apis/concepts/api-calls.md).

# API Calls

How requests and responses work across the Vulcan API.

## Base URL

Every data product is accessible at a unique URL constructed from your environment variables:

```
https://<DATAOS_FQDN>/vulcan/tenants/<TENANT>/data-products/<TENANT>-<RESOURCE_NAME>/api/v1
```

## HTTP Methods

<table><thead><tr><th width="106.25701904296875">Method</th><th>What it does</th></tr></thead><tbody><tr><td><code>GET</code></td><td>Retrieve a resource or list</td></tr><tr><td><code>POST</code></td><td>Create a resource or submit a query</td></tr><tr><td><code>PUT</code></td><td>Update an existing resource</td></tr><tr><td><code>DELETE</code></td><td>Remove a resource</td></tr><tr><td><code>HEAD</code></td><td>Check existence without fetching the body</td></tr></tbody></table>

## Responses

All responses are JSON unless the endpoint explicitly returns binary (e.g. Parquet export). Standard status codes:

<table><thead><tr><th width="135.418701171875">Code</th><th>Meaning</th></tr></thead><tbody><tr><td><code>200</code></td><td>Success — body contains the result</td></tr><tr><td><code>201</code></td><td>Created — new resource successfully made</td></tr><tr><td><code>202</code></td><td>Accepted — request received, processing async (query submissions)</td></tr><tr><td><code>204</code></td><td>No Content — success with no body (e.g. DELETE)</td></tr><tr><td><code>307</code></td><td>Redirect — follow to presigned URL (Parquet downloads)</td></tr><tr><td><code>400</code></td><td>Bad Request — invalid SQL, bad params, missing required field</td></tr><tr><td><code>401</code></td><td>Unauthorized — token missing or expired</td></tr><tr><td><code>403</code></td><td>Forbidden — you don't own this resource</td></tr><tr><td><code>404</code></td><td>Not Found — resource doesn't exist</td></tr><tr><td><code>409</code></td><td>Conflict — e.g. perspective slug already taken</td></tr><tr><td><code>502</code></td><td>Upstream Error — transpiler or proxy failure</td></tr><tr><td><code>503</code></td><td>Service Unavailable — worker not ready, retry shortly</td></tr></tbody></table>

## Pagination

List endpoints accept `limit` and `offset` query parameters. Responses include a `pagination` object with `has_more`, `limit`, and `offset` fields.

```
GET /api/v1/activity/runs?limit=20&offset=40
# Returns runs 41–60. Check pagination.has_more to continue paging.
```

## Timestamps

All timestamps in responses are Unix epoch seconds (`integer`) unless noted as ISO 8601. When filtering by time, pass Unix seconds in `start_ts` / `end_ts` query parameters.

## Async Query Pattern

Data query endpoints are asynchronous. All `POST /query/...` calls return `202 Accepted` immediately with a `statement_id`. Poll `GET /query/statement/{id}` until `status` is `SUCCESS` or `FAILED`, then fetch the result.

> **Cache deduplication:** Identical queries are fingerprinted. If the same query is already running or cached, the API returns the existing result. Check the `strategy` field: `from_cache`, `await_primary`, or `execute`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://v2.dataos.info/references/interfaces/apis/concepts/api-calls.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
