Southwest Power Pool Real Time API

If permitted by the Clearinghouse Provider, its Ratings Providers can use these functions to exchange real-time ratings, supplementing or replacing traditional telemetry protocols like ICCP. These ratings are based on real-time measurements of ambient conditions and will be used by Transmission Providers for real-time grid operations processes, including state estimation and real-time markets. The clearing of real-time ratings may be more frequent than for forecast ratings, but the frequency is the prerogative of the Clearinghouse Provider. These ratings may be either AARs or DLRs.

Operations 4

GET /rating-proposals/realtime Real-Time Proposals Status #
POST /rating-proposals/realtime Submit Real-Time Rating Proposal #
GET /limits/realtime-snapshot Limits Real Time Snapshot #
GET /limits/regional/realtime-snapshot Regional Limits Real Time Snapshot #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/spp-real-time-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

spp-real-time-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Transmission Ratings and Operating Limits Information Exchange (TROLIE) Real Time API
  x-logo:
    altText: TROLIE logo
    url: images/TROLIE-horizontal-color.svg
  description: "\nThis specification defines a set of operations for the exchange of power\nsystem ratings and limits between entities that own and operate the electric\npower system in North America. In particular, it is designed to support the\nexchange of Ambient Adjusted Ratings (AARs), pursuant to FERC Order 881.  It\nis published as a community standard to facilitate interoperability\nin these exchanges.\n\nThe specification conceives of the exchange as being between two primary\nentities:\n\n* A [Ratings Provider](https://trolie.energy/concepts#ratings-provider) is\n an entity that is responsible for providing ratings on some set of power\n system resources, e.g., Transmission Facilities, typically a Transmission\n Owner or Transmission Operator.  The ratings are provided to a\n Clearinghouse Provider whose is responsible for determining the operating\n limits of the power system resources.\n\n* The [Clearinghouse Provider](https://trolie.energy/concepts#clearinghouse-provider) is\n  typically a Transmission Provider (FERC) and a Reliability Coordinator (NERC).\n\nAdjacent Clearinghouse Providers exchange ratings in order to establish\noperating limit values for the power system resources that are shared\nbetween them.\n\nA Ratings Provider is assumed by this specification to have pre-coordinated \nwith a Clearinghouse Provider to identify the former's Ratings Obligation,\ni.e., the set of power system resources for which they will provide ratings.\nAdditionally, the Ratings Provider will have similarly pre-coordinated the\ndefinition of their Monitoring Sets, i.e., their power system limits of\ninterest. The nature and method of pre-coordination is out-of-scope for this\nspecification.\n\nNote that this API makes a strict distinction between the terms rating and\nlimit.  Colloquially, these terms are often used interchangeably.  However,\nin the context of this specification, they have distinct meanings. At a\nhigh-level, the specification defines an exchange where ratings go in and\nlimits come out. A Clearinghouse is a function for determining the operating\nlimits from the ratings it has on-hand, including those that are proposed by\nRatings Providers and any applicable time-bound static ratings.\n\nThis interaction diagram highlights the primary requests and responses that\nare defined in this spec. Note that not all of the operations will be\nsupported by every implementation.\n\n<img src=\"images/interactions.excalidraw.png\" alt=\"Primary Interactions with Ratings Provider\" />\n"
  version: 1.1.0
  contact:
    name: TROLIE Maintainers
    email: maintainers@trolie.energy
    url: https://trolie.energy
  license:
    name: Community Specification License 1.0
    url: https://spdx.org/licenses/Community-Spec-1.0.html
servers:
- url: https://trolie.example.com
security:
- oauth2-primary-flow: []
tags:
- name: Real-Time
  description: 'If permitted by the Clearinghouse Provider, its Ratings Providers can use

    these functions to exchange real-time ratings, supplementing or replacing

    traditional telemetry protocols like ICCP.


    These ratings are based on real-time measurements of ambient conditions

    and will be used by Transmission Providers for real-time grid operations

    processes, including state estimation and real-time markets.  The clearing

    of real-time ratings may be more frequent than for forecast ratings, but

    the frequency is the prerogative of the Clearinghouse Provider.


    These ratings may be either AARs or DLRs.

    '
paths:
  /rating-proposals/realtime:
    get:
      operationId: getRealTimeProposalStatus
      summary: Real-Time Proposals Status
      description: '

        Retrieves the status of a real-time ratings proposal. The response is

        limited to the requestor''s current proposal.


        Note this status resource is also returned for each `postRealTimeProposal`

        call.  The anticipated use case for this endpoint is to monitoring proposal

        submissions: Clients can use this operation to independently verify that

        their proposal submission process is functioning correctly. This is

        particularly useful for scenarios where a separate monitoring job is set up

        to check the status of proposals.


        Rate limiting is applied per Ratings Provider, meaning requests from

        multiple clients associated with the same provider count towards the same

        quota.  To optimize network traffic and server load, clients should perform

        conditional GET requests with the `If-None-Match` header and the `ETag` from

        a previous response.

        '
      tags:
      - Real-Time
      responses:
        '200':
          description: OK
          content:
            application/vnd.trolie.rating-realtime-proposal-status.v1+json:
              schema:
                $ref: '#/components/schemas/real-time-proposal-status'
              example:
                source:
                  provider: UTILITY-A
                  last-updated: '2023-07-12T15:05:43.044267100-07:00'
                  origin-id: 5aeacb25-9b65-4738-8a00-ac10afa63640
                incomplete-obligation-count: 1
                incomplete-obligations:
                - resource-id: 8badf00d
                  alternate-identifiers:
                  - name: segmentX
                    authority: TO-NERC-ID
                  - name: LINE1 SEG-X
                    authority: RC-NERC-ID
                    mrid: 8badf00d
                invalid-proposal-count: 1
                proposal-validation-errors:
                - message: Submitted continuous rating value of 2000MVA is greater than the upper reasonability limit of 1300MVA
                  resource-id: 8badf00d
          headers:
            X-Rate-Limit-Limit:
              $ref: '#/components/headers/X-Rate-Limit-Limit'
            X-Rate-Limit-Remaining:
              $ref: '#/components/headers/X-Rate-Limit-Remaining'
            X-Rate-Limit-Reset:
              $ref: '#/components/headers/X-Rate-Limit-Reset'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304'
        '400':
          $ref: '#/components/responses/400-problem'
        '401':
          $ref: '#/components/responses/401-empty'
        '403':
          $ref: '#/components/responses/403-empty'
        '406':
          $ref: '#/components/responses/406-problem'
        '429':
          $ref: '#/components/responses/429-empty'
        '500':
          $ref: '#/components/responses/500-empty'
        default:
          $ref: '#/components/responses/500-empty'
      security:
      - oauth2-primary-flow:
        - read:realtime-proposals
    post:
      operationId: postRealTimeProposal
      summary: Submit Real-Time Rating Proposal
      description: "\nSome Clearinghouse Providers will support real-time ratings submissions\nthrough this operation.\n\nThe API mechanics are different than forecasts, as there is no implicitly\ncreated time window to modify.  Ratings providers simply `POST` new values\nas they are measured and/or computed.\n\nRules for usage however are similar to forecasts; real-time proposals do not\nhave to contain every resource for which the Ratings Provider is\nresponsible.  Data may be broken into batches across the Rating Provider's\nfootprint.\n\nStatus of the real-time proposals also includes an indication of incomplete\nobligations, much like forecast.  However, the meaning of this is somewhat\ndifferent, as it simply indicates data that is either completely missing, or\nis considered stale by the Clearinghouse Provider, likely due to simply not\nreceiving a value within a reasonable period, such as an hour.\n\nThere are two supported media types for Real-Time Ratings proposals.\n\n* `application/vnd.trolie.rating-realtime-proposal.v1+json` allows the Ratings\n  Provider to combine different limit types, such as `apparent-power` (MVA)\n  and `current` (MW), in a single proposal.\n\n* `application/vnd.trolie.rating-realtime-proposal-slim.v1+json` for\n  proposals that only require a single limit type, e.g., `apparent-power`.\n  Clients *MUST* specify that [limit-type](#tag/limit-type) as a media type\n  parameter. For example,\n\n    ```http\n    POST /ratings-proposals/realtime HTTP/1.1\n    Content-Type: application/vnd.trolie.rating-realtime-proposal-slim.v1+json; limit-type=apparent-power\n    ```\n\n    Note that this format is much more concise but requires significant care\n    in serialization/deserialization.  For details, see [Using Slim Media\n    Types](../example-narratives/using-slim-media-types).\n"
      tags:
      - Real-Time
      requestBody:
        required: true
        content:
          application/vnd.trolie.rating-realtime-proposal.v1+json:
            schema:
              $ref: '#/components/schemas/realtime-proposal'
            example:
              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: LTE
                  duration-minutes: 240
                - name: STE
                  duration-minutes: 30
                - name: DAL
                  duration-minutes: 15
                power-system-resources:
                - resource-id: 8badf00d
                  alternate-identifiers:
                  - name: segmentX
                    authority: TO-NERC-ID
                  - name: LINE1 SEG-X
                    authority: RC-NERC-ID
                    mrid: 8badf00d
              ratings:
              - resource-id: 8badf00d
                continuous-operating-limit:
                  mva: 160
                emergency-operating-limits:
                - duration-name: LTE
                  limit:
                    mva: 165
                - duration-name: STE
                  limit:
                    mva: 170
                - duration-name: DAL
                  limit:
                    mva: 170
          application/vnd.trolie.rating-realtime-proposal-slim.v1+json; limit-type=apparent-power:
            schema:
              $ref: '#/components/schemas/realtime-proposal-slim'
            examples:
              No Inputs Provided:
                summary: No Inputs Provided in the Real-Time Proposal
                value:
                  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
                      - name: LINE1 SEG-X
                        authority: RC-NERC-ID
                        mrid: 8badf00d
                    - resource-id: f34d3d
                      alternate-identifiers:
                      - name: segmentY
                        authority: TO-NERC-ID
                      - name: LINE2 SEG-Y
                        authority: RC-NERC-ID
                        mrid: 8badf00d
                  ratings:
                  - - 160
                    - 170
                  - - 155
                    - 160
      responses:
        '202':
          description: '

            Accepted. The update was accepted for later processing by the

            Clearinghouse.  Updates to ratings may need to undergo additional

            validation and propagation to other systems.


            Be sure to check the `incomplete-obligation-count` value is zero; if it

            is non-zero, the Clearinghouse Provider does not have a valid and

            non-stale real-time rating for one or more Ratings Obligations.

            Providers should impute recourse ratings as necessary to ensure their

            proposals are complete, i.e., the entire Ratings Obligation is met.

            '
          content:
            application/vnd.trolie.rating-realtime-proposal-status.v1+json:
              schema:
                $ref: '#/components/schemas/real-time-proposal-status'
              example:
                source:
                  provider: UTILITY-A
                  last-updated: '2023-07-12T15:05:43.044267100-07:00'
                  origin-id: 5aeacb25-9b65-4738-8a00-ac10afa63640
                incomplete-obligation-count: 1
                incomplete-obligations:
                - resource-id: 8badf00d
                  alternate-identifiers:
                  - name: segmentX
                    authority: TO-NERC-ID
                  - name: LINE1 SEG-X
                    authority: RC-NERC-ID
                    mrid: 8badf00d
                invalid-proposal-count: 1
                proposal-validation-errors:
                - message: Submitted continuous rating value of 2000MVA is greater than the upper reasonability limit of 1300MVA
                  resource-id: 8badf00d
          headers:
            X-Rate-Limit-Limit:
              $ref: '#/components/headers/X-Rate-Limit-Limit'
            X-Rate-Limit-Remaining:
              $ref: '#/components/headers/X-Rate-Limit-Remaining'
            X-Rate-Limit-Reset:
              $ref: '#/components/headers/X-Rate-Limit-Reset'
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400-problem'
        '401':
          $ref: '#/components/responses/401-empty'
        '403':
          $ref: '#/components/responses/403-empty'
        '406':
          $ref: '#/components/responses/406-problem'
        '413':
          $ref: '#/components/responses/413-empty'
        '415':
          $ref: '#/components/responses/415-problem'
        '422':
          description: "\nUnprocessable Content. The Real-Time Ratings Proposal may \nnot utilize units that are not permitted by the\nClearinghouse Provider. Check the response for details.\n"
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/problem'
              examples:
                invalid-units:
                  summary: Invalid Units Provided in Real-Time Proposal
                  value:
                    type: //trolie.example.com/spec/client-errors/422/invalid-units
                    title: 'Unprocessable Entity: Invalid Units'
                    status: 422
                    detail: The proposal for 8badf00d at 2025-05-07T12:00:00Z specified `mw` so Active Power is assumed, but this exchange requires the power factor `pf` be specified as well.
          headers:
            X-Rate-Limit-Limit:
              $ref: '#/components/headers/X-Rate-Limit-Limit'
            X-Rate-Limit-Remaining:
              $ref: '#/components/headers/X-Rate-Limit-Remaining'
            X-Rate-Limit-Reset:
              $ref: '#/components/headers/X-Rate-Limit-Reset'
        '429':
          $ref: '#/components/responses/429-empty'
        '500':
          $ref: '#/components/responses/500-empty'
        default:
          $ref: '#/components/responses/500-empty'
      security:
      - oauth2-primary-flow:
        - write:realtime-proposals
  /limits/realtime-snapshot:
    get:
      operationId: getRealTimeLimits
      description: '

        Obtain the System Operating Limits in-use by the Transmission Provider.


        Clients SHOULD perform Conditional `GET` using the `If-None-Match` header

        and the `ETag` of a previous `GET` response to poll this endpoint. Rate

        limiting is done on a per Ratings Provider basis, so requests from

        independent clients used by the same provider count against the same quota.

        '
      summary: Limits Real Time Snapshot
      tags:
      - Real-Time
      parameters:
      - $ref: '#/components/parameters/query-filter'
      - $ref: '#/components/parameters/resource-id-filter'
      responses:
        '200':
          description: The System Operating Limits snapshot is returned.
          content:
            application/vnd.trolie.realtime-limits-snapshot.v1+json:
              schema:
                $ref: '#/components/schemas/realtime-limits-snapshot'
              example:
                snapshot-header:
                  source:
                    provider: X-AMPL
                    last-updated: '2023-07-12T15:05:43.044267100-07:00'
                    origin-id: //trolie.example.com/snapshots/2024-08-05T11%3a00%3a00-07%3a00
                  default-emergency-durations:
                  - name: LTE
                    duration-minutes: 240
                  - name: STE
                    duration-minutes: 30
                  - name: DAL
                    duration-minutes: 15
                  power-system-resources:
                  - resource-id: 8badf00d
                    alternate-identifiers:
                    - name: segmentX
                      authority: TO-NERC-ID
                    - name: LINE1 SEG-X
                      authority: RC-NERC-ID
                      mrid: 8badf00d
                limits:
                - resource-id: 8badf00d
                  continuous-operating-limit:
                    mva: 160
                  emergency-operating-limits:
                  - duration-name: LTE
                    limit:
                      mva: 165
                  - duration-name: STE
                    limit:
                      mva: 170
                  - duration-name: DAL
                    limit:
                      mva: 180
            application/vnd.trolie.realtime-limits-snapshot.v1+json; include-psr-header=false:
              schema:
                $ref: '#/components/schemas/realtime-limits-snapshot-elide-psr'
              example:
                snapshot-header:
                  source:
                    provider: X-AMPL
                    last-updated: '2023-07-12T15:05:43.044267100-07:00'
                    origin-id: //trolie.example.com/snapshots/2024-08-05T11%3a00%3a00-07%3a00
                  default-emergency-durations:
                  - name: LTE
                    duration-minutes: 240
                  - name: STE
                    duration-minutes: 30
                  - name: DAL
                    duration-minutes: 15
                limits:
                - resource-id: 8badf00d
                  continuous-operating-limit:
                    mva: 160
                  emergency-operating-limits:
                  - duration-name: LTE
                    limit:
                      mva: 165
                  - duration-name: STE
                    limit:
                      mva: 170
                  - duration-name: DAL
                    limit:
                      mva: 180
            application/vnd.trolie.realtime-limits-detailed-snapshot.v1+json:
              schema:
                $ref: '#/components/schemas/realtime-limits-detailed-snapshot'
              example:
                snapshot-header:
                  source:
                    provider: X-AMPL-RC
                    last-updated: '2023-07-12T15:05:43.044267100-07:00'
                    origin-id: //trolie.example.com/snapshots/2024-08-05T11%3a00%3a00-07%3a00
                  default-emergency-durations:
                  - name: LTE
                    duration-minutes: 240
                  - name: STE
                    duration-minutes: 30
                  - name: DAL
                    duration-minutes: 5
                  power-system-resources:
                  - resource-id: 8badf00d
                    alternate-identifiers:
                    - name: segmentX
                      authority: TO-NERC-ID
                    - name: LINE1 SEG-X
                      authority: RC-NERC-ID
                      mrid: 8badf00d
                limits:
                - resource-id: 8badf00d
                  additional-data:
                    vendor-specific-data: {}
                  continuous-operating-limit:
                    mva: 160
                  emergency-operating-limits:
                  - duration-name: LTE
                    limit:
                      mva: 165
                  - duration-name: STE
                    limit:
                      mva: 170
                  - duration-name: DAL
                    limit:
                      mva: 175
                provenance:
                - resource-id: 8badf00d
                  proposals-considered:
                  - resource-id: 8badf00d-UTILITY-A-SEG-id
                    source:
                      last-updated: '2025-07-12T14:10:12-07:00'
                      provider: UTILITY-A
                      origin-id: 8badf00d-UTILITY-A-correlation-id
                    continuous-operating-limit:
                      mva: 150
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 165
                    - duration-name: STE
                      limit:
                        mva: 170
                    - duration-name: DAL
                      limit:
                        mva: 180
                  - resource-id: 8badf00d-UTILITY-B-SEG-id
                    source:
                      last-updated: '2025-07-12T14:10:12-07:00'
                      provider: UTILITY-B
                      origin-id: 8badf00d-UTILITY-B-correlation-id
                    continuous-operating-limit:
                      mva: 150
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 166
                    - duration-name: STE
                      limit:
                        mva: 171
                    - duration-name: DAL
                      limit:
                        mva: 175
                  temporary-aar-exceptions:
                  - id: 284928-2025-07-12T16:00:00-07:00
                    source:
                      origin-id: 2d8c80e8-f533-4be9-85bf-f7f81eb73d67
                      provider: UTILITY-A
                      last-updated: '2025-07-12T16:00:00-07:00'
                    resource:
                      resource-id: 8badf00d
                    start-time: '2025-07-12T16:00:00-07:00'
                    end-time: '2025-08-01T00:00:00-07:00'
                    continuous-operating-limit:
                      mva: 160
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 165
                    - duration-name: STE
                      limit:
                        mva: 170
                    - duration-name: DAL
                      limit:
                        mva: 180
                  overrides:
                  - continuous-operating-limit:
                      mva: 160
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 165
                    reason: TOI 20250701-01
                    start-time: '2025-07-01T00:00:00-07:00'
            application/vnd.trolie.realtime-limits-detailed-snapshot.v1+json; include-psr-header=false:
              schema:
                $ref: '#/components/schemas/realtime-limits-detailed-snapshot-elide-psr'
              example:
                snapshot-header:
                  source:
                    provider: X-AMPL-RC
                    last-updated: '2023-07-12T15:05:43.044267100-07:00'
                    origin-id: //trolie.example.com/snapshots/2024-08-05T11%3a00%3a00-07%3a00
                  default-emergency-durations:
                  - name: LTE
                    duration-minutes: 240
                  - name: STE
                    duration-minutes: 30
                  - name: DAL
                    duration-minutes: 5
                limits:
                - resource-id: 8badf00d
                  additional-data:
                    vendor-specific-data: {}
                  continuous-operating-limit:
                    mva: 160
                  emergency-operating-limits:
                  - duration-name: LTE
                    limit:
                      mva: 165
                  - duration-name: STE
                    limit:
                      mva: 170
                  - duration-name: DAL
                    limit:
                      mva: 175
                provenance:
                - resource-id: 8badf00d
                  proposals-considered:
                  - resource-id: 8badf00d-UTILITY-A-SEG-id
                    source:
                      last-updated: '2025-07-12T14:10:12-07:00'
                      provider: UTILITY-A
                      origin-id: 8badf00d-UTILITY-A-correlation-id
                    continuous-operating-limit:
                      mva: 150
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 165
                    - duration-name: STE
                      limit:
                        mva: 170
                    - duration-name: DAL
                      limit:
                        mva: 180
                  - resource-id: 8badf00d-UTILITY-B-SEG-id
                    source:
                      last-updated: '2025-07-12T14:10:12-07:00'
                      provider: UTILITY-B
                      origin-id: 8badf00d-UTILITY-B-correlation-id
                    continuous-operating-limit:
                      mva: 150
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 166
                    - duration-name: STE
                      limit:
                        mva: 171
                    - duration-name: DAL
                      limit:
                        mva: 175
                  temporary-aar-exceptions:
                  - id: 284928-2025-07-12T16:00:00-07:00
                    source:
                      origin-id: 2d8c80e8-f533-4be9-85bf-f7f81eb73d67
                      provider: UTILITY-A
                      last-updated: '2025-07-12T16:00:00-07:00'
                    resource:
                      resource-id: 8badf00d
                    start-time: '2025-07-12T16:00:00-07:00'
                    end-time: '2025-08-01T00:00:00-07:00'
                    continuous-operating-limit:
                      mva: 160
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 165
                    - duration-name: STE
                      limit:
                        mva: 170
                    - duration-name: DAL
                      limit:
                        mva: 180
                  overrides:
                  - continuous-operating-limit:
                      mva: 160
                    emergency-operating-limits:
                    - duration-name: LTE
                      limit:
                        mva: 165
                    reason: TOI 20250701-01
                    start-time: '2025-07-01T00:00:00-07:00'
            application/vnd.trolie.realtime-limits-snapshot-slim.v1+json; limit-type=apparent-power:
              schema:
                $ref: '#/components/schemas/realtime-limits-snapshot-slim'
              example:
                snapshot-header:
                  source:
                    provider: X-AMPL
                    last-updated: '2023-07-12T15:05:43.044267100-07:00'
                    origin-id: //trolie.example.com/snapshots/2024-08-05T11%3a00%3a00-07%3a00
                  default-emergency-durations:
                  - name: emergency
                    duration-minutes: 240
                  power-system-resources:
                  - resource-id: 8badf00d
                    alternate-identifiers:
                    - name: segmentX
                      authority: TO-NERC-ID
                    - name: LINE1 SEG-X
                      authority: RC-NERC-ID
                      mrid: 8badf00d
                  - resource-id: f34d3d
                    alternate-identifiers:
                    - name: segmentY
                      authority: TO-NERC-ID
                    - name: LINE2 SEG-Y
                      authority: RC-NERC-ID
                      mrid: 8badf00d
                limits:
                - - 160
                  - 170
                - - 155
                  - 160
            application/vnd.trolie.realtime-limits-snapshot-slim.v1+json; limit-type=apparent-power; inputs-used=true:
              schema:
                $ref: '#/components/schemas/realtime-limits-snapshot-slim-inputs-used'
              example:
                snapshot-header:
                  source:
                    provider: X-AMPL
                    last-updated: '2023-07-12T15:05:43.044267100-07:00'
                    origin-id: //trolie.example.com/snapshots/2024-08-05T11%3a00%3a00-07%3a00
                  default-emergency-durations:
                  - name: emergency
                    duration-minutes: 240
                  power-system-resources:
                  - resource-id: 8badf00d
                    alternate-identifiers:
                    - name: segmentX
                      authority: TO-NERC-ID
                    - name: LINE1 SEG-X
                      authority: RC-NERC-ID
                      mrid: 8badf00d
                  - resource-id: f34d3d
                    alternate-identifiers:
                    - name: segmentY
                      authority: TO-NERC-ID
                    - name: LINE2 SEG-Y
                      authority: RC-NERC-ID
                      mrid: 8badf00d
                limits:
                - - 160
                  - 170
                - - 155
                  - 160
                inputs-used:
                - name: dry bulb temperature (Fahrenheit)
                  unit: degF
                  values:
                  - 50
                  - 51
          headers:
            X-Rate-Limit-Limit:
              $ref: '#/components/headers/X-Rate-Limit-Limit'
            X-Rate-Limit-Remaining:
              $ref: '#/components/headers/X-Rate-Limit-Remaining'
            X-Rate-Limit-Reset:
              $ref: '#/components/headers/X-Rate-Limit-Reset'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304'
        '400':
          $ref: '#/components/responses/400-problem'
        '401':
          $ref: '#/components/responses/401-empty'
        '403':
          $ref: '#/components/responses/403-empty'
        '404':
          $ref: '#/components/responses/404-empty'
        '406':
          headers:
            X-Rate-Limit-Limit:
              $ref: '#/components/headers/X-Rate-Limit-Limit'
            X-Rate-Limit-Remaining:
              $ref: '#/components/headers/X-Rate-Limit-Remaining'
            X-Rate-Limit-Reset:
              $ref: '#/components/headers/X-Rate-Limit-Reset'
            ETag:
              $ref: '#/components/headers/ETag'
          description: Not Acceptable (Content negotiation failed)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/problem'
              examples:
                Compression Required:
                  summary: Only compressed responses are supported
                  value:
                    type: //trolie.example.com/spec/client-errors/406/compression-required
                    title: 'Not Acceptable: Accept-Encoding Required'
                    status: 406
                    detail: 'This resource must be compressed with one of the following algorithms: gzip, deflate, br.'
        '429':
          $ref: '#/components/responses/429-empty'
        '500':
          $ref: '#/components/responses/500-empty'
        default:
          $ref: '#/components/responses/500-empt

# --- truncated at 32 KB (98 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spp/refs/heads/main/openapi/spp-real-time-api-openapi.yml