CAISO

FREEMIUM
By BuildingViz | Updated 11 days ago | Energy
Popularity

8.5 / 10

Latency

9,857ms

Service Level

77%

Health Check

N/A

README

Overview

This data is sourced from the California Independent System Operator (CAISO) website at caiso.com.

Note - The API and database backend are housed in AWS so to save money on costs, the database will sleep after 15 minutes of inactivity. This might result in the first request taking up to 30 seconds to respond and/or fail. However, after that the responses should be quick. Apologies for the inconvenience. If demand is sufficient going forward, the instance could be reconfigured to be always available.

Authentication

Authentication is handled by RapidAPI. Headers must include the x-api-key value as well as your X-RapidAPI-Key value.

All methods have been tested, but please contact caisoapi@buildingviz.com if there are any issues.

Endpoints

There are 4 endpoints:

caiso

Provides basic CAISO data on demand, supply, and emissions. Data is collected daily for the previous calendar day.

Query Parameters:

type (Mandatory)

Needs to be one of “co2”, “fuelsource”, “netdemand”, or “all”. The “all” value will combine the results for the three other tables into a single CSV file with a subset of initially requested columns

startdate (Optional, inclusive of)

Needs to be in YYYYMMDD format. You can specify whatever date you want, but the data only goes back to 20180410. If not provided, defaults to one year from the request date (in UTC). The specified date will be included in the results.

enddate (Optional, inclusive of)

Also needs to be in YYYMMDD format. If not provided, defaults to the current request date (in UTC). The specified date will be included in the results. Also be aware that because of the delay between when CAISO daily data is complete and when I actually ingest it, you may not get a full year’s worth of data. There may be a gap of a day at the end. I kind of correct for that, but it’s not very sophisticated.

interval (Optional)

Needs to be a number divisible by 5 and a factor of 60. So basically 5, 10, 15, 20, 30, or 60. The resulting data set will only have those intervals included. For 10 you’ll get :00, :10, :20, :30, :40, and :50. And so on for the others. If not specified, the default is 5, which is as granular as CAISO provides the data.

Example Request

“/caiso?type=co2&startdate=20210101&enddate=20220101&interval=30”

Output Format: CSV via secure S3 URL

Example Output -

{"CAISOFile":"https://buildingviz-api.s3.amazonaws.com/output/caiso/co2_20220101_20220901_096236.csv?AWSAccessKeyId=ASIAZHYIUUBGC3SYCGA4&Signature=2p5oLqY8jkPb6Q4GXLZoocUU5NE%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEH4aCXVzLXdlc3QtMSJGMEQCIFnBjT9bYc94vSLzax%2BFYtWIOK8nKINE7job4Y6McOhUAiBUfB6ILDSq4%2FD4FRL8COuEgUWaZcgOS6zSVsQuyZvJ2ir0AghXEAIaDDYzNTEzNjQxNzg2OCIMBTPZnrUVFQWRWaxbKtECttX3Ueyo%2BM%2B1Bjri7IVkxPMsR9nsV3BohRo5XHTgWdEpMrOmDiM3vLcsu9BMI07HFEgwhR6tiZGNOJW6PFwPrAwQR0wgZCAjS4wyg%2FeTAxecnRIB4Nxyr1zFvGexYPTBYOpOJSWkvVis1ZYOlWbkZTJHAhPsXzWz6iaPyAy3i4JNlAlkL1fr32VJLbBvjuh6N%2F2xB09FNgqwXo1DolJsIYEMJs13BdbIxCTFHu3%2B2MXXZd77GGGbvFUc%2BbfHIpJVdktkQodn6EBa3m4XxsCDkJDX2dh3RkavghFT4jZHcnt%2BLJkBFdRbpXeVnEhdXKBrBhUOE%2BSegjlV6UBX6rJNIPJWgEZ6o6JpN1IuMJ15sy%2FJhIhQn78%2BlOmPomkW0zAG4M3WFSjV3nscMDjBQIroOO4lqfsXu00j%2BmN7Sh8e3NUi9KJZYGg1yV%2BLw4Go32%2FcBTCftsOaBjqfAWwUbIh%2FpD7xmv3mH8iDFdfYaGvJQAc0BVpw%2F5ibgvt9ETLxP8vKE3GV%2FUzmsTv0JQdz5Tc4h3Q6GyIXTDA5vU7IoC8D3HnAayDyrjGL2cnyfHD6AQCTLmK1Pc2VNhLC6sEKXpVwVRHOEQyIvzRsT2H68MfbzqntcBQ06OJu%2BYCh5Alg1hBQHKoiNaZH3NCbfDej3SiZxi1E5hCVpNN26Q%3D%3D&Expires=1666246996"}

The filename will be called co2_20220101_20220901_096236.csv. It uses the startdate, enddate, and a random number to reduce the chance that the filename might overwrite an existing file. Going to that URL will let you download the file in CSV format. The link is valid for 1 hour before expiring.

Important Note

The entire quoted string is the URL of the file. It includes authentication parameters required to access the file in S3.

caisoregion

Provides information on all CAISO-tracked regional authorities, including a code and a name. The endpoint takes and requires no query parameters. The results can be used for the caisonode endpoint to get valid nodes.

Query Parameters: None

Example Request

/caisoregion

Output Format: JSON

Example Output

{ "regions": [{ "region_code": "APS", "region_name": "Arizona Public Service" }, { "region_code": "AVA", "region_name": "Avista Corporation" }, { "region_code": "BANC", "region_name": "Balancing Authority of Northern California" }] }

caisonode

Provides information on CAISO-tracked nodes, including state, regional authority, name, and latitude/longitude coordinates.

Query Parameters:

type (Mandatory)

Type must be one of “region”, “name”, “state”, or “radius”.

