API

Score any site from your own code.

Send an address or coordinates. Get back a site score and the eight signals behind it, as clean JSON. Across the US and Canada.

POST/api/v1/sites/score
Request
curl https://www.evpin.com/api/v1/sites/score \
-H "Authorization: Bearer $EVPIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"location": {
"address": "1 Infinite Loop, Cupertino, CA 95014"
}
}'
overallScore
4.3/5
High
Amenities4.2
EV adoption4.9
Traffic4.1
Population density3.6
Existing infrastructure4.0
Incentives4.6
Affordability4.5
Crime4.4
Response
1{
2"id": "req_7Hk2mQ9xVb",
3"object": "site_score",
4"createdAt": "2026-10-15T14:02:11.000Z",
5"location": {
6"latitude": 37.3318,
7"longitude": -122.0312,
8"matchedAddress": "1 Infinite Loop, Cupertino, CA 95014",
9"city": "Cupertino",
10"county": "Santa Clara County",
11"state": "CA",
12"postalCode": "95014",
13"country": "US"
14},
15"overallScore": 4.3,
16"tier": "standard",
17"rating": "high",
18"signals": {
19"amenities": {
20"score": 4.2,
21"count": 58,
22"breakdown": [ … 6 types ]
23},
24"evAdoption": { … sign in to see },
25"traffic": {
26"score": 4.1,
27"aadt": 39800
28},
29"populationDensity": {
30"score": 3.6,
31"densityPerSqKm": 2204
32},
33"existingInfrastructure": {
34"score": 4,
35"dcFastPorts": 64,
36"level2Ports": 418,
37"averageStationRating": 4.2,
38"nearestHighwayExitMiles": 0.4,
39"averageUtilizationPercent": null,
40"utilizationLevel": "high"
41},
42"incentives": {
43"score": 4.6,
44"count": 4,
45"items": [ … 4 programs ]
46},
47"affordability": {
48"score": 4.5,
49"percentResidentsAbleToAffordEv": 63
50},
51"crime": {
52"score": 4.4,
53"violentCrimeChange": 0.42,
54"propertyCrimeChange": 0.81
55}
56},
57"nearbyUtilization": { … premium tier },
58"utilityCompanies": [
59{
60"name": "Pacific Gas and Electric",
61"url": "https://www.pge.com"
62}
63],
64"justice40": "no",
65"ownership": { … sign in to see }
66}

Sample responses · illustrative data

Your team already screens hundreds of sites in EVpin. Now your software can too. The same scores and data as the app, one request away, wherever your site pipeline lives.

Premium

See how the stations nearby really perform.

Set tier: "premium" and the response adds utilization of nearby stations: how busy they are, what they charge, and what they earn. Split by Tesla and everyone else.

nearbyUtilization37 stations within 10 mi · 92% with data
27%
Average utilization of nearby stations
Time spent at each occupancy
46%
31%
17%
0–25% occupied25–50% occupied50–80% occupied80–100% occupied
Avg price per kWh
$0.44
$0.29$0.62
averageChargingRatePerKwh
Est. monthly revenue per station
$4,860estimatedMonthlyRevenue
Est. monthly energy per station
11,045 kWhestimatedMonthlyEnergyKwh
Median max power
150 kWmedianMaxPowerKw
Median ports per location
6medianPortsPerLocation
Median chargers per location
4medianChargersPerLocation
Options

Choose what matters to you.

A highway fast-charging stop and a downtown destination charger need different answers about the same corner. Every request says how far to look, which chargers count, and which signals matter.

Score 1 Infinite Loop against within , weighing .

options: { radiusMiles: 10, chargerLevels: "dcfast" } // signals: all 8 by default
Overall score4.3/5HighDefault request
4.2
4.9
4.1
3.6
4.0
4.6
4.5
4.4
Developers

One endpoint. Any stack.

Plain JSON over HTTPS, so site scores slot straight into the tools your team already uses: your CRM, your GIS, an underwriting model, even a spreadsheet.

const res = await fetch('https://www.evpin.com/api/v1/sites/score', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.EVPIN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
location: { latitude: 37.3318, longitude: -122.0312 },
options: { tier: 'premium', radiusMiles: 5 },
}),
});
const { overallScore, rating, signals } = await res.json();

Address or coordinates

Send a street address or a latitude and longitude. You get back the matched address, city, county and zip.

One bearer token

Anyone in your organization can create a key in settings. Send it as a bearer token, server-side.

OpenAPI 3.1 spec

Generate a typed client in your language of choice, or import it straight into Postman.

Ready for AI agents

The docs ship as llms.txt too, so a coding agent can wire up the API for you.

Put site scoring in your pipeline.

Create an API key in your organization settings and score your first site in minutes.