curl --request GET \
--url https://venivididavinci.com/api/v1/search \
--header 'X-API-Key: <api-key>'import requests
url = "https://venivididavinci.com/api/v1/search"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://venivididavinci.com/api/v1/search', 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://venivididavinci.com/api/v1/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://venivididavinci.com/api/v1/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://venivididavinci.com/api/v1/search")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://venivididavinci.com/api/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"query": "<string>",
"total": 123,
"limit": 123,
"offset": 123,
"data": [
{
"slug": "ambrosiana-drawings",
"index": 123,
"title": "Mechanical Science, Balances, and the Centre of Gravity",
"subjects": [
"geometry"
],
"url": "<string>",
"matchedIn": "title",
"snippet": "<string>",
"label": "<string>",
"kind": "leaf",
"thumbnail": "<string>",
"matched": [
"<string>"
],
"matchedItem": {
"subject": "geometry",
"heading": "<string>"
},
"score": 123
}
]
}{
"error": {
"code": "bad_request",
"message": "Parameter 'q' is required and must be at least 2 characters."
}
}{
"error": {
"code": "rate_limited",
"message": "Anonymous limit is 60 requests/hour. Get a free key at https://venivididavinci.com/developers and pass it as X-API-Key."
}
}Search the pages
Every query term must occur somewhere in the page — its title, subtitle, summary, the headings and excerpts of its passages, the English translation or the Italian transcription. A hand-curated alias file lets English reach the Italian and the subject ids reach plain words (“birds” finds “uccelli”). Ranking is BM25F with the title weighted most, and a page where every term falls in one passage ranks highest; each hit says which passage matched. Filter by subject and/or collection (a slug or any of its names). For one exact page use /resolve.
curl --request GET \
--url https://venivididavinci.com/api/v1/search \
--header 'X-API-Key: <api-key>'import requests
url = "https://venivididavinci.com/api/v1/search"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://venivididavinci.com/api/v1/search', 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://venivididavinci.com/api/v1/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://venivididavinci.com/api/v1/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://venivididavinci.com/api/v1/search")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://venivididavinci.com/api/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"query": "<string>",
"total": 123,
"limit": 123,
"offset": 123,
"data": [
{
"slug": "ambrosiana-drawings",
"index": 123,
"title": "Mechanical Science, Balances, and the Centre of Gravity",
"subjects": [
"geometry"
],
"url": "<string>",
"matchedIn": "title",
"snippet": "<string>",
"label": "<string>",
"kind": "leaf",
"thumbnail": "<string>",
"matched": [
"<string>"
],
"matchedItem": {
"subject": "geometry",
"heading": "<string>"
},
"score": 123
}
]
}{
"error": {
"code": "bad_request",
"message": "Parameter 'q' is required and must be at least 2 characters."
}
}{
"error": {
"code": "rate_limited",
"message": "Anonymous limit is 60 requests/hour. Get a free key at https://venivididavinci.com/developers and pass it as X-API-Key."
}
}Authorizations
Optional — raises your rate limit. Patron keys get the highest tier.
Query Parameters
Query text, e.g. flying machine or centre of gravity.
2Restrict to pages tagged with this subject. One of the 25 frozen subject terms.
geometry, arithmetic-and-proportion, physics-and-mechanics, hydraulics, anatomy, geology, astronomy, optics-and-light, botany, flight, machines-and-devices, weapons-and-fortification, architecture, civil-engineering, painting-and-perspective, figure-studies, sculpture-and-casting, horses-and-animals, landscape, cartography, ornament-and-heraldry, lists-and-accounts, language-and-latin, personal-notes, fables-and-prose Restrict to one collection. One of the 28 enriched collections.
ambrosiana-drawings, codex-arundel, codex-atlanticus, codex-flight-of-birds, codex-forster-i, codex-forster-ii, codex-forster-iii, codex-madrid-i, codex-madrid-ii, codex-urbinas, paris-ashburnham-a, paris-ashburnham-b, paris-ms-a, paris-ms-b, paris-ms-c, paris-ms-d, paris-ms-e, paris-ms-f, paris-ms-g, paris-ms-h, paris-ms-i, paris-ms-k, paris-ms-l, paris-ms-m, turin-drawings, uffizi-drawings, usa-collection-drawings, venice-accademia-drawings Page size (default 50, max 200).
1 <= x <= 200Zero-based offset into the full result set.
x >= 0