Load Profiles
Load profiles represent the electricity consumption patterns throughout the year. Enhub provides standard profiles for common household types, and you can also upload custom profiles for more accurate optimization based on real consumption data.
Understanding Load Profiles
A load profile is an 8760-element array (one value per hour for a full year) representing the power consumption pattern in kilowatts (kW) for each hour. When you specify an annual consumption (e.g., 5000 kWh/year), the load profile is scaled to match that total while preserving the consumption pattern.
Standard Profiles
Enhub includes four built-in load profiles optimized for different household types:
- Name
standard- Type
- string
- Description
Default residential profile. Balanced consumption throughout the day with typical morning and evening peaks. Suitable for households with varied schedules.
- Name
coupleBothAtWork- Type
- string
- Description
Two-person household where both work outside the home during weekdays. Lower daytime consumption (9am-5pm), higher evening peaks. Weekend pattern shows more distributed usage.
- Name
couple1home1work- Type
- string
- Description
Two-person household where one person works from home. More consistent daytime consumption compared to coupleBothAtWork, with moderate peaks in morning and evening.
- Name
3kidsbothwork- Type
- string
- Description
Family with three children where both parents work. Higher overall consumption, strong morning peak (breakfast, school preparation), reduced midday usage, high evening peak (after school, dinner, activities).
Create a custom load profile
Upload a custom load profile based on your actual energy consumption data. The profile must contain exactly 8760 hourly values (one year of data) representing power consumption in kilowatts (kW) for each hour.
Request Format
This endpoint accepts a multipart/form-data request with a CSV file upload.
- Name
csv- Type
- file
- Required
- required
- Description
CSV file containing exactly 8760 rows with a single column of numeric values. Each value represents the power consumption (kW) for that hour of the year.
Requirements:
- Must contain exactly 8760 rows (365 days × 24 hours)
- Single column of numeric values (no headers)
- Values represent instantaneous power in kW (not kWh)
- First row = Jan 1, 12:00 AM - 1:00 AM
- Last row = Dec 31, 11:00 PM - 12:00 AM
CSV Format Example:
0.234 0.198 0.187 0.203 ... (8760 rows total)
Response Fields
- Name
success- Type
- boolean
- Description
Whether the upload and processing succeeded.
- Name
record_id- Type
- string
- Description
Unique identifier for the created custom load profile. Use this ID as the
load_profileparameter when creating a scan withuse_custom_load_profile: true. See Create a scan for details.
- Name
filename- Type
- string
- Description
Original filename of the uploaded CSV file.
- Name
data_points- Type
- number
- Description
Number of hourly data points in the profile (should always be 8760).
- Name
total_kwh- Type
- number
- Description
Sum of all hourly power values, representing the total annual energy consumption implied by the profile. Note: This is the total of the uploaded values and will be scaled when used in a scan based on the
yearly_kwhparameter you provide.
- Name
average_kw- Type
- number
- Description
Average power consumption across all hours (total_kwh / 8760).
- Name
hourly_data- Type
- array
- Description
Array of all 8760 hourly values that were uploaded. Can be used to verify the upload was processed correctly.
Request
curl -X POST https://api.enhub.nl/v1/load-profile \
-H "Authorization: Bearer {token}" \
-F "csv=@my_hourly_consumption.csv"
Response
{
"success": true,
"record_id": "abc123xyz789",
"filename": "my_hourly_consumption.csv",
"data_points": 8760,
"total_kwh": 4832.45,
"average_kw": 0.551,
"hourly_data": [
0.234,
0.198,
0.187,
0.203,
"... 8756 more values ..."
]
}
Response
{
"error": "Failed to get uploaded file",
"message": "csv file is required"
}
Response
{
"error": "Failed to create profile record",
"message": "<REASON OR MESSAGE>"
}
List custom load profiles
Retrieve a paginated list of all your custom load profiles. This endpoint returns metadata about each profile including statistics, allowing you to browse and select profiles without downloading the full 8760 hourly values.
Query Parameters
- Name
page- Type
- number
- Optional
- optional
- Description
Page number to retrieve (1-indexed). Use this to navigate through multiple pages of results.
Default:
1
- Name
per_page- Type
- number
- Optional
- optional
- Description
Number of profiles to return per page. Maximum allowed is 100.
Default:
20
Response Fields
- Name
profiles- Type
- array
- Description
Array of custom load profile objects. Each profile contains:
- Name
record_id- Type
- string
- Description
Unique identifier for the profile. Use this as the
load_profileparameter when creating a scan withuse_custom_load_profile: true.
- Name
filename- Type
- string
- Description
Original filename of the uploaded CSV file.
- Name
total_kwh- Type
- number
- Description
Total annual energy consumption (kWh) represented by the profile. This is the sum of all 8760 hourly values.
- Name
average_kw- Type
- number
- Description
Average power consumption (kW) across all hours. Calculated as
total_kwh / 8760.
- Name
created- Type
- string
- Description
ISO 8601 timestamp when the profile was created.
- Name
updated- Type
- string
- Description
ISO 8601 timestamp when the profile was last updated.
- Name
pagination- Type
- object
- Description
Pagination metadata for navigating through results.
- Name
page- Type
- number
- Description
Current page number.
- Name
per_page- Type
- number
- Description
Number of profiles per page.
- Name
total- Type
- number
- Description
Total number of profiles available.
- Name
total_pages- Type
- number
- Description
Total number of pages available.
- Name
has_next- Type
- boolean
- Description
Whether there is a next page available.
- Name
has_prev- Type
- boolean
- Description
Whether there is a previous page available.
Request
# Get first page (default)
curl -X GET 'https://api.enhub.nl/v1/load-profile' \
-H "Authorization: Bearer {token}"
# Get specific page with custom page size
curl -X GET 'https://api.enhub.nl/v1/load-profile?page=2&per_page=10' \
-H "Authorization: Bearer {token}"
Response
{
"profiles": [
{
"record_id": "abc123xyz789",
"filename": "my_house_2024.csv",
"total_kwh": 4832.45,
"average_kw": 0.551,
"created": "2024-10-14T12:00:00Z",
"updated": "2024-10-14T12:00:00Z"
},
{
"record_id": "def456uvw012",
"filename": "summer_consumption.csv",
"total_kwh": 3245.78,
"average_kw": 0.370,
"created": "2024-09-20T08:30:00Z",
"updated": "2024-09-20T08:30:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 2,
"total_pages": 1,
"has_next": false,
"has_prev": false
}
}
Response
{
"profiles": [],
"pagination": {
"page": 1,
"per_page": 20,
"total": 0,
"total_pages": 0,
"has_next": false,
"has_prev": false
}
}
Response
{
"error": "Authentication required",
"message": null
}
Response
{
"error": "Failed to fetch profiles",
"message": "<REASON OR MESSAGE>"
}
Using Custom Profiles in Scans
Once you've created a custom load profile, use the returned record_id when creating a scan. You can also retrieve the record_id of previously uploaded profiles using the List custom load profiles endpoint.
{
"goal": "self-sufficiency",
"yearly_kwh": 5000,
"load_profile": "abc123xyz789",
"use_custom_load_profile": true,
// ... other parameters
}
The yearly_kwh parameter will scale your custom profile to match the specified annual consumption while preserving your consumption pattern. For example, if your uploaded profile totals 4832 kWh but you specify yearly_kwh: 5000, all hourly values will be scaled by a factor of ~1.035 (5000 / 4832).
Tip: Use the total_kwh value from the list endpoint to see what annual consumption your profile represents.
You can then decide whether to use that value or scale it to a different yearly_kwh when creating your scan.
See the Create a scan documentation for complete details on using custom load profiles in optimization scans.
Best Practices
Data Quality: The accuracy of your optimization depends on the quality of your load profile data. If possible, use actual smart meter data from a full year to capture seasonal variations.
Preparing Your CSV File
- Obtain hourly consumption data from your smart meter or energy provider
- Ensure exactly 8760 rows (one full non-leap year)
- Use power values (kW), not energy values (kWh per hour)
- Maintain chronological order starting from January 1st, 12:00 AM
- Remove headers - the CSV should contain only numeric values
- Use decimal points (not commas) for decimal values:
0.234not0,234
When to Use Custom Profiles
- You have actual smart meter data from your home
- Your consumption pattern differs significantly from standard profiles
- You're analyzing commercial or industrial sites with unique usage patterns
- You want the most accurate optimization results possible
When Standard Profiles Are Sufficient
- You don't have historical consumption data
- You're doing preliminary analysis or comparison
- Your household matches one of the standard profile types
- You're optimizing for a new building without usage history