Quickstart
Get an API key by emailing art@jamestannahill.com. Free tier: 50 critiques + 100 weather + 100 pricing per month.
Art Critic
Score any image on composition, color, complexity, and emotional impact.
cURL
curl -X POST https://api.art.jamestannahill.com/v1/critique \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"image_url": "https://example.com/artwork.png"}'
Python
# pip install requests
import requests
resp = requests.post(
"https://api.art.jamestannahill.com/v1/critique",
headers={"x-api-key": "YOUR_KEY"},
json={"image_url": "https://example.com/artwork.png"},
)
data = resp.json()
print(f"Overall: {data['overall']}/10 — {data['critique']}")
Node.js
const resp = await fetch("https://api.art.jamestannahill.com/v1/critique", {
method: "POST",
headers: { "x-api-key": "YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ image_url: "https://example.com/artwork.png" }),
});
const data = await resp.json();
console.log(`Overall: ${data.overall}/10 — ${data.critique}`);
Response
{
"composition": 8,
"color": 7,
"complexity": 9,
"impact": 8,
"overall": 8,
"critique": "A commanding abstract piece with sophisticated layering.",
"request_id": "req_abc123"
}
Weather Drama
Today's most atmospherically dramatic locations worldwide.
cURL
curl https://api.art.jamestannahill.com/v1/weather/rankings?limit=5 \ -H "x-api-key: YOUR_KEY"
Response
{
"date": "2026-03-19",
"rankings": [
{
"rank": 1,
"lat": 60.0, "lng": -70.0,
"score": 62.7,
"pressure_hpa": 972.6,
"wind_speed_kmh": 82.1,
"temp_c": -16.0,
"humidity_pct": 94.0,
"precipitation_mm": 1.6
}
],
"model": "GFS (NOAA)",
"scan_points": 54
}
Also available:
# Tomorrow's forecast GET /v1/weather/forecast?limit=10 # Score a specific location GET /v1/weather/score?lat=40.7&lng=-74.0
Dynamic Pricing
Compute a scarcity-based price multiplier from quality, rarity, and demand signals.
cURL
curl -X POST https://api.art.jamestannahill.com/v1/price \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"quality_score": 8,
"rarity_score": 72,
"total_supply": 25,
"total_sold": 8
}'
Response
{
"multiplier": 1.46,
"components": {
"quality_bonus": 0.30,
"rarity_bonus": 0.13,
"scarcity_bonus": 0.03
},
"suggested_action": "Price above base — high quality + moderate rarity"
}
Questions? Need higher limits? art@jamestannahill.com