region (Optional)

Optional but required when type is “region”. The value must be a region code from the caisoregion endpoint (i.e., PACW)

state (Optional)

Optional but required when type is “state”. The value must be a two-letter postal state abbreviation (i.e., WA). Case-insensitive.

radius (Optional)

Optional but required when type is “radius”. The value should be a numeric value for the radius miles to search. Returned values will be all nodes within the radius (ex. “20”=20 miles) from the origin point provided in lat and long. Max radius is 500 miles.

lat (Optional)

Optional but required when type is “radius”. The value should be a numeric value for the latitude coordinate of the radius center.

long (Optional)

Optional but required when type is “radius”. The value should be a numeric value for the longitude coordinate of the radius center.

name (Optional)

Optional but required when type is “name”. The value should be an alphanumeric value for the name of a node tracked by CAISO. Should only return one set of values.

Example Request (ignore spaces, RapidAPI editor is weird)

“/caisonode?type=state&state=WA”
"/caisonode?type=region&region=PACW"
"/caisonode?type=radius&radius=100&lat=36.016066&long=-114.737732"
"/caisonode?type=name&name=DLRDG_SC_LNODE745"

Output Format: JSON

Example Output

{ "nodes": [{ "node_name": "DLRDG_SC_LNODE745", "node_type": "Node", "node_region": "SCL", "node_ntype": "LOAD", "node_lat": 47.5497267785408, "node_long": -122.366531005096 }] }

caisoprice

Provides hourly price data from CAISO by node, including node info, location marginal price (LMP), congestion costs, energy costs, and losses.

Note - Price data only goes back to March 4th, 2022, so all date values must be later than that to get results.

Query Parameters:

type (Mandatory)

Type must be one of “date”, “node” or “pages”. For “node” or “date” request types, the result is price data. For the “pages” request type, the return is the number of pages required to paginate through a “date” type request for when the format is “jsonpage”.

date (Optional)

Optional. Must be a string in YYYYMMDD format. If not provided defaults to one day before the date of request. Used for all request types.

When used with the “date” request type, will return all price data for all nodes on the date provided. When used with the “node” request type, the date will be the end date for the 30-day window of price data.
When used with the “pages” request type, returns the number of pages required to get the full resultset for a jsonpage output format.

Price data only goes back to March 4th, 2022, so all date values must be later than that to get results.

node (Optional)

Optional, but required if type is “node”. Must be a valid node name contained in the database. Use the /caisonode endpoint to get valid values. Will return the previous 30 days worth of node price data based on the “date” value.

format (Optional)

Optional, but defaults to different values depending on the request type.

For the date request type, the default value is “jsonpage”, which returns paginated JSON (500 nodes at a time for the specified date). The “date” request type can also be output to CSV file via secure S3 URL with a “csv” format value.

For the “node” request type, the default value is “json”, but the results can be output to CSV via secure S3 URL with a “csv” format value or a JSON file via secure S3 URL with a “jsonfile” format value.

page (Optional)

Optional. Used when format value is “jsonpage” to paginate through the resultset. Default is 1 if no value is provided. I included this option because return size limits in AWS’ API Gateway mean the full resultset can’t be returned directly, so to avoid CSV-only returns, I built in pagination. Use the “pages” endpoint to get a value for the total pages and then iterate accordingly.

Example Request

“/caisoprice?type=date”
"/caisoprice?type=node&node=DLRDG_SC_LNODE745&date=20220401"
"/caisoprice?type=date&date=20220401"
"/caisoprice?type=pages&date=20220401"
"/caisoprice?type=date&date=20220401&format=jsonpage"
"/caisoprice?type=node&date=20220401&format=csv"

Output Format: JSON, paginated JSON, or CSV via secure S3 URL (See description above for details)

Example Output

{"pages": "18"}

{ "prices": { "nodes": [{ "node_info": { "node": "DLRDG_SC_LNODE745", "price_date": "2022-03-04", "hourly_prices": [{ "price_hour": 1, "price_details": { "lmp": 45.05991, "congestion": 0, "energy": 46.93252, "losses": -1.87261 } }, { "price_hour": 2, "price_details": { "lmp": 42.31371, "congestion": 0, "energy": 44.23807, "losses": -1.92436 } }] } }, { "node_info": { "node": "DLRDG_SC_LNODE745", "price_date": "2022-03-05", "hourly_prices": [{ "price_hour": 1, "price_details": { "lmp": 43.13443, "congestion": 0, "energy": 45.01141, "losses": -1.87698 } }, { "price_hour": 2, "price_details": { "lmp": 40.51146, "congestion": 0, "energy": 42.00691, "losses": -1.49545 } }] } }] } }

Pricing

There are 4 pricing tiers:

  1. Free/Basic. Provides unlimited access to the caisoregion endpoint, 10 calls/month against the caiso endpoint, and 100 calls/month against the caisonode and caisoprice endpoints.
  2. Pro. Provides unlimited access to the caisoregion endpoint, 100 calls/day against the caiso endpoint, the caisonode endpoint, and the caisoprice endpoint.
  3. Ultra. Provides unlimited access to the caisoregion endpoint, 1000 calls/day against the caiso endpoint, the caisonode endpoint, and the caisoprice endpoint.
  4. Mega. Provides unlimited access to all endpoints.

If you require additional access beyond what is provided in the pricing tier, please contact caisoapi@buildingviz.com.

Future Changes

There may be additional development to this API going forward. If there is enough interest, the next target is to create another endpoint to access the full daily price tar files for download. These tar files would include all 5-minute interval price data per node as well as FMM data, in addition to the already-accessible hourly data.

Followers: 0
API Creator:
Rapid account: Building Viz
BuildingViz
buildingviz
Log In to Rate API
Rating: 5 - Votes: 1