This article assumes some familiarity with HTTP in general and RESTful APIs in particular (background).

Simplified Example: Transmission Owner Sends Seasonal Ratings with curl

If a Transmission Owner is their own Ratings Provider, they must update their seasonal ratings and send them to their transmission provider at least annually.

TROLIE provides the patchSeasonalRatingsProposal operation for this purpose.

NOTE: Support for this function is an optional part of the TROLIE specification. Transmission Owners / Rating Providers should check with their transmission provider for the method they specifically support for sending seasonal ratings to the transmission provider.

Assume the Transmission Owner creates a file called input.json containing their ratings. An example of the required format for the file is given below.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
{
  "proposal-header": {
    "source": {
      "last-updated": "2025-10-31T15:05:43.044267100-07:00",
      "provider": "UTILITY-A",
      "origin-id": "5aeacb25-9b65-4738-8a00-ac10afa63640"
    },
    "default-emergency-durations": [
      {
        "name": "emergency",
        "duration-minutes": 240
      }
    ],
    "power-system-resources": [
      {
        "resource-id": "8badf00d",
        "alternate-identifiers": [
          {
            "name": "segmentX",
            "authority": "TO-NERC-ID"
          }
        ]
      }
    ]
  },
  "ratings": [
    {
      "resource-id": "8badf00d",
      "periods": [
        {
          "season-name": "WINTER",
          "period-start": "2024-11-15T00:00:00-05:00",
          "period-end": "2025-03-01T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "emergency",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "SPRING",
          "period-start": "2025-03-01T00:00:00-05:00",
          "period-end": "2025-06-15T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "SUMMER",
          "period-start": "2025-06-15T00:00:00-05:00",
          "period-end": "2025-09-01T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "FALL",
          "period-start": "2025-09-01T00:00:00-05:00",
          "period-end": "2025-11-15T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        }
      ]
    }
  ]
}

The format is one of TROLIE’s supported media types named application/vnd.trolie.seasonal-rating-proposal.v1+json. This example illustrates submission of a year’s worth of seasons.

Pushing input.json to TROLIE with curl

Given the above input.json, run the following command to send it to the TROLIE server:

1
2
3
4
5
6
curl -d @input.json \
-X PATCH \
-H "Content-Type: application/vnd.trolie.seasonal-rating-proposal.v1+json" \
-H "Accept: application/vnd.trolie.seasonal-ratings-proposal-status.v1+json"
-o output.json \
"https://trolie.example.com/rating-proposals/seasonal"

If this submission is successful, output.json will contain the contents of the response from TROLIE. The format of the response is defined by another TROLIE media type: application/vnd.trolie.seasonal-ratings-proposal-status.v1+json. An example of this response format is given below:

1
2
3
4
5
6
7
8
9
10
11
12
{
  "source": {
    "provider": "UTILITY-A",
    "last-updated": "2023-07-12T15:05:43.044267100-07:00",
    "origin-id": "5aeacb25-9b65-4738-8a00-ac10afa63640"
  },
  "incomplete-obligation-count": 0,
  "incomplete-obligations": [],
  "invalid-proposal-count": 0,
  "proposal-validation-errors": []
}

Season Definitions and Names

The examples above refer to specific named seasons as assumed by the submitter. WINTER, for example, is shown to start on November 15th, ending on March 1st of the following year.

In many existing OT systems, seasonal ratings are modeled as a simple lookup table, with the name of each season as a key. However, such representations aren’t sufficient for TROLIE; the definitions of these seasons differ between all of TROLIE’s various stakeholders, so the season names have no consistent meaning. Instead, to support interop, the intended start and end times of each rating are specified. The season-name field is only there to provide a hint as to the submitter’s intent.

It is ultimately up to the Transmission Provider and TROLIE server implementer as to the flexibility they will allow in seasonal ratings submissions relative to the Transmission Provider’s season conventions used in operations. The Transmission Provider may elect to be quite liberal, allowing ratings providers to define their own seasons. Alternatively, the TROLIE server may refuse to accept submissions that don’t match the Transmission Provider’s pre-defined seasons exactly.

Ratings Providers should check with specific Transmission Providers for rules and expectations for how seasonal ratings may be submitted.

Client Errors and Obligations

Client errors are handled in much the same way as with forecast ratings, as described in Forecast Submittal. A submittal may have partial success, meaning that some resources are valid and the proposal for that resource will be saved. A validation error for a resource implies that no data was saved for that resource.

Obligations also work in a similar fashion as they do to forecasts. However, rather than being targeted at a particular forecast window, incomplete obligations should indicate ratings that have not been been submitted for seasons in the upcoming year as required by the FERC order.

Conditional or Configuration-Based Seasonal Ratings

Some underground or underwater lines have different ratings based on the line’s configuration. These lines include cables that are packed tightly together and may be turned on or off depending on configuration. Since these lines are packed tightly together, they create a heating effect on one another. Therefore, the overall line may have very different ratings depending on the configuration.

For AARs, it is typically assumed that the current configuration (or forecasted configuration) is accounted for in the AAR.

However, for seasonal ratings, the configuration cannot be forecasted. Therefore, separate seasonal ratings must be provided for each allowed configuration combination of the line. These are called “conditional” ratings in ISO New England’s footprint.

The pattern for conditional seasonal ratings in LEP is similar to the way directional ratings work. Each possible configuration simply represents a separate resource in TROLIE, as shown in the example proposal submission below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
{
  "proposal-header": {
    "source": {
      "last-updated": "2025-10-31T15:05:43.044267100-07:00",
      "provider": "UTILITY-A",
      "origin-id": "5aeacb25-9b65-4738-8a00-ac10afa63640"
    },
    "default-emergency-durations": [
      {
        "name": "emergency",
        "duration-minutes": 240
      }
    ],
    "power-system-resources": [
      {
        "resource-id": "8badf00d-145-in-service",
        "alternate-identifiers": [
          {
            "name": "EMS.Name.145-in-service",
            "authority": "TO-NERC-ID"
          }
        ]
      },
      {
        "resource-id": "8badf00d-145-out-of-service",
        "alternate-identifiers": [
          {
            "name": "EMS.Name.145-out-of-service",
            "authority": "TO-NERC-ID"
          }
        ]
      }      
    ]
  },
  "ratings": [
    {
      "resource-id": "8badf00d-145-in-service",
      "periods": [
        {
          "season-name": "WINTER",
          "period-start": "2024-11-15T00:00:00-05:00",
          "period-end": "2025-03-01T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "emergency",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "SPRING",
          "period-start": "2025-03-01T00:00:00-05:00",
          "period-end": "2025-06-15T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "SUMMER",
          "period-start": "2025-06-15T00:00:00-05:00",
          "period-end": "2025-09-01T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "FALL",
          "period-start": "2025-09-01T00:00:00-05:00",
          "period-end": "2025-11-15T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        }
      ]
    },
    {
      "resource-id": "8badf00d-145-out-of-service",
      "periods": [
        {
          "season-name": "WINTER",
          "period-start": "2024-11-15T00:00:00-05:00",
          "period-end": "2025-03-01T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "emergency",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "SPRING",
          "period-start": "2025-03-01T00:00:00-05:00",
          "period-end": "2025-06-15T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "SUMMER",
          "period-start": "2025-06-15T00:00:00-05:00",
          "period-end": "2025-09-01T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        },
        {
          "season-name": "FALL",
          "period-start": "2025-09-01T00:00:00-05:00",
          "period-end": "2025-11-15T00:00:00-05:00",
          "continuous-operating-limit": {
            "mva": 160
          },
          "emergency-operating-limits": [
            {
              "duration-name": "lte",
              "limit": {
                "mva": 165
              }
            }
          ]
        }
      ]
    }    
  ]
}