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.

Email: owen@prospectorlabs.com with subject "Free API Key Request" and we'll send you a key within minutes.

Include your key in every request via the X-API-Key header:

Authentication 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:

Search solar projects in NJ python
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")
Search solar projects in NJ javascript
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`)
);
Search solar projects in NJ bash
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:

Response format json
{
  "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

WORKFLOW 1

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"
WORKFLOW 2

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"
WORKFLOW 3

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"
WORKFLOW 4

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
WORKFLOW 5

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:

ParameterTypeDescription
pageintPage number (default: 1)
per_pageintResults per page (default: 50, max: 500)
sortstringSort field (e.g., capacity_mw, queue_date)
orderstringasc or desc

Common filters on /projects:

FilterExampleDescription
stateNJTwo-letter state code
isoPJMISO/RTO region
fuel_typeSolarTechnology type (Solar, Wind, Storage, Gas, etc.)
statusActiveProject status
developerNextEraDeveloper name (partial match)
capacity_min100Minimum capacity in MW
capacity_max500Maximum capacity in MW
energy_communitytrueEnergy community eligible
investabletruePre-screened investable projects
min_score70Minimum investability score (0-100)

5. Rate limits and errors

TierMonthly queriesRate limitPrice
Free5010/min$0
Growth2,50060/min$49/mo
Scale20,000200/min$199/mo
EnterpriseUnlimitedCustomContact us

Error responses

StatusMeaning
200Success
400Bad request (invalid parameters)
403Invalid or missing API key
404Resource not found
429Rate limit exceeded
500Server error

All errors return JSON with a detail field:

Error response json
{ "detail": "Monthly query limit exceeded. Upgrade at owen@prospectorlabs.com" }

6. Next steps