Get Energy Tariff Leads Endpoint
Overview
Retrieves energy tariff leads with structured data extracted from the lead submission form. The response includes contact details, company information, tariff configurations and if relevant the associated solar and wind asset specifications plus the provided production profiles. This makes the endpoint the primary integration point for accessing asset production profiles tied to a lead, in addition to the lead data itself.
Use Cases
- CRM Integration — Sync lead data to external CRM systems
- Lead Management — Monitor and process incoming energy tariff inquiries
- Partner Access — Provide secure, scoped access to lead data for business partners
- Analytics & Reporting — Extract lead data for analysis and reporting
- Document Access — Download original and processed production profile files together with attachment metadata such as timezone, unit, coverage, and resolution
Key Features
- M2M (Machine-to-Machine) authentication support
- Advanced filtering (company, status, dates, contact info)
- Pagination support (up to 100 records per request)
- Rate limiting (100 requests per minute)
- Structured tariff data with discriminated union pattern
- S3 presigned URLs for offer documents
- Asset file attachments (production profiles, certificates, technical specifications, etc.)
- Secure attachment download via dedicated proxy endpoint (302 redirect)
- Attachment processing status tracking with profile metadata (coverage/resolution) and metadata suggestions
Authentication
Requires a Bearer token with the read:leads scope and the LeadsAccess policy. See Getting Started → Authentication for how to obtain a token.
Endpoint
Get Energy Tariff Leads
GET /api/crm/leads/energy-tariff
Base URL: https://<YOUR_PROJECT_DOMAIN>/api/crm/leads/energy-tariff
Rate Limiting: 100 requests per minute (M2MPolicy). Response headers: X-RateLimit-Remaining, X-RateLimit-Reset.
Request Headers
| Header | Required | Value | Description |
|---|---|---|---|
Authorization |
Yes | Bearer {access_token} |
JWT access token from Auth0 |
Content-Type |
No | application/json |
Content type for request |
Query Parameters
All query parameters are optional and can be combined for advanced filtering.
| Parameter | Type | Description | Example |
|---|---|---|---|
companyId |
Guid | Filter by specific company ID | 123e4567-e89b-12d3-a456-426614174000 |
status |
LeadsStatusEnum | Filter by lead status (0=Pending, 1=Sent, 2=Failed, 3=Processing, 4=Cancelled) | 1 |
leadType |
LeadsTypeEnum | Filter by lead type (0=None, 1=Information, 2=RequestOffer) | 2 |
dateFrom |
DateTime (ISO 8601) | Filter leads created from this date (UTC) | 2024-01-01T00:00:00Z |
dateTo |
DateTime (ISO 8601) | Filter leads created until this date (UTC) | 2024-12-31T23:59:59Z |
emailContains |
string | Include only emails containing this text (case-insensitive) | @example.com |
emailExcludes |
string | Exclude emails containing this text (case-insensitive) | test |
firstName |
string | Filter by first name (contains, case-insensitive) | John |
lastName |
string | Filter by last name (contains, case-insensitive) | Doe |
skip |
int | Number of records to skip (pagination) | 0 |
take |
int | Number of records to return (max 100) | 50 |
Response Structure
Root Response Object
{
"leads": [...],
"totalCount": 150,
"skip": 0,
"take": 50
}
| Field | Type | Description |
|---|---|---|
leads |
array | Array of EnergyTariffLeadResponse objects |
totalCount |
int | Total number of leads matching the filter criteria |
skip |
int | Current skip value (pagination) |
take |
int | Current take value (pagination) |
Lead Object
{
"id": "guid",
"companyId": "guid",
"assetId": "guid | null",
"offerFileName": "Direct_Marketing_Offer_Trace_2026.pdf",
"offerUrl": "/api/crm/leads/energy-tariff/{id}/offer/download",
"contactAndCompanyInfo": {...},
"leadInfo": {...},
"tariffData": {...}
}
| Field | Type | Description |
|---|---|---|
id |
Guid | Unique lead identifier |
companyId |
Guid | Associated TRACE internal company ID |
assetId |
Guid? | Associated energy tariff asset ID (nullable) |
offerFileName |
string? | Offer PDF file name (nullable) |
offerUrl |
string? | API path returning a 302 redirect to the S3 presigned offer URL (nullable) |
Contact and Company Info
| Field | Type | Description |
|---|---|---|
firstName |
string | Contact first name |
lastName |
string | Contact last name |
email |
string | Contact email address |
phoneNumber |
string? | Contact phone number (nullable) |
preferredWayOfCommunication |
PreferredWayOfCommunicationEnum | 0=Email, 1=Phone |
language |
string | Preferred language code (e.g., "en", "de") |
companyName |
string | Company name |
companyAddress |
string | Company street address |
companyCity |
string | Company city |
companyZipCode |
string | Company postal code |
companyCountry |
string | Company country |
actorRole |
string | Role of company: Producer or Consumer |
companyLocation |
string | Coordinates of company address |
currentDate |
string | Date of lead creation (formatted) |
Lead Metadata
| Field | Type | Description |
|---|---|---|
status |
LeadsStatusEnum | Status of the automated lead notification email sent when a lead is submitted (0–4) |
leadType |
LeadsTypeEnum | Type of lead inquiry (0–2) |
termsAndConditions |
bool | Terms acceptance status |
contactPermission |
bool | Contact permission granted |
recipientEmail |
string | Email recipient (internal) |
errorMessage |
string? | Error message if status=Failed (nullable) |
createdAt |
DateTime | Lead creation timestamp (UTC) |
sentAt |
DateTime? | Email sent timestamp (UTC, nullable) |
templateName |
string? | Email template name used for the lead notification (nullable) |
Tariff Data Object (Discriminated Union)
The tariff data structure varies based on tariffType. Only the field matching the active tariff type will be non-null.
| Field | Type | Description |
|---|---|---|
tariffType |
TariffTypeEnum | Type of tariff (0–6) |
fixed |
FixedTariffConfig? | Config for Fixed Tariff type (nullable) |
dynamic |
DynamicTariffConfig? | Config for Dynamic Tariff type (nullable) |
directMarketing |
DirectMarketingTariffConfig? | Config for DirectMarketing type (nullable) |
dynamicMarketAccess |
DynamicMarketAccessTariffConfig? | Config for DynamicMarketAccess type (nullable) |
ppaUpstream |
PPAUpstreamTariffConfig? | Config for PPAUpstream type (nullable) |
ppaDownstream |
PPADownstreamTariffConfig? | Config for PPADownstream type (nullable) |
solarAssets |
array | Associated solar assets (each includes attachments array) |
windAssets |
array | Associated wind assets (each includes attachments array) |
priceInfo |
TariffPriceInfo | Pricing information |
Direct Marketing Configuration (when tariffType = 3)
| Field | Type | Description |
|---|---|---|
directMarketingType |
DirectMarketingTypeEnum | 1=EEG, 10=Other |
directMarketingEnumerationType |
DirectMarketingEnumerationTypeEnum | 1=Spot, 2=MarketValue |
serviceFeeType |
ServiceFeeTypeEnum | 1=Absolute, 2=Relative |
plannedStartDate |
DateTime? | Contract start date (nullable) |
contractPeriod |
string | Contract duration descriptor (e.g., "24" or "2026Q4") |
guaranteeOfOrigin |
OriginEnum? | 0=None, 1=Customer, 2=Provider (nullable) |
Dynamic Market Access Configuration (when tariffType = 4)
| Field | Type | Description |
|---|---|---|
serviceFeeType |
ServiceFeeTypeEnum? | 1=Absolute, 2=Relative (nullable) |
contractPeriod |
string | Contract duration descriptor |
forecastingOwnership |
OriginEnum? | 1=Customer, 2=Provider (nullable) |
intradayAdjustmentByProvider |
bool? | Whether intraday adjustment is handled by provider (nullable) |
balancingVolumes |
BalancingVolumesEnum? | 1=FlatRate, 2=ActualCosts (nullable) |
downpaymentAccepted |
bool? | Whether downpayment is accepted (nullable) |
interestToReceivePPAOffer |
bool? | Customer interest in receiving PPA offers (nullable) |
receiveGOsForPurchasedElectricity |
bool? | Whether customer receives GOs for purchased electricity (nullable) |
balancingGroupRequired |
bool? | Whether balancing group is required (nullable) |
supplyIncludingGridUsage |
bool? | Whether supply includes grid usage (nullable) |
meteredLoadProfilesCount |
int? | Number of metered load profiles (nullable) |
meteredLoadProfilesOperatorsCount |
int? | Number of metered load profile operators (nullable) |
standardLoadProfilesCount |
int? | Number of standard load profiles (nullable) |
standardLoadProfilesOperatorsCount |
int? | Number of standard load profile operators (nullable) |
energyConsumption |
EnergyConsumptionConfig? | Energy consumption breakdown (nullable) |
energyProduction |
EnergyProductionConfig? | Energy production breakdown (nullable) |
Energy Consumption fields: annualConsumptionKwh, thirdPartyKwh, futureMarketKwh, spotMarketKwh, ownProductKwh — all decimal?, all in kWh.
Energy Production fields: solarEnergyProductionPA, windEnergyProductionPA, cogenerationEnergyProductionPA, otherEnergyProductionPA — all decimal?, all in kWh per annum.
PPA Upstream Configuration (when tariffType = 5)
| Field | Type | Description |
|---|---|---|
technology |
Technology | 1=Solar, 3=Wind |
solarAssetIds |
Guid[] | Array of associated solar asset IDs |
windAssetIds |
Guid[] | Array of associated wind asset IDs |
ppaStructure |
PPAStructureEnum? | 1=PayAsForecasted, 2=PayAsProduced (nullable) |
negativePrices |
NegativePriceHoursEnum? | 1=Included, 2=Excluded (nullable) |
plannedStartDate |
DateTime? | Contract start date (nullable) |
contractPeriod |
string | Contract duration descriptor |
guaranteeOfOrigin |
OriginEnum? | 0=None, 1=Customer, 2=Provider (nullable) |
intendedShareOfFixPrice |
decimal? | Intended share of fixed price (0.0–1.0, nullable) |
PPA Downstream Configuration (when tariffType = 6)
| Field | Type | Description |
|---|---|---|
technology |
Technology | 1=Solar, 3=Wind |
energyVolumePA |
decimal? | Annual energy volume in kWh (nullable) |
energyCapacityPA |
decimal? | Annual energy capacity in kW (nullable) |
ppaIntegration |
bool? | Whether PPA integration is enabled (nullable) |
endOfContractTerm |
DateTime? | End date of contract term (nullable) |
ppaStructure |
PPAStructureEnum? | 1=PayAsForecasted, 2=PayAsProduced (nullable) |
negativePrices |
NegativePriceHoursEnum? | 1=Included, 2=Excluded (nullable) |
plannedStartDate |
DateTime? | Contract start date (nullable) |
contractPeriod |
string | Contract duration descriptor |
guaranteeOfOrigin |
OriginEnum? | 0=None, 1=Customer, 2=Provider (nullable) |
dedicatedAssetCriteria |
bool? | Whether delivery from dedicated asset is intended (nullable) |
additionalityCriteria |
bool? | Whether additionality criteria (RE100, RFNBO) need to be fulfilled (nullable) |
Solar Assets
| Field | Type | Description |
|---|---|---|
id |
Guid | Solar asset unique identifier |
technology |
string | Always "Solar" |
installedCapacity |
decimal? | Installed capacity in kWp (nullable) |
applicableValue |
decimal? | Applicable power value in kWp (nullable) |
installationDate |
int? | Year of installation (nullable) |
direction |
string? | Compass orientation (enum description, e.g. "South", "North-East"). See DirectionEnum. Nullable. |
angle |
int? | Tilt angle in degrees from horizontal (e.g. 30). See AngleEnum. Nullable. |
location |
SolarAssetLocation | Geographic location details |
maStREntities |
array? | MaStR registry information (nullable) |
attachments |
array | Array of AssetAttachment objects. Empty array if none. |
Asset-level vs. MaStR-level orientation: The asset level values i.e.
directionandangleare defined by the largest element of the asset and can be manually adopted by the user. The MaStR registry may also report its own orientation values (maStRDirection,maStRAngle) insidemaStREntities. These may differ from the asset-level fields.
Solar Asset Location fields: latitude, longitude, address, zipCode, country, state, city, description (string?, free-text location description, nullable).
Solar MaStR Entity fields: maStRId, unitMasterNumber, locationMasterNumber, plantOperatorMasterNumber, eegMasterNumber, powerGenerationUnitName, grossPower (kW), netRatedPower (kW), assignedActivePowerInverter (kW), numberOfModules, latitude, longitude, maStRDirection, maStRAngle, maStRFeedInType, maStRStatus, lastUpdateDate.
Wind Assets
| Field | Type | Description |
|---|---|---|
id |
Guid | Wind asset unique identifier |
technology |
string | Always "Wind" |
installedCapacity |
decimal? | Installed capacity in kW (nullable) |
applicableValue |
decimal? | Applicable power value in kW (nullable) |
installationDate |
int? | Year of installation (nullable) |
hubHeight |
decimal | Turbine hub height in meters |
ratedPower |
decimal | Rated power output in kW |
rotorDiameter |
decimal | Rotor diameter in meters |
numberOfTurbines |
int | Number of wind turbines |
location |
WindAssetLocation | Geographic location details |
maStREntities |
array? | MaStR registry information (nullable) |
attachments |
array | Array of AssetAttachment objects. Empty array if none. |
Wind Asset Location fields: latitude, longitude, address, zipCode, country, state, city, description (string?, free-text location description, nullable).
Wind MaStR Entity fields: maStRId, unitMasterNumber, locationMasterNumber, plantOperatorMasterNumber, eegMasterNumber, powerGenerationUnitName, grossPower (kW), netRatedPower (kW), latitude, longitude, maStRFeedInType, maStRStatus, lastUpdateDate.
Asset Attachment Object
{
"id": "att-001-uuid",
"fileName": "production_profile_2025.csv",
"attachmentType": "ProductionProfile",
"processingStatus": "Completed",
"timeZone": "Europe/Berlin",
"measurementType": "Energy",
"unit": "KWh",
"coverageStart": "2025-01-01T00:00:00Z",
"coverageEnd": "2025-12-31T23:45:00Z",
"resolution": "PT15M",
"timeZoneStatus": "UserDefined",
"measurementTypeStatus": "SystemDefined",
"unitStatus": "Initial",
"initialTimeZone": null,
"initialMeasurementType": "Power",
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-001-uuid/download?type=original",
"processedDownloadUrl": "/api/crm/attachments/att-001-uuid/download?type=processed",
"suggestions": [...]
}
| Field | Type | Description |
|---|---|---|
id |
Guid | Unique attachment identifier. Use in the download endpoint. |
fileName |
string | Original file name as uploaded |
attachmentType |
AttachmentTypeEnum (string) | "ProductionProfile", "Certificate", "TechnicalSpecification", "MaintenanceReport", "PerformanceData", "Other" |
processingStatus |
ProcessingStatusEnum (string) | Current processing status |
timeZone |
string? | IANA timezone of the data (e.g. "Europe/Berlin"). Only relevant for ProductionProfile. Nullable. |
measurementType |
MeasurementTypeEnum (string)? | "Energy" or "Power". Only relevant for ProductionProfile. Nullable. |
unit |
UnitEnum (string)? | Unit of measurement ("KWh", "MWh", "KW", "MW", etc.). Only relevant for ProductionProfile. Nullable. |
coverageStart |
string? (ISO 8601) | Start timestamp of the production profile time series. Populated only when processingStatus = "Completed". Nullable. |
coverageEnd |
string? (ISO 8601) | End timestamp of the production profile time series. Populated only when processingStatus = "Completed". Nullable. |
resolution |
string? | Time resolution in ISO 8601 duration format (e.g. "PT15M", "PT1H", "P1D"). Populated only when processingStatus = "Completed". Nullable. |
timeZoneStatus |
AttachmentMetadataStatusEnum (string) | How timeZone was determined |
measurementTypeStatus |
AttachmentMetadataStatusEnum (string) | How measurementType was determined |
unitStatus |
AttachmentMetadataStatusEnum (string) | How unit was determined |
initialTimeZone |
string? | Previous timeZone before user accepted a system suggestion. Non-null only when timeZoneStatus = "SystemDefined". |
initialMeasurementType |
MeasurementTypeEnum (string)? | Previous measurementType before user accepted a system suggestion. Non-null only when measurementTypeStatus = "SystemDefined". |
initialUnit |
UnitEnum (string)? | Previous unit before user accepted a system suggestion. Non-null only when unitStatus = "SystemDefined". |
originalDownloadUrl |
string | API path to download the original uploaded file. |
processedDownloadUrl |
string? | API path to download the processed output file. null if processing has not produced output yet. |
suggestions |
array? | Metadata suggestions from the processing pipeline. null if no suggestions are available. |
Attachment Suggestion Object
| Field | Type | Description |
|---|---|---|
field |
string | Name of the metadata field: "timeZone", "measurementType", or "unit" |
suggestedValue |
string | Value detected by the processing pipeline |
reason |
string | Human-readable explanation of why this value was suggested |
Suggestions are only present for fields still in
"Initial"status where the pipeline detected a different value.
AttachmentMetadataStatusEnum Lifecycle
| Status | Meaning |
|---|---|
Initial |
Not yet confirmed. A suggestions entry may be present. |
UserDefined |
The user explicitly set this value overwriting a system proposal |
SystemDefined |
The user accepted a system-suggested value. Previous value stored in initial* field. |
ConfirmedMatch |
System detected the stored value already matches the file metadata. No user action required. |
timeZoneStatusnever reachesConfirmedMatch— timezone cannot be inferred from file metadata.
Processed Production Profile Format
When attachmentType = "ProductionProfile" and processingStatus = "Completed", the file available at processedDownloadUrl is a cleaned CSV with a fixed structure. This is the format your integration should consume.
| Column | Type | Description |
|---|---|---|
DateTime [UTC] |
string (ISO 8601 with UTC offset) | e.g. 2024-01-01 00:15:00+00:00 — always UTC, ascending order |
Profilwert [<unit>] |
float (2 d.p.) | Production value; unit is embedded in the column name, e.g. Profilwert [kWh] which is the standard. |
Abregelung |
float (2 d.p.) | Curtailment / redispatch value. Present only when the source file contained a curtailment column. The unit is generally also in kWh |
DateTime [UTC],Profilwert [kWh]
2024-01-01 00:00:00+00:00,76.04
2024-01-01 00:15:00+00:00,8.20
2024-01-01 00:30:00+00:00,67.80
Tariff Price Info
The Tariff price info section contains information about the prices the user has seen for the given configuration. This can used to keep track of the inital price shown compared to potential later updates. If no prices are uploaded to the system this section is empty.
| Field | Type | Description |
|---|---|---|
priceHeader1 |
string | Primary price header label |
priceHeader2 |
string | Secondary price header label |
defaultBasicFee |
decimal | Default basic fee amount |
defaultGuaranteeFee |
decimal | Default guarantee of origin fee |
locationFactor |
string? | Location factor (only for MarketValue type) |
energyPrices |
array | Year-by-year energy pricing |
Energy price item structure varies by tariff type. For absolute service fee: { "year": 2024, "fixedFee": 12.50 }. For relative service fee: { "year": 2024, "spotPercent": 95.5, "variableFixedFee": 2.50 }.
Download Attachment Endpoint
A dedicated endpoint generates a short-lived presigned S3 URL and responds with an HTTP 302 redirect to the file.
GET /api/crm/attachments/{attachmentId}/download
Rate Limiting: Same LeadsAccess policy and read:leads scope as the leads endpoint.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
attachmentId |
Guid | Yes | The id from solarAssets[].attachments[].id or windAssets[].attachments[].id |
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
type |
string | No | original |
original — the file uploaded by the user; processed — the cleaned/processed output |
Responses
| Status | Description |
|---|---|
302 Found |
Redirect to a presigned S3 URL. Follow the Location header to download the file. |
404 Not Found |
Attachment not found, or type=processed requested but no processed file exists yet. |
401 Unauthorized |
Missing or invalid access token. |
403 Forbidden |
Insufficient scope. |
Enum Definitions
LeadsStatusEnum
| Value | Name | Description |
|---|---|---|
| 0 | Pending | Lead created, awaiting processing |
| 1 | Sent | Email notification sent successfully |
| 2 | Failed | Email sending failed |
| 3 | Processing | Lead currently being processed |
| 4 | Cancelled | Lead cancelled or invalid |
LeadsTypeEnum
| Value | Name | Description |
|---|---|---|
| 0 | None | No specific type |
| 1 | Information | General information request |
| 2 | RequestOffer | Formal offer request |
LeadsAssetTypeEnum
| Value | Name | Description |
|---|---|---|
| 0 | None | No asset type |
| 1 | Solar | Solar asset |
| 2 | Storage | Storage asset |
| 3 | Wind | Wind asset |
| 4 | Tariff | Tariff asset |
PreferredWayOfCommunicationEnum
| Value | Name | Description |
|---|---|---|
| 0 | Contact via email | |
| 1 | Phone | Contact via phone |
TariffTypeEnum
| Value | Name | Description |
|---|---|---|
| 0 | None | No tariff type |
| 1 | Fixed | Fixed price electricity tariff |
| 2 | Dynamic | Dynamic priced electricity tariff |
| 3 | DirectMarketing | Direct marketing |
| 4 | DynamicMarketAccess | Dynamic market access |
| 5 | PPAUpstream | Power Purchase Agreement — Upstream |
| 6 | PPADownstream | Power Purchase Agreement — Downstream |
DirectMarketing Enums
| Enum | Value | Name |
|---|---|---|
| DirectMarketingTypeEnum | 1 | EEG |
| DirectMarketingTypeEnum | 10 | Other |
| DirectMarketingEnumerationTypeEnum | 1 | Spot |
| DirectMarketingEnumerationTypeEnum | 2 | MarketValue |
| ServiceFeeTypeEnum | 1 | Absolute |
| ServiceFeeTypeEnum | 2 | Relative |
| OriginEnum | 0 | None |
| OriginEnum | 1 | Customer |
| OriginEnum | 2 | Provider |
PPA Configuration Enums
| Enum | Value | Name |
|---|---|---|
| Technology | 1 | Solar |
| Technology | 3 | Wind |
| PPAStructureEnum | 1 | PayAsForecasted |
| PPAStructureEnum | 2 | PayAsProduced |
| NegativePriceHoursEnum | 1 | Included |
| NegativePriceHoursEnum | 2 | Excluded |
Solar Panel Orientation
DirectionEnum — returned as string description:
| Returned Value | Int |
|---|---|
"None" |
0 |
"North" |
1 |
"North-East" |
2 |
"East" |
3 |
"South-East" |
4 |
"South" |
5 |
"South-West" |
6 |
"West" |
7 |
"North-West" |
8 |
"East-West" |
9 |
"Tracker" |
100 |
AngleEnum — returned as integer (e.g. 30): valid values are 0, 10, 20, 25, 30, 40, 50, 60, 70, 80, 90.
Attachment Enums
All attachment enum fields are returned as string values in the JSON response.
AttachmentTypeEnum: ProductionProfile, Certificate, TechnicalSpecification, MaintenanceReport, PerformanceData, Other
ProcessingStatusEnum:
| Value | Description |
|---|---|
PendingUpload |
Attachment record created; file upload not yet completed |
Uploaded |
File uploaded to S3; awaiting processing |
Scanning |
Security (antivirus) scan in progress |
Processing |
File dispatched to processing pipeline |
Completed |
Processing finished; processedDownloadUrl is available |
PartialSuccess |
Processing completed with suggestions; user action may be required |
Failed |
Processing failed |
SuspiciousFile |
Antivirus scan detected a threat; file blocked |
CleaningFailed |
Processing pipeline returned an error |
MeasurementTypeEnum: Energy, Power, NotSure
UnitEnum: Wh, KWh, MWh, GWh, W, KW, MW, GW, NotSure
Error Responses
| Status | Cause | Description |
|---|---|---|
400 Bad Request |
Invalid query parameters | Check take is between 1–100; use ISO 8601 for dates; verify enum values |
401 Unauthorized |
Missing or expired token | Obtain a new token |
403 Forbidden |
Insufficient scope | Verify read:leads scope was requested |
404 Not Found |
Attachment not found or processed file not available | Check attachmentId and processingStatus before requesting ?type=processed |
429 Too Many Requests |
Rate limit exceeded (>100 req/min) | Implement exponential backoff; respect Retry-After header |
500 Internal Server Error |
Server-side error | Retry with exponential backoff |
400 example:
{
"errors": {
"take": ["The field take must be between 1 and 100."],
"dateFrom": ["The dateFrom field is not a valid date."]
},
"title": "One or more validation errors occurred."
}
429 response headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705320000
Retry-After: 60
Examples
Example 1: Get All Energy Tariff Leads
curl -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/leads/energy-tariff" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..." \
-H "Content-Type: application/json"
Response (one lead with two solar assets, one wind asset, and a certificate attachment):
{
"leads": [
{
"id": "3aec77a8-db47-45fa-9df6-1f382c0d0fe5",
"companyId": "9d8cd92f-41d6-4b11-bcb7-af020f1c7547",
"assetId": "ca2a6228-202a-494a-afa6-a25e1fc3c0e0",
"offerFileName": "Direct_Marketing_Offer_Trace_2026.pdf",
"offerUrl": "/api/crm/leads/energy-tariff/3aec77a8-db47-45fa-9df6-1f382c0d0fe5/offer/download",
"contactAndCompanyInfo": {
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"phoneNumber": "+491234567890",
"preferredWayOfCommunication": 0,
"language": "de",
"actorRole": "Producer",
"companyName": "Trace GmbH",
"companyAddress": "Kleine Reichenstraße 1",
"companyCity": "Hamburg",
"companyZipCode": "20457",
"companyCountry": "de",
"companyLocation": "53.548230, 9.998620",
"currentDate": "2026-04-14"
},
"leadInfo": {
"status": 1,
"leadType": 2,
"termsAndConditions": true,
"contactPermission": true,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2026-04-10T10:30:00Z",
"sentAt": "2026-04-10T10:31:45Z",
"templateName": "DirectMarketingOffer_DE"
},
"tariffData": {
"tariffType": 3,
"directMarketing": {
"directMarketingType": 1,
"directMarketingEnumerationType": 1,
"serviceFeeType": 1,
"plannedStartDate": "2026-06-01T00:00:00Z",
"contractPeriod": "24",
"guaranteeOfOrigin": 1
},
"solarAssets": [
{
"id": "solar-001-uuid",
"technology": "Solar",
"installedCapacity": 250.5,
"applicableValue": 250.5,
"installationDate": 2020,
"direction": "South",
"angle": 30,
"location": {
"latitude": 52.5200,
"longitude": 13.4050,
"address": "Hauptstraße 123",
"zipCode": "10115",
"country": "Germany",
"state": "Berlin",
"city": "Berlin",
"description": "Rooftop installation - South facing"
},
"maStREntities": [...],
"attachments": [
{
"id": "att-001-uuid",
"fileName": "production_profile_solar1_2025.csv",
"attachmentType": "ProductionProfile",
"processingStatus": "Completed",
"timeZone": "Europe/Berlin",
"measurementType": "Energy",
"unit": "KWh",
"coverageStart": "2025-01-01T00:00:00Z",
"coverageEnd": "2025-12-31T23:45:00Z",
"resolution": "PT15M",
"timeZoneStatus": "UserDefined",
"measurementTypeStatus": "SystemDefined",
"unitStatus": "Initial",
"initialTimeZone": null,
"initialMeasurementType": "Power",
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-001-uuid/download?type=original",
"processedDownloadUrl": "/api/crm/attachments/att-001-uuid/download?type=processed",
"suggestions": [
{
"field": "unit",
"suggestedValue": "KWh",
"reason": "Detected from file metadata: power_unit=kWh"
}
]
}
]
},
{
"id": "solar-002-uuid",
"technology": "Solar",
"installedCapacity": 180.0,
"applicableValue": 180.0,
"installationDate": 2022,
"direction": "South-East",
"angle": 25,
"location": {
"latitude": 52.5310,
"longitude": 13.3860,
"address": "Nebengebäude 1",
"zipCode": "10117",
"country": "Germany",
"state": "Berlin",
"city": "Berlin",
"description": "Carport installation"
},
"maStREntities": [],
"attachments": [
{
"id": "att-002-uuid",
"fileName": "solarpark_eeg_certificate_2024.pdf",
"attachmentType": "Certificate",
"processingStatus": "Uploaded",
"timeZone": null,
"measurementType": null,
"unit": null,
"coverageStart": null,
"coverageEnd": null,
"resolution": null,
"timeZoneStatus": "Initial",
"measurementTypeStatus": "Initial",
"unitStatus": "Initial",
"initialTimeZone": null,
"initialMeasurementType": null,
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-002-uuid/download?type=original",
"processedDownloadUrl": null,
"suggestions": null
}
]
}
],
"windAssets": [
{
"id": "wind-001-uuid",
"technology": "Wind",
"installedCapacity": 3000.0,
"applicableValue": 3000.0,
"installationDate": 2018,
"hubHeight": 100.0,
"ratedPower": 3000.0,
"rotorDiameter": 112.0,
"numberOfTurbines": 1,
"location": {
"latitude": 53.5500,
"longitude": 10.0100,
"address": "Hafenstraße 45",
"zipCode": "21073",
"country": "Germany",
"state": "Hamburg",
"city": "Hamburg",
"description": null
},
"maStREntities": [],
"attachments": []
}
],
"priceInfo": {
"priceHeader1": "Fixed Service Fee",
"priceHeader2": "Annual Costs",
"defaultBasicFee": 150.00,
"defaultGuaranteeFee": 0.35,
"locationFactor": null,
"energyPrices": [
{ "year": 2026, "fixedFee": 12.50 },
{ "year": 2027, "fixedFee": 12.75 }
]
}
}
}
],
"totalCount": 1,
"skip": 0,
"take": 50
}
Example 2: Download an Attachment
After retrieving an attachment id from the leads response:
Download original uploaded file:
curl -L -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/attachments/att-001-uuid/download?type=original" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..." \
-o "production_profile_2025.csv"
Response (302 Redirect):
HTTP/1.1 302 Found
Location: https://s3.eu-central-1.amazonaws.com/bucket/attachments/original/production_profile_2025.csv?X-Amz-Expires=10800...
Content-Disposition: attachment; filename="production_profile_2025.csv"
The -L flag makes curl follow the redirect automatically. The presigned S3 URL is valid for 3 hours.
Download processed/cleaned file:
curl -L -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/attachments/att-001-uuid/download?type=processed" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..." \
-o "production_profile_2025_processed.csv"
Only request
?type=processedwhenprocessingStatusisCompleted. Otherwise the endpoint returns404 Not Found.
Example 3: Filter by Company and Date Range
curl -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/leads/energy-tariff?companyId=123e4567-e89b-12d3-a456-426614174000&dateFrom=2024-01-01T00:00:00Z&dateTo=2024-01-31T23:59:59Z&status=1" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
Response:
{
"leads": [
{
"id": "b2f1c3e4-aa11-4b22-9c33-d44e55f66a77",
"companyId": "123e4567-e89b-12d3-a456-426614174000",
"assetId": "e5f6a7b8-cc99-4d00-ae11-bf22c033d044",
"offerFileName": null,
"offerUrl": null,
"contactAndCompanyInfo": {
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"phoneNumber": "+4989123456789",
"preferredWayOfCommunication": 1,
"language": "de",
"actorRole": "Producer",
"companyName": "Trace GmbH",
"companyAddress": "Maximilianstraße 5",
"companyCity": "Munich",
"companyZipCode": "80333",
"companyCountry": "de",
"companyLocation": "48.139286, 11.574906",
"currentDate": "2024-01-15"
},
"leadInfo": {
"status": 1,
"leadType": 2,
"termsAndConditions": true,
"contactPermission": true,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2024-01-15T08:20:00Z",
"sentAt": "2024-01-15T08:21:30Z",
"templateName": "DirectMarketingOffer_DE"
},
"tariffData": {
"tariffType": 3,
"directMarketing": {
"directMarketingType": 1,
"directMarketingEnumerationType": 1,
"serviceFeeType": 1,
"plannedStartDate": "2024-04-01T00:00:00Z",
"contractPeriod": "12",
"guaranteeOfOrigin": 1
},
"solarAssets": [
{
"id": "e5f6a7b8-cc99-4d00-ae11-bf22c033d044",
"technology": "Solar",
"installedCapacity": 180.0,
"applicableValue": 180.0,
"installationDate": 2021,
"direction": "South",
"angle": 35,
"location": {
"latitude": 48.139286,
"longitude": 11.574906,
"address": "Maximilianstraße 5",
"zipCode": "80333",
"country": "Germany",
"state": "Bavaria",
"city": "Munich",
"description": null
},
"maStREntities": [],
"attachments": []
}
],
"windAssets": [],
"priceInfo": {
"priceHeader1": "Fixed Service Fee",
"priceHeader2": "Annual Costs",
"defaultBasicFee": 120.00,
"defaultGuaranteeFee": 0.30,
"locationFactor": null,
"energyPrices": [
{ "year": 2024, "fixedFee": 11.80 }
]
}
}
}
],
"totalCount": 1,
"skip": 0,
"take": 50
}
Example 4: Paginated Request with Email Filter
# Page 1
curl -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/leads/energy-tariff?emailContains=@gmail.com&skip=0&take=20" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
# Page 2
curl -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/leads/energy-tariff?emailContains=@gmail.com&skip=20&take=20" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
Response (Page 1):
{
"leads": [
{
"id": "a1b2c3d4-1111-2222-3333-444455556666",
"companyId": "f7e8d9c0-aaaa-bbbb-cccc-ddddeeee0000",
"assetId": "11223344-5566-7788-99aa-bbccddeeff00",
"offerFileName": null,
"offerUrl": null,
"contactAndCompanyInfo": {
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"phoneNumber": "+4930987654321",
"preferredWayOfCommunication": 0,
"language": "de",
"actorRole": "Producer",
"companyName": "Trace GmbH",
"companyAddress": "Berliner Allee 42",
"companyCity": "Berlin",
"companyZipCode": "10115",
"companyCountry": "de",
"companyLocation": "52.520008, 13.404954",
"currentDate": "2024-03-10"
},
"leadInfo": {
"status": 1,
"leadType": 1,
"termsAndConditions": true,
"contactPermission": false,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2024-03-10T14:05:00Z",
"sentAt": "2024-03-10T14:06:20Z",
"templateName": "DirectMarketingOffer_DE"
},
"tariffData": {
"tariffType": 3,
"directMarketing": {
"directMarketingType": 2,
"directMarketingEnumerationType": 2,
"serviceFeeType": 2,
"plannedStartDate": "2024-06-01T00:00:00Z",
"contractPeriod": "24",
"guaranteeOfOrigin": 0
},
"solarAssets": [
{
"id": "11223344-5566-7788-99aa-bbccddeeff00",
"technology": "Solar",
"installedCapacity": 95.0,
"applicableValue": 95.0,
"installationDate": 2022,
"direction": "South-West",
"angle": 28,
"location": {
"latitude": 52.520008,
"longitude": 13.404954,
"address": "Berliner Allee 42",
"zipCode": "10115",
"country": "Germany",
"state": "Berlin",
"city": "Berlin",
"description": null
},
"maStREntities": [],
"attachments": []
}
],
"windAssets": [],
"priceInfo": {
"priceHeader1": "Relative Service Fee",
"priceHeader2": null,
"defaultBasicFee": null,
"defaultGuaranteeFee": 0.25,
"locationFactor": null,
"energyPrices": [
{ "year": 2024, "relativeFee": 2.10 },
{ "year": 2025, "relativeFee": 2.15 }
]
}
}
}
],
"totalCount": 43,
"skip": 0,
"take": 20
}
Example 5: Dynamic Market Access Tariff
Response (showing Dynamic Market Access configuration with solar asset and production profile):
{
"leads": [
{
"id": "dma-lead-uuid-1",
"companyId": "c1d2e3f4-1122-3344-5566-778899aabbcc",
"assetId": "dma-solar-asset-uuid-1",
"offerFileName": null,
"offerUrl": null,
"contactAndCompanyInfo": {
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"phoneNumber": "+492111234567",
"preferredWayOfCommunication": 1,
"language": "de",
"actorRole": "Consumer",
"companyName": "Trace GmbH",
"companyAddress": "Königsallee 14",
"companyCity": "Düsseldorf",
"companyZipCode": "40212",
"companyCountry": "de",
"companyLocation": "51.221649, 6.777283",
"currentDate": "2026-02-20"
},
"leadInfo": {
"status": 1,
"leadType": 2,
"termsAndConditions": true,
"contactPermission": true,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2026-02-20T11:00:00Z",
"sentAt": "2026-02-20T11:01:15Z",
"templateName": "DynamicMarketAccess_DE"
},
"tariffData": {
"tariffType": 4,
"dynamicMarketAccess": {
"serviceFeeType": 2,
"contractPeriod": "36",
"forecastingOwnership": 2,
"intradayAdjustmentByProvider": true,
"balancingVolumes": "ActualCosts",
"downpaymentAccepted": false,
"interestToReceivePPAOffer": true,
"receiveGOsForPurchasedElectricity": true,
"balancingGroupRequired": true,
"supplyIncludingGridUsage": false,
"meteredLoadProfilesCount": 8,
"meteredLoadProfilesOperatorsCount": 3,
"standardLoadProfilesCount": 5,
"standardLoadProfilesOperatorsCount": 2,
"energyConsumption": {
"annualConsumptionKwh": 2500000.0,
"thirdPartyKwh": 800000.0,
"futureMarketKwh": 500000.0,
"spotMarketKwh": 700000.0,
"ownProductKwh": 500000.0
},
"energyProduction": {
"solarEnergyProductionPA": 350000.0,
"windEnergyProductionPA": 750000.0,
"cogenerationEnergyProductionPA": 150000.0,
"otherEnergyProductionPA": 80000.0
}
},
"solarAssets": [
{
"id": "dma-solar-asset-uuid-1",
"technology": "Solar",
"installedCapacity": 420.0,
"applicableValue": 420.0,
"installationDate": 2021,
"direction": "South",
"angle": 30,
"location": {
"latitude": 51.221649,
"longitude": 6.777283,
"address": "Königsallee 14",
"zipCode": "40212",
"country": "Germany",
"state": "North Rhine-Westphalia",
"city": "Düsseldorf",
"description": "Industrial rooftop installation"
},
"maStREntities": [],
"attachments": [
{
"id": "att-dma-solar-001-uuid",
"fileName": "trace_solar_profile_2025.csv",
"attachmentType": "ProductionProfile",
"processingStatus": "Completed",
"timeZone": "Europe/Berlin",
"measurementType": "Energy",
"unit": "KWh",
"coverageStart": "2025-01-01T00:00:00Z",
"coverageEnd": "2025-12-31T23:45:00Z",
"resolution": "PT15M",
"timeZoneStatus": "UserDefined",
"measurementTypeStatus": "SystemDefined",
"unitStatus": "ConfirmedMatch",
"initialTimeZone": null,
"initialMeasurementType": "Power",
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-dma-solar-001-uuid/download?type=original",
"processedDownloadUrl": "/api/crm/attachments/att-dma-solar-001-uuid/download?type=processed",
"suggestions": null
}
]
}
],
"windAssets": [],
"priceInfo": {
"priceHeader1": "Relative Service Fee",
"priceHeader2": null,
"defaultBasicFee": null,
"defaultGuaranteeFee": 0.20,
"locationFactor": null,
"energyPrices": [
{ "year": 2026, "relativeFee": 1.80 },
{ "year": 2027, "relativeFee": 1.85 }
]
}
}
}
],
"totalCount": 1,
"skip": 0,
"take": 50
}
Example 6: PPA Upstream Tariff
Response (showing PPA Upstream configuration with full solar asset and attachment detail):
{
"leads": [
{
"id": "ppa-upstream-uuid-1",
"companyId": "d4e5f6a7-2233-4455-6677-8899aabbccdd",
"assetId": "solar-asset-guid-1",
"offerFileName": "PPA_Upstream_Offer_Trace_2025.pdf",
"offerUrl": "/api/crm/leads/energy-tariff/ppa-upstream-uuid-1/offer/download",
"contactAndCompanyInfo": {
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"phoneNumber": "+494031234567",
"preferredWayOfCommunication": 0,
"language": "de",
"actorRole": "Producer",
"companyName": "Trace GmbH",
"companyAddress": "Spaldingstraße 110",
"companyCity": "Hamburg",
"companyZipCode": "20097",
"companyCountry": "de",
"companyLocation": "53.556088, 10.020534",
"currentDate": "2025-05-10"
},
"leadInfo": {
"status": 1,
"leadType": 2,
"termsAndConditions": true,
"contactPermission": true,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2025-05-10T09:15:00Z",
"sentAt": "2025-05-10T09:16:40Z",
"templateName": "PPAUpstream_DE"
},
"tariffData": {
"tariffType": 5,
"ppaUpstream": {
"technology": 1,
"solarAssetIds": ["solar-asset-guid-1", "solar-asset-guid-2"],
"windAssetIds": [],
"ppaStructure": 1,
"negativePrices": 1,
"plannedStartDate": "2025-06-01T00:00:00Z",
"contractPeriod": "15",
"guaranteeOfOrigin": 2,
"intendedShareOfFixPrice": 0.75
},
"solarAssets": [
{
"id": "solar-asset-guid-1",
"technology": "Solar",
"installedCapacity": 1200.0,
"applicableValue": 1200.0,
"installationDate": 2020,
"direction": "South",
"angle": 25,
"location": {
"latitude": 53.556088,
"longitude": 10.020534,
"address": "Spaldingstraße 110",
"zipCode": "20097",
"country": "Germany",
"state": "Hamburg",
"city": "Hamburg",
"description": "Ground-mounted solar park"
},
"maStREntities": [],
"attachments": [
{
"id": "att-ppa-upstream-001-uuid",
"fileName": "ppa_upstream_solar_profile_2025.csv",
"attachmentType": "ProductionProfile",
"processingStatus": "Completed",
"timeZone": "Europe/Berlin",
"measurementType": "Energy",
"unit": "KWh",
"coverageStart": "2025-01-01T00:00:00Z",
"coverageEnd": "2025-12-31T23:45:00Z",
"resolution": "PT15M",
"timeZoneStatus": "UserDefined",
"measurementTypeStatus": "ConfirmedMatch",
"unitStatus": "ConfirmedMatch",
"initialTimeZone": null,
"initialMeasurementType": null,
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-ppa-upstream-001-uuid/download?type=original",
"processedDownloadUrl": "/api/crm/attachments/att-ppa-upstream-001-uuid/download?type=processed",
"suggestions": null
}
]
}
],
"windAssets": [],
"priceInfo": {
"priceHeader1": "Fixed Price",
"priceHeader2": null,
"defaultBasicFee": null,
"defaultGuaranteeFee": 0.00,
"locationFactor": null,
"energyPrices": [
{ "year": 2025, "fixedFee": 0.085 },
{ "year": 2026, "fixedFee": 0.087 }
]
}
}
}
],
"totalCount": 1,
"skip": 0,
"take": 50
}
Example 7: PPA Downstream Tariff
Response (showing PPA Downstream configuration with full wind asset and attachment detail):
{
"leads": [
{
"id": "ppa-downstream-uuid-1",
"companyId": "e7f8a9b0-3344-5566-7788-99aabbccddee",
"assetId": "wind-ppa-downstream-001-uuid",
"offerFileName": "PPA_Downstream_Offer_Trace_2025.pdf",
"offerUrl": "/api/crm/leads/energy-tariff/ppa-downstream-uuid-1/offer/download",
"contactAndCompanyInfo": {
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"phoneNumber": "+497211234567",
"preferredWayOfCommunication": 0,
"language": "de",
"actorRole": "Producer",
"companyName": "Trace GmbH",
"companyAddress": "Ettlinger Straße 25",
"companyCity": "Karlsruhe",
"companyZipCode": "76137",
"companyCountry": "de",
"companyLocation": "48.992447, 8.402988",
"currentDate": "2025-03-05"
},
"leadInfo": {
"status": 1,
"leadType": 2,
"termsAndConditions": true,
"contactPermission": false,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2025-03-05T16:45:00Z",
"sentAt": "2025-03-05T16:46:30Z",
"templateName": "PPADownstream_DE"
},
"tariffData": {
"tariffType": 6,
"ppaDownstream": {
"technology": 1,
"energyVolumePA": 1800000.0,
"energyCapacityPA": 600.0,
"ppaIntegration": true,
"endOfContractTerm": "2035-12-31T00:00:00Z",
"ppaStructure": 2,
"negativePrices": 2,
"plannedStartDate": "2025-04-01T00:00:00Z",
"contractPeriod": "10",
"guaranteeOfOrigin": 1,
"dedicatedAssetCriteria": true,
"additionalityCriteria": true
},
"solarAssets": [],
"windAssets": [
{
"id": "wind-ppa-downstream-001-uuid",
"technology": "Wind",
"installedCapacity": 4200.0,
"applicableValue": 4200.0,
"installationDate": 2019,
"hubHeight": 135.0,
"ratedPower": 4200.0,
"rotorDiameter": 136.0,
"numberOfTurbines": 1,
"location": {
"latitude": 48.992447,
"longitude": 8.402988,
"address": "Ettlinger Straße 25",
"zipCode": "76137",
"country": "Germany",
"state": "Baden-Württemberg",
"city": "Karlsruhe",
"description": null
},
"maStREntities": [],
"attachments": [
{
"id": "att-ppa-downstream-001-uuid",
"fileName": "trace_wind_profile_2024.csv",
"attachmentType": "ProductionProfile",
"processingStatus": "Completed",
"timeZone": "Europe/Berlin",
"measurementType": "Energy",
"unit": "KWh",
"coverageStart": "2024-01-01T00:00:00Z",
"coverageEnd": "2024-12-31T23:45:00Z",
"resolution": "PT15M",
"timeZoneStatus": "UserDefined",
"measurementTypeStatus": "ConfirmedMatch",
"unitStatus": "ConfirmedMatch",
"initialTimeZone": null,
"initialMeasurementType": null,
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-ppa-downstream-001-uuid/download?type=original",
"processedDownloadUrl": "/api/crm/attachments/att-ppa-downstream-001-uuid/download?type=processed",
"suggestions": null
}
]
}
],
"priceInfo": {
"priceHeader1": "Fixed Price",
"priceHeader2": null,
"defaultBasicFee": null,
"defaultGuaranteeFee": 0.00,
"locationFactor": null,
"energyPrices": [
{ "year": 2025, "fixedFee": 0.095 },
{ "year": 2026, "fixedFee": 0.097 },
{ "year": 2027, "fixedFee": 0.099 }
]
}
}
}
],
"totalCount": 1,
"skip": 0,
"take": 50
}
Example 8: Direct Marketing — Wind Farm with 5 Turbines
Request:
curl -X GET "https://<YOUR_PROJECT_DOMAIN>/api/crm/leads/energy-tariff?status=1&leadType=2" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
Response (one wind-farm asset, five MaStR entries fully expanded, one shared production-profile attachment):
{
"leads": [
{
"id": "lead-windfarm-5t-001",
"companyId": "f9a0b1c2-4455-6677-8899-aabbccddeeff",
"assetId": "windfarm-asset-001",
"offerFileName": "Direct_Marketing_Offer_Trace_2026.pdf",
"offerUrl": "/api/crm/leads/energy-tariff/lead-windfarm-5t-001/offer/download",
"contactAndCompanyInfo": {
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"phoneNumber": "+494841234567",
"preferredWayOfCommunication": 0,
"language": "de",
"actorRole": "Producer",
"companyName": "Trace GmbH",
"companyAddress": "Westerdeich 21",
"companyCity": "Husum",
"companyZipCode": "25813",
"companyCountry": "de",
"companyLocation": "54.472500, 9.050900",
"currentDate": "2026-04-08"
},
"leadInfo": {
"status": 1,
"leadType": 2,
"termsAndConditions": true,
"contactPermission": true,
"recipientEmail": "leads@trace-electricity.com",
"errorMessage": null,
"createdAt": "2026-04-08T13:20:00Z",
"sentAt": "2026-04-08T13:21:45Z",
"templateName": "DirectMarketingOffer_DE"
},
"tariffData": {
"tariffType": 3,
"directMarketing": {
"directMarketingType": 1,
"directMarketingEnumerationType": 1,
"serviceFeeType": 1,
"plannedStartDate": "2026-07-01T00:00:00Z",
"contractPeriod": "24",
"guaranteeOfOrigin": 1
},
"solarAssets": [],
"windAssets": [
{
"id": "windfarm-asset-001",
"technology": "Wind",
"installedCapacity": 21000.0,
"applicableValue": 21000.0,
"installationDate": 2021,
"hubHeight": 135.0,
"ratedPower": 4200.0,
"rotorDiameter": 136.0,
"numberOfTurbines": 5,
"location": {
"latitude": 54.4725,
"longitude": 9.0509,
"address": "Westerdeich 21",
"zipCode": "25813",
"country": "Germany",
"state": "Schleswig-Holstein",
"city": "Husum",
"description": null
},
"maStREntities": [
{
"maStRId": "SEE900000001",
"unitMasterNumber": "UMN-NW-001",
"locationMasterNumber": "LMN-NW-001",
"plantOperatorMasterNumber": "POM-NW-001",
"eegMasterNumber": "EEG-NW-001",
"powerGenerationUnitName": "Trace Turbine 1",
"grossPower": 4200.0,
"netRatedPower": 4100.0,
"latitude": 54.4720,
"longitude": 9.0504,
"maStRFeedInType": 1,
"maStRStatus": 1,
"lastUpdateDate": "2026-03-18T09:15:00Z"
},
{
"maStRId": "SEE900000002",
"unitMasterNumber": "UMN-NW-002",
"locationMasterNumber": "LMN-NW-002",
"plantOperatorMasterNumber": "POM-NW-001",
"eegMasterNumber": "EEG-NW-002",
"powerGenerationUnitName": "Trace Turbine 2",
"grossPower": 4200.0,
"netRatedPower": 4100.0,
"latitude": 54.4728,
"longitude": 9.0512,
"maStRFeedInType": 1,
"maStRStatus": 1,
"lastUpdateDate": "2026-03-18T09:15:00Z"
},
{
"maStRId": "SEE900000003",
"unitMasterNumber": "UMN-NW-003",
"locationMasterNumber": "LMN-NW-003",
"plantOperatorMasterNumber": "POM-NW-001",
"eegMasterNumber": "EEG-NW-003",
"powerGenerationUnitName": "Trace Turbine 3",
"grossPower": 4200.0,
"netRatedPower": 4100.0,
"latitude": 54.4732,
"longitude": 9.0498,
"maStRFeedInType": 1,
"maStRStatus": 1,
"lastUpdateDate": "2026-03-18T09:15:00Z"
},
{
"maStRId": "SEE900000004",
"unitMasterNumber": "UMN-NW-004",
"locationMasterNumber": "LMN-NW-004",
"plantOperatorMasterNumber": "POM-NW-001",
"eegMasterNumber": "EEG-NW-004",
"powerGenerationUnitName": "Trace Turbine 4",
"grossPower": 4200.0,
"netRatedPower": 4100.0,
"latitude": 54.4718,
"longitude": 9.0520,
"maStRFeedInType": 1,
"maStRStatus": 1,
"lastUpdateDate": "2026-03-18T09:15:00Z"
},
{
"maStRId": "SEE900000005",
"unitMasterNumber": "UMN-NW-005",
"locationMasterNumber": "LMN-NW-005",
"plantOperatorMasterNumber": "POM-NW-001",
"eegMasterNumber": "EEG-NW-005",
"powerGenerationUnitName": "Trace Turbine 5",
"grossPower": 4200.0,
"netRatedPower": 4100.0,
"latitude": 54.4724,
"longitude": 9.0516,
"maStRFeedInType": 1,
"maStRStatus": 1,
"lastUpdateDate": "2026-03-18T09:15:00Z"
}
],
"attachments": [
{
"id": "att-windfarm-profile-001",
"fileName": "nordwind_energie_profile_2025.csv",
"attachmentType": "ProductionProfile",
"processingStatus": "Completed",
"timeZone": "Europe/Berlin",
"measurementType": "Energy",
"unit": "KWh",
"coverageStart": "2025-01-01T00:00:00Z",
"coverageEnd": "2025-12-31T23:45:00Z",
"resolution": "PT15M",
"timeZoneStatus": "UserDefined",
"measurementTypeStatus": "ConfirmedMatch",
"unitStatus": "ConfirmedMatch",
"initialTimeZone": null,
"initialMeasurementType": null,
"initialUnit": null,
"originalDownloadUrl": "/api/crm/attachments/att-windfarm-profile-001/download?type=original",
"processedDownloadUrl": "/api/crm/attachments/att-windfarm-profile-001/download?type=processed",
"suggestions": null
}
]
}
],
"priceInfo": {
"priceHeader1": "Fixed Service Fee",
"priceHeader2": "Annual Costs",
"defaultBasicFee": 150.00,
"defaultGuaranteeFee": 0.35,
"locationFactor": null,
"energyPrices": [
{ "year": 2026, "fixedFee": 11.90 },
{ "year": 2027, "fixedFee": 12.10 }
]
}
}
}
],
"totalCount": 1,
"skip": 0,
"take": 50
}
Modeling note: This example shows one wind-farm asset with a single TRACE asset ID, five MaStR entries for the underlying turbines (all fully expanded), and one shared production-profile attachment representing the grouped wind-farm profile.