Getting Started
Go from zero to your first API query in under 5 minutes.
1. Get your API key
Request a free API key to start querying. The free tier includes 50 queries per month across all endpoints.
Include your key in every request via the X-API-Key header:
X-API-Key: pk_your_key_here
The API also works without a key when auth is not required, but authenticated requests get higher rate limits and usage tracking.
2. Your first query
Let's search for solar projects in New Jersey. Choose your language:
import requests BASE = "https://prospector-platform-production.up.railway.app" API_KEY = "pk_your_key_here" resp = requests.get(f"{BASE}/projects", params={ "state": "NJ", "fuel_type": "Solar", "per_page": 5, }, headers={"X-API-Key": API_KEY}) data = resp.json() for p in data["data"]: print(f"{p['queue_id']}: {p['name']} — {p['capacity_mw']} MW")
const BASE = "https://prospector-platform-production.up.railway.app"; const API_KEY = "pk_your_key_here"; const resp = await fetch( `${BASE}/projects?state=NJ&fuel_type=Solar&per_page=5`, { headers: { "X-API-Key": API_KEY } } ); const { data } = await resp.json(); data.forEach(p => console.log(`${p.queue_id}: ${p.name} — ${p.capacity_mw} MW`) );
curl -H "X-API-Key: pk_your_key_here" \ "https://prospector-platform-production.up.railway.app/projects?state=NJ&fuel_type=Solar&per_page=5"
The response includes paginated results with a meta object:
{
"data": [
{
"id": 12345,
"queue_id": "AE2-123",
"name": "Sunrise Solar Farm",
"region": "PJM",
"state": "NJ",
"capacity_mw": 25.0,
"type": "Solar",
"status": "Active",
"developer": "Sunrise Energy LLC",
...
}
],
"meta": { "total": 847, "page": 1, "per_page": 5, "pages": 170 }
}
3. Common workflows
Screen ITC investment deals
Find pre-screened investable projects with high tax credit rates.
resp = requests.get(f"{BASE}/investable", params={ "min_score": 70, "state": "NJ", "per_page": 10, }, headers={"X-API-Key": API_KEY}) deals = resp.json()["data"] for d in deals: print(f"{d['queue_id']}: {d['name']} — Score {d['investability_score']}, " f"Credit {d['effective_credit_rate']}%")
curl -H "X-API-Key: $KEY" \ "$BASE/investable?min_score=70&state=NJ&per_page=10"
Calculate tax credits for a project
Get the full ITC/PTC breakdown including energy community, low-income, and domestic content bonuses.
resp = requests.get(f"{BASE}/tax-credits/calculate", params={ "technology": "Solar", "capacity_mw": 2, "state": "WV", "county": "McDowell", "cod_year": 2027, }, headers={"X-API-Key": API_KEY}) credit = resp.json()["data"] print(f"Base rate: {credit['base_rate']}%") print(f"Effective rate: {credit['effective_rate']}%") print(f"Bonuses: {credit['bonuses']}")
curl -H "X-API-Key: $KEY" \ "$BASE/tax-credits/calculate?technology=Solar&capacity_mw=2&state=WV&county=McDowell&cod_year=2027"
Research a developer
Search by name, get their full profile and project portfolio.
# Search for a developer resp = requests.get(f"{BASE}/developers/search", params={"q": "NextEra"}, headers={"X-API-Key": API_KEY}) devs = resp.json()["data"] # Get their full profile dev_id = devs[0]["id"] profile = requests.get(f"{BASE}/developers/{dev_id}", headers={"X-API-Key": API_KEY}).json()["data"] print(f"{profile['canonical_name']} — {profile['tier']}") print(f"Projects: {profile['total_projects']}, Completion: {profile['completion_rate']}%") # List their projects projects = requests.get(f"{BASE}/developers/{dev_id}/projects", headers={"X-API-Key": API_KEY}).json()["data"]
# Search curl -H "X-API-Key: $KEY" "$BASE/developers/search?q=NextEra" # Profile (replace 42 with actual ID) curl -H "X-API-Key: $KEY" "$BASE/developers/42" # Their projects curl -H "X-API-Key: $KEY" "$BASE/developers/42/projects"
Export data to CSV
Bulk download project data filtered by state, technology, or capacity.
resp = requests.get(f"{BASE}/export/projects", params={ "state": "TX", "type": "Solar", "limit": 10000, }, headers={"X-API-Key": API_KEY}) with open("tx_solar.csv", "w") as f: f.write(resp.text) print(f"Exported {len(resp.text.splitlines())-1} projects")
curl -H "X-API-Key: $KEY" \ "$BASE/export/projects?state=TX&type=Solar&limit=10000" \ -o tx_solar.csv
Run custom SQL queries
Execute read-only SQL against any of our 9 databases for ad-hoc analysis.
resp = requests.post(f"{BASE}/query", json={ "sql": """ SELECT state, COUNT(*) as projects, ROUND(SUM(capacity_mw)) as total_mw FROM projects WHERE type_std = 'Solar' AND status_std = 'Active' GROUP BY state ORDER BY total_mw DESC LIMIT 10 """, "database": "master", }, headers={"X-API-Key": API_KEY}) for row in resp.json()["data"]: print(f"{row['state']}: {row['projects']} projects, {row['total_mw']} MW")
curl -X POST -H "X-API-Key: $KEY" \ -H "Content-Type: application/json" \ -d '{"sql": "SELECT state, COUNT(*) as n FROM projects WHERE type_std = '\''Solar'\'' GROUP BY state ORDER BY n DESC LIMIT 10", "database": "master"}' \ "$BASE/query"
4. Pagination and filtering
All list endpoints support these standard parameters:
| Parameter | Type | Description |
|---|---|---|
page | int | Page number (default: 1) |
per_page | int | Results per page (default: 50, max: 500) |
sort | string | Sort field (e.g., capacity_mw, queue_date) |
order | string | asc or desc |
Common filters on /projects:
| Filter | Example | Description |
|---|---|---|
state | NJ | Two-letter state code |
iso | PJM | ISO/RTO region |
fuel_type | Solar | Technology type (Solar, Wind, Storage, Gas, etc.) |
status | Active | Project status |
developer | NextEra | Developer name (partial match) |
capacity_min | 100 | Minimum capacity in MW |
capacity_max | 500 | Maximum capacity in MW |
energy_community | true | Energy community eligible |
investable | true | Pre-screened investable projects |
min_score | 70 | Minimum investability score (0-100) |
5. Rate limits and errors
| Tier | Monthly queries | Rate limit | Price |
|---|---|---|---|
| Free | 50 | 10/min | $0 |
| Growth | 2,500 | 60/min | $49/mo |
| Scale | 20,000 | 200/min | $199/mo |
| Enterprise | Unlimited | Custom | Contact us |
Error responses
| Status | Meaning |
|---|---|
200 | Success |
400 | Bad request (invalid parameters) |
403 | Invalid or missing API key |
404 | Resource not found |
429 | Rate limit exceeded |
500 | Server error |
All errors return JSON with a detail field:
{ "detail": "Monthly query limit exceeded. Upgrade at owen@prospectorlabs.com" }
6. Next steps
- Interactive API Reference — try every endpoint in your browser
- ReDoc — detailed endpoint documentation
- API Overview — features, pricing, and data coverage
- Contact us — questions, upgrade requests, or enterprise inquiries