curl --request POST \
--url https://oleander.dev/api/v1/warehouse/query \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"query": "WITH\n src AS (\n SELECT\n *\n FROM\n read_json (\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\n auto_detect = TRUE\n )\n )\nSELECT\n src -> 'show' ->> 'name' AS show_name,\n src -> 'show' ->> 'premiered' AS premiered,\n src -> 'show' -> 'rating' ->> 'average' AS rating,\n src -> 'show' -> 'network' ->> 'name' AS network_name\nFROM\n src;",
"autoSaveByHash": false
}
EOFimport requests
url = "https://oleander.dev/api/v1/warehouse/query"
payload = {
"query": "WITH
src AS (
SELECT
*
FROM
read_json (
'https://api.tvmaze.com/search/shows?q=breaking+bad',
auto_detect = TRUE
)
)
SELECT
src -> 'show' ->> 'name' AS show_name,
src -> 'show' ->> 'premiered' AS premiered,
src -> 'show' -> 'rating' ->> 'average' AS rating,
src -> 'show' -> 'network' ->> 'name' AS network_name
FROM
src;",
"autoSaveByHash": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'WITH\n src AS (\n SELECT\n *\n FROM\n read_json (\n \'https://api.tvmaze.com/search/shows?q=breaking+bad\',\n auto_detect = TRUE\n )\n )\nSELECT\n src -> \'show\' ->> \'name\' AS show_name,\n src -> \'show\' ->> \'premiered\' AS premiered,\n src -> \'show\' -> \'rating\' ->> \'average\' AS rating,\n src -> \'show\' -> \'network\' ->> \'name\' AS network_name\nFROM\n src;',
autoSaveByHash: false
})
};
fetch('https://oleander.dev/api/v1/warehouse/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://oleander.dev/api/v1/warehouse/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'WITH
src AS (
SELECT
*
FROM
read_json (
\'https://api.tvmaze.com/search/shows?q=breaking+bad\',
auto_detect = TRUE
)
)
SELECT
src -> \'show\' ->> \'name\' AS show_name,
src -> \'show\' ->> \'premiered\' AS premiered,
src -> \'show\' -> \'rating\' ->> \'average\' AS rating,
src -> \'show\' -> \'network\' ->> \'name\' AS network_name
FROM
src;',
'autoSaveByHash' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://oleander.dev/api/v1/warehouse/query"
payload := strings.NewReader("{\n \"query\": \"WITH\\n src AS (\\n SELECT\\n *\\n FROM\\n read_json (\\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\\n auto_detect = TRUE\\n )\\n )\\nSELECT\\n src -> 'show' ->> 'name' AS show_name,\\n src -> 'show' ->> 'premiered' AS premiered,\\n src -> 'show' -> 'rating' ->> 'average' AS rating,\\n src -> 'show' -> 'network' ->> 'name' AS network_name\\nFROM\\n src;\",\n \"autoSaveByHash\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://oleander.dev/api/v1/warehouse/query")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"WITH\\n src AS (\\n SELECT\\n *\\n FROM\\n read_json (\\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\\n auto_detect = TRUE\\n )\\n )\\nSELECT\\n src -> 'show' ->> 'name' AS show_name,\\n src -> 'show' ->> 'premiered' AS premiered,\\n src -> 'show' -> 'rating' ->> 'average' AS rating,\\n src -> 'show' -> 'network' ->> 'name' AS network_name\\nFROM\\n src;\",\n \"autoSaveByHash\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://oleander.dev/api/v1/warehouse/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"WITH\\n src AS (\\n SELECT\\n *\\n FROM\\n read_json (\\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\\n auto_detect = TRUE\\n )\\n )\\nSELECT\\n src -> 'show' ->> 'name' AS show_name,\\n src -> 'show' ->> 'premiered' AS premiered,\\n src -> 'show' -> 'rating' ->> 'average' AS rating,\\n src -> 'show' -> 'network' ->> 'name' AS network_name\\nFROM\\n src;\",\n \"autoSaveByHash\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"results": {
"columns": [
"<string>"
],
"column_types": [
"<string>"
],
"rows": [
[
"<unknown>"
]
]
},
"row_count": 123,
"execution_time": "<string>",
"query": "<string>",
"job": {
"namespace": "<string>",
"name": "<string>"
},
"explainResult": {}
}{
"error": "SQL syntax error"
}{
"error": "Unauthorized"
}{
"error": "This endpoint requires a Pro plan subscription"
}{
"status": 500
}DuckDB
Execute SQL queries against the oleander lake using DuckDB. All queries automatically capture lineage metadata for complete observability. This endpoint is only available on the Pro plan.
curl --request POST \
--url https://oleander.dev/api/v1/warehouse/query \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"query": "WITH\n src AS (\n SELECT\n *\n FROM\n read_json (\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\n auto_detect = TRUE\n )\n )\nSELECT\n src -> 'show' ->> 'name' AS show_name,\n src -> 'show' ->> 'premiered' AS premiered,\n src -> 'show' -> 'rating' ->> 'average' AS rating,\n src -> 'show' -> 'network' ->> 'name' AS network_name\nFROM\n src;",
"autoSaveByHash": false
}
EOFimport requests
url = "https://oleander.dev/api/v1/warehouse/query"
payload = {
"query": "WITH
src AS (
SELECT
*
FROM
read_json (
'https://api.tvmaze.com/search/shows?q=breaking+bad',
auto_detect = TRUE
)
)
SELECT
src -> 'show' ->> 'name' AS show_name,
src -> 'show' ->> 'premiered' AS premiered,
src -> 'show' -> 'rating' ->> 'average' AS rating,
src -> 'show' -> 'network' ->> 'name' AS network_name
FROM
src;",
"autoSaveByHash": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'WITH\n src AS (\n SELECT\n *\n FROM\n read_json (\n \'https://api.tvmaze.com/search/shows?q=breaking+bad\',\n auto_detect = TRUE\n )\n )\nSELECT\n src -> \'show\' ->> \'name\' AS show_name,\n src -> \'show\' ->> \'premiered\' AS premiered,\n src -> \'show\' -> \'rating\' ->> \'average\' AS rating,\n src -> \'show\' -> \'network\' ->> \'name\' AS network_name\nFROM\n src;',
autoSaveByHash: false
})
};
fetch('https://oleander.dev/api/v1/warehouse/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://oleander.dev/api/v1/warehouse/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'WITH
src AS (
SELECT
*
FROM
read_json (
\'https://api.tvmaze.com/search/shows?q=breaking+bad\',
auto_detect = TRUE
)
)
SELECT
src -> \'show\' ->> \'name\' AS show_name,
src -> \'show\' ->> \'premiered\' AS premiered,
src -> \'show\' -> \'rating\' ->> \'average\' AS rating,
src -> \'show\' -> \'network\' ->> \'name\' AS network_name
FROM
src;',
'autoSaveByHash' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://oleander.dev/api/v1/warehouse/query"
payload := strings.NewReader("{\n \"query\": \"WITH\\n src AS (\\n SELECT\\n *\\n FROM\\n read_json (\\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\\n auto_detect = TRUE\\n )\\n )\\nSELECT\\n src -> 'show' ->> 'name' AS show_name,\\n src -> 'show' ->> 'premiered' AS premiered,\\n src -> 'show' -> 'rating' ->> 'average' AS rating,\\n src -> 'show' -> 'network' ->> 'name' AS network_name\\nFROM\\n src;\",\n \"autoSaveByHash\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://oleander.dev/api/v1/warehouse/query")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"WITH\\n src AS (\\n SELECT\\n *\\n FROM\\n read_json (\\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\\n auto_detect = TRUE\\n )\\n )\\nSELECT\\n src -> 'show' ->> 'name' AS show_name,\\n src -> 'show' ->> 'premiered' AS premiered,\\n src -> 'show' -> 'rating' ->> 'average' AS rating,\\n src -> 'show' -> 'network' ->> 'name' AS network_name\\nFROM\\n src;\",\n \"autoSaveByHash\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://oleander.dev/api/v1/warehouse/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"WITH\\n src AS (\\n SELECT\\n *\\n FROM\\n read_json (\\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\\n auto_detect = TRUE\\n )\\n )\\nSELECT\\n src -> 'show' ->> 'name' AS show_name,\\n src -> 'show' ->> 'premiered' AS premiered,\\n src -> 'show' -> 'rating' ->> 'average' AS rating,\\n src -> 'show' -> 'network' ->> 'name' AS network_name\\nFROM\\n src;\",\n \"autoSaveByHash\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"results": {
"columns": [
"<string>"
],
"column_types": [
"<string>"
],
"rows": [
[
"<unknown>"
]
]
},
"row_count": 123,
"execution_time": "<string>",
"query": "<string>",
"job": {
"namespace": "<string>",
"name": "<string>"
},
"explainResult": {}
}{
"error": "SQL syntax error"
}{
"error": "Unauthorized"
}{
"error": "This endpoint requires a Pro plan subscription"
}{
"status": 500
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The SQL query to execute. Supports all DuckDB SQL syntax.
"WITH\n src AS (\n SELECT\n *\n FROM\n read_json (\n 'https://api.tvmaze.com/search/shows?q=breaking+bad',\n auto_detect = TRUE\n )\n )\nSELECT\n src -> 'show' ->> 'name' AS show_name,\n src -> 'show' ->> 'premiered' AS premiered,\n src -> 'show' -> 'rating' ->> 'average' AS rating,\n src -> 'show' -> 'network' ->> 'name' AS network_name\nFROM\n src;"
Automatically save query results to a table based on the query hash. If a table with the same hash exists, returns cached results instead of re-executing.
Response
Query executed successfully
Whether the query executed successfully
Query results with columns, column types, and rows
Show child attributes
Show child attributes
Number of rows returned
Query execution time (e.g., '991ms')
The original SQL query that was executed
Lineage job information
Show child attributes
Show child attributes
Query execution plan explanation
Was this page helpful?