Data Schema Reference
Implementation Tools
Version 1.1
Overview
This document provides the structure and attributes of the Recurve intake data schema to support FLEX Programs’ Implementation Tools for energy-efficiency and/or electrification programs. The schema outlines a consistent structure for representing interval usage and service point metadata.
This schema ensures that all inputs required for eligibility and project value estimates are defined. The schema versioned in this document applies specifically to Implementation Tools use cases and may evolve as new capabilities, technologies, and regulatory requirements are supported.
Entities
This section describes the core data entities that make up the Implementation Tools intake schema and how they relate to one another. Each entity represents a distinct concept required for verifying eligibility criteria and calculating project forecasts. These entities define the minimum set of inputs needed to operationalize the Implementation Tools.
Timestamp Format
All timestamps must use the ISO 8601 format and include the date, time, and timezone.
Supported Formats: YYYY-MM-DDTHH:MM:SS±HH:MM or YYYY-MM-DDTHH:MM:SSZ (UTC)
Examples: 2026-06-26T13:15:30-07:00, 2026-06-26T20:15:30Z
interval_data
Hourly or 15-minute AMI electric data and/or daily interval gas data, for all service points at the population level. This data provides the previous year’s observed load for a given meter and is used to calculate eligibility based on customizable data sufficiency and disqualification thresholds.
File Requirements
- interval_data file names must begin with interval_data and end with the appropriate file type suffix (.csv)
- If any delimiters are present in any field values, all values must be wrapped in double quotes
- Files must have a header row that contains all required fields
- "Null" values should only be passed as empty values
Examples of acceptable file names
- interval_data_20240204.csv
- interval_data_westernRegion.csv
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
| service_point_id | string | Yes | A specific location at a premise where utilities supply service, or where usage occurs. Multiple service_point_ids can belong to a single premise_id. | “9471297459” “df-443-jk” |
| start_time | string | Yes | Start datetime in ISO 8601 format. | ISO 8601 date format |
| end_time | string | Yes | End datetime in ISO 8601 format. | ISO 8601 date format |
| value | number | Yes | The interval data value. | format: float |
| direction | string | No | Direction of energy flow: 'delivered' or 'received'. Assumed to be received if not specified. | enum: "delivered", "received" |
service_points
Customer metadata for all service points at the population level. This data is used alongside interval usage data to calculate eligibility using customizable data sufficiency and disqualification thresholds.
File Requirements
- Service point file names must begin with service_point_ and end with the appropriate file type suffix (.csv)
- If any delimiters are present in any field values, all values must be wrapped in double quotes
- Files must have a header row that contains all required fields, and any applicable non-required fields
- "Null" values should only be passed as empty values
Examples of acceptable file names
- service_point_data__20240204.csv
- service_point_data_westernRegion.csv
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
| service_point_id | string | Yes | A specific location at a premise where utilities supply service, or where usage occurs. Multiple service_point_ids can belong to a single premise_id. | |
| service_point_type | string | Yes | The type of the service point, either Gas or Electric. | enum: “electricity”, “gas” |
| substation | string | No | Substation identifier. | |
| feeder_line | string | No | Feeder line identifier. | |
| timezone | string | No | IANA timezone string (e.g., America/Los_Angeles). | |
| premise_id | string | No | A unique identifier for the premise, if available. | |
| street_1 | string | Yes | ||
| street_2 | string | No | ||
| city_town | string | Yes | ||
| state_province_region | string | Yes | ||
| zip_code_postal_code | string | Yes | ||
| county | string | No | ||
| country | string | No | ||
| naics_code | string | No* | The 6-digit North American Industry Classification System (NAICS). *Required for Commercial programs for comparison group mapping. | |
| sector | string | Yes | The sector classification of the premise. | enum: "residential", "commercial", "Industrial", "agriculture", "other" |
| interval | object | No | The interval at which this meter device records data, if available. | enum: "15min", “30min”, "hourly", "daily" |
| can_export | boolean | No | This service point can export to the grid. This is relevant if solar is installed. | |
| export_start_date | string | No | When did this service point become capable of exporting energy? | ISO 8601 date format |
| rate_code | string | No | The tariff rate code under which this service point operates. Required if there are rate-based eligibility criteria. | |
| equity_flag | string | No | An indicator for customer participation in income-qualified, medical, geographic, or debt-relief assistance programs. Helps identify vulnerable, protected, or subsidized ratepayer segments. | enum: “CARE”, “FERA”, “LIFE_SUPPORT”, “MEDICAL_BASELINE”, “DISADVANTAGED_COMMUNITY”, “TRIBAL”, “MOBILE_HOME” |
| account_id | string | No | A unique identifier for the account. | |
| agreement_id | string | Yes | A unique identifier for the agreement between the service point and the customer. Along with the corresponding date, it identifies the latest customer at the service point. Often referred to as service agreement ID, customer agreement ID, or account agreement ID. | |
| start_date | string | No | Start date of the service point's contract agreement. | ISO 8601 date format |
| end_date | string | null | No | End date of the service point's contract agreement. Null if active. |
past_program_participation (optional)
Past program participation data can be used to prevent duplicative incentives during the enrollment phase. New projects are screened for prior participation in other programs. Default dual enrollment logic checks if the submitted project has participated in another program within the past year, based on the data provided. If the new enrollment date falls within the last 12 months of the previous program's enrollment period, the project will be either ineligible or disqualified, depending on the program rules.
While determining eligibility, checks are made for dual enrollment across all programs within Recurve’s platform, as well as past participation data provided by the client.
File Requirements
- Past program participation file names must begin with program_participations and end with the appropriate file type suffix (.csv)
- If any delimiters are present in any field values, all values must be wrapped in double quotes
- Files must have a header row that contains all required fields, and any applicable non-required fields
- "Null" values should only be passed as empty values
Examples of acceptable file names
- program_participation_data__20240204.csv
- program_participation_doubledip_june26.csv
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
| service_point_id | string | Yes | A specific location at a premise where utilities supply service, or where usage occurs. Multiple service_point_ids can belong to a single premise_id. | |
| enrollment_date | date | Yes | The date that the service point enrolled in the program. | ISO 8601 date format |
| program_name | string | Yes | The name of the program that the service point participated in. |
Change Log
| Version | Date | Change |
|---|---|---|
| 1.1 | 2026-07-09 | Initial version |