> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trlyr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get all ancillary results for a given virtual asset and interval.

> # Gets all ancillary results for a given virtual asset and time interval

## Query Parameters

Required query parameters:

`start`: Start specifies the start of the time interval for which to retrieve results, e.g. `2025-06-17T12:00:00Z` (RFC3339 in UTC).

`end`: End specifies the end of the time interval for which to retrieve results, e.g. `2025-06-18T12:00:00Z` (RFC3339 in UTC).

Optional query parameters:

`markets`: Returns results for requested markets as a comma separated string, e.g. `FCR,AFRREnergy`. If not set, returns all markets. Available options (case sensitive): `FCR`, `AFRREnergy`, `AFRRCapacity`.

`productDirections`: Returns results for requested product directions as a comma separated string, e.g. `NEGPOS,POS`. If not set, returns all product directions. Available options (case sensitive): `POS`, `NEG`, `NEGPOS`.

## Response format
Returns a JSON representation of the ancillary results for the given time interval and virtual asset as a list. The following fields are provided:

`market`: The market of the result, one of: `FCR`, `AFRREnergy`, `AFRRCapacity`.

`product`: The product of the result, e.g. `NEGPOS_00_04` (FCR), `POS_00_04` (AFRR Capacity), `POS_001` (AFRR Energy).

`deliveryDay`: The delivery day of the bid result in the format `YYYY-MM-DD`, e.g. `2026-05-30` (full day according to RFC3339).

`results`: A list of individual bid results for the product.

Each result in the list contains the following fields whose contents can vary depending on the market:

`bidID`: The ID of the corresponding bid.

`accepted`: A boolean field that shows whether the bid was accepted or rejected in the auction.

`offeredCapacity`: The offered capacity of the original bid in **kilowatts**, e.g. `2000`.

`acceptedCapacity`: The accepted capacity determined in the auction in **kilowatts**, e.g. `1000`. Can be equal to or less than the `offeredCapacity`.

`capacityPrice`:
- aFRR Energy: This field is null.
- aFRR Capacity: The capacity price of the original aFRR bid in **EUR/MW/h**, e.g. `100.00`. This price is used to determine the position of the bid in the TSO's merit order. Since AFRR Capacity auctions are Pay As Bid, its value can be used to calculate revenue for AFRR Capacity results. See example below.
- FCR: The capacity price of the original FCR bid in **EUR/MW**, e.g. `100.00`. This price is used to determine the position of the bid in the TSO's merit order. Since FCR auctions are Pay As Clear, its value is not relevant for revenue calculations. See example below.

`settlementPrice`: The settlement price determined by the auction in **EUR/MW**, e.g. `150.00`. This field is only filled for FCR results. Since FCR auctions are Pay As Clear, it can be used to calculate revenue for FCR results. See example below.

`energyPrice`: The energy price of the original bid in **EUR/MWh**, e.g. `100.00`. This price is used to determine the position of the bid in the TSO's merit order. It cannot be used to calculate revenue for AFRR Energy results. See example below.


## Results publication

The exact publication time of results is not guaranteed.

If results have not yet been published, returns an empty list and status code 200.

### aFRR Energy 
23 minutes before the start of the delivery period. E.g. for an aFRR Energy bid with delivery day 15.01.2026 and a delivery period starting at 12:30pm, results are expected around 12:07pm on 15.01.2026.

### aFRR Capacity 
9:20am CET/CEST on the day before the delivery day. E.g. for an aFRR Capacity bid with delivery day 15.01.2026, results are expected around 9:20am CET on 14.01.2026.

### FCR
8:20am CET/CEST on the day before delivery day. E.g. for an FCR bid with delivery day 15.01.2026, results are expected around 8:20am CET on 14.01.2026.

## Revenue calculation

### aFRR Energy

The aFRR Energy auction is Pay As Clear.

The `settlementPrice` for each product is only decided after the delivery period has ended and depends on the activations that have taken place during the delivery period.

The `settlementPrice` can be found in the data center of **regelleistung.net**. It can also be received through our internal revenue-reporting endpoint. Importantly, it is not part of the response of an AFRR Energy result, since the results are generated before the settlement price is decided.

If your bid is accepted, you are not automatically receiving revenue for the delivery period.

You are paid only for the activated power you deliver, not the accepted capacity. The activations your asset performed can be received through our internal revenue-reporting endpoint.

Example:
- `energyPrice` offered in the bid: 80 EUR/MWh
- `settlementPrice`: 100 EUR/MWh
- Total activated power in 15 minutes: 2000 kW
- Revenue: 100 EUR/MWh * 2 MW * 0.25 h = 50 EUR


### aFRR Capacity

The aFRR Capacity auction is Pay As Bid and takes place on the day before the delivery day between 9:00am-9:20am CET/CEST.

Depending on your offered `capacityPrice`, your bid is rejected or accepted.

If a bid is accepted, you are paid the offered `capacityPrice` for each hour of the delivery period.

You are paid for the capacity you provide, irrespective of the activations your asset delivers.

Example:
- `capacityPrice` offered in bid: 100 EUR/MW
- `acceptedCapacity` received in result: 2000 kW
- Revenue: (100 EUR/MW/h * 2 MW) * 4h = 800 EUR


### FCR

The FCR Capacity auction is Pay As Clear and takes place on the day before the delivery day between 8:00am-8:20am CET/CEST.

During this auction, a settlement price is set for each 4 hour EFA block on the next day.

For an accepted bid, this settlement price will be equal to or higher than the capacity price offered on your bid.

If a bid is accepted, you are paid the `settlementPrice` for the whole duration of the delivery period.

You are paid for the capacity you provide, irrespective of the activations your asset delivers.

Example:
- `capacityPrice` offered in bid: 80 EUR/MW
- `settlementPrice` received in result: 100 EUR/MW
- `acceptedCapacity` received in result: 2000 kW
- Revenue: 100 EUR/MW * 2 MW = 200 EUR

### Behaviour during full availability

Once a bid has received a result, both the ancillary commitment and the available wholesale capacity on the virtual asset are adjusted.

You can check your ancillary commitments per market through the `operationalData` endpoint on the virtual asset, by requesting the following categories: `fcrCommitment`, `afrrPosCommitment`, `afrrNegCommitment`.

You can check your available wholesale capacity by requesting the following categories: `wholesalePowerCapacityChargeAvailable`, `wholesalePowerCapacityDischargeAvailable`.

The adjustment depends on the nature of the result:

If the result is accepted and `acceptedCapacity` = `offeredCapacity`, your ancillary commitments and wholesale capacity are unchanged. 

If `acceptedCapacity` < `offeredCapacity`, the ancillary commitment for the duration of the delivery period is reduced to the value of `acceptedCapacity` and `wholesalePowerCapacityDischargeAvailable` and/or `wholesalePowerCapacityChargeAvailable` is increased by the same amount. 

If the bid is rejected, the ancillary commitment for the duration of the delivery period is reduced to 0 and `wholesalePowerCapacityDischargeAvailable` and/or `wholesalePowerCapacityChargeAvailable` is increased by the `offeredCapacity` of the bid.

E.g. if a aFRR Pos bid is rejected, the `offeredCapacity` of the bid is removed from `afrrPosCommitment` and added to `wholesalePowerCapacityDischargeAvailable`.

### Behaviour during unavailability

If a virtual asset is affected by an unavailability, we may:

1, Reduce the `acceptedCapacity` of a result and adjust the ancillary commitments timeseries accordingly.

2, Change the status of a result from `accepted: true` to `accepted: false` and adjust the ancillary commitments timeseries accordingly.

Notably, reducing or rejecting ancillary bids is always a last resort action: We will first fully reduce the available wholesale capacity before touching the ancillary bids.

To be informed about the state of your ancillary commitments and the available wholesale capacity, make sure to always monitor the following operational data categories: `afrrPosCommitment`, `afrrNegCommitment`, `fcrCommitment`, `wholesalePowerCapacityChargeAvailable`, `wholesalePowerCapacityDischargeAvailable`.




## OpenAPI

````yaml https://api.sandbox.trlyr.com/docs/doc.json get /organisations/{organisationID}/virtual-assets/{virtualAssetID}/ancillary/results
openapi: 3.1.0
info:
  description: >
    This API allows clients to manage virtual-assets and blocks on the terralayr
    system.


    A virtual asset is a virtual battery, it has static parameters that dictate
    how much power it can import / export, how much energy it can store, and how
    efficiently it charges / discharges. It also has a state of charge which
    changes as the virtual asset exports and imports power.


    A block represents a slice of the power capacity of a virtual asset over
    time, and has a schedule which can be updated to control what the
    virtual-asset will do.


    Virtual assets should be kept balanced: you should manage the schedule such
    that the such that state of charge at the end of its lifetime is 50%. It is
    possible to submit schedules that do not end at 50%, but the response will
    include information about how much imbalance is left.


    ### Authorization


    All the underneath requests require a Bearer-type `Authorization` Header
    i.e. in the form : `Authorization: Bearer <YOUR_TOKEN>`.


    To retrieve a valid token you must log in to our system using a
    password-username authentication as follows:


    ```

    POST https://api.sandbox.trlyr.com/auth/public/authenticate

    ```


    with the following JSON body:


    ```

    {
        "username": "YOUR_USERNAME",
        "password": "YOUR_PASSWORD"
    }

    ```


    Your username and password are the ones you created after receiving an
    invitation to join your organisation.


    You should receive a JSON response body from which you can extract your
    token under `access_token`.


    If you have any questions, don't hesitate to contact our account manager at
    the following address: support@trlyr.com.
  title: terralayr API
  version: 1.11.3
servers:
  - description: Production API
    url: https://api.trlyr.com
  - description: Sandbox API
    url: https://api.sandbox.trlyr.com
security: []
tags:
  - name: virtual-assets
  - name: afrr
  - name: fcr
  - name: ancillary
  - name: blocks
externalDocs:
  description: ''
  url: ''
paths:
  /organisations/{organisationID}/virtual-assets/{virtualAssetID}/ancillary/results:
    get:
      tags:
        - ancillary
      summary: Get all ancillary results for a given virtual asset and interval.
      description: >
        # Gets all ancillary results for a given virtual asset and time interval


        ## Query Parameters


        Required query parameters:


        `start`: Start specifies the start of the time interval for which to
        retrieve results, e.g. `2025-06-17T12:00:00Z` (RFC3339 in UTC).


        `end`: End specifies the end of the time interval for which to retrieve
        results, e.g. `2025-06-18T12:00:00Z` (RFC3339 in UTC).


        Optional query parameters:


        `markets`: Returns results for requested markets as a comma separated
        string, e.g. `FCR,AFRREnergy`. If not set, returns all markets.
        Available options (case sensitive): `FCR`, `AFRREnergy`, `AFRRCapacity`.


        `productDirections`: Returns results for requested product directions as
        a comma separated string, e.g. `NEGPOS,POS`. If not set, returns all
        product directions. Available options (case sensitive): `POS`, `NEG`,
        `NEGPOS`.


        ## Response format

        Returns a JSON representation of the ancillary results for the given
        time interval and virtual asset as a list. The following fields are
        provided:


        `market`: The market of the result, one of: `FCR`, `AFRREnergy`,
        `AFRRCapacity`.


        `product`: The product of the result, e.g. `NEGPOS_00_04` (FCR),
        `POS_00_04` (AFRR Capacity), `POS_001` (AFRR Energy).


        `deliveryDay`: The delivery day of the bid result in the format
        `YYYY-MM-DD`, e.g. `2026-05-30` (full day according to RFC3339).


        `results`: A list of individual bid results for the product.


        Each result in the list contains the following fields whose contents can
        vary depending on the market:


        `bidID`: The ID of the corresponding bid.


        `accepted`: A boolean field that shows whether the bid was accepted or
        rejected in the auction.


        `offeredCapacity`: The offered capacity of the original bid in
        **kilowatts**, e.g. `2000`.


        `acceptedCapacity`: The accepted capacity determined in the auction in
        **kilowatts**, e.g. `1000`. Can be equal to or less than the
        `offeredCapacity`.


        `capacityPrice`:

        - aFRR Energy: This field is null.

        - aFRR Capacity: The capacity price of the original aFRR bid in
        **EUR/MW/h**, e.g. `100.00`. This price is used to determine the
        position of the bid in the TSO's merit order. Since AFRR Capacity
        auctions are Pay As Bid, its value can be used to calculate revenue for
        AFRR Capacity results. See example below.

        - FCR: The capacity price of the original FCR bid in **EUR/MW**, e.g.
        `100.00`. This price is used to determine the position of the bid in the
        TSO's merit order. Since FCR auctions are Pay As Clear, its value is not
        relevant for revenue calculations. See example below.


        `settlementPrice`: The settlement price determined by the auction in
        **EUR/MW**, e.g. `150.00`. This field is only filled for FCR results.
        Since FCR auctions are Pay As Clear, it can be used to calculate revenue
        for FCR results. See example below.


        `energyPrice`: The energy price of the original bid in **EUR/MWh**, e.g.
        `100.00`. This price is used to determine the position of the bid in the
        TSO's merit order. It cannot be used to calculate revenue for AFRR
        Energy results. See example below.



        ## Results publication


        The exact publication time of results is not guaranteed.


        If results have not yet been published, returns an empty list and status
        code 200.


        ### aFRR Energy 

        23 minutes before the start of the delivery period. E.g. for an aFRR
        Energy bid with delivery day 15.01.2026 and a delivery period starting
        at 12:30pm, results are expected around 12:07pm on 15.01.2026.


        ### aFRR Capacity 

        9:20am CET/CEST on the day before the delivery day. E.g. for an aFRR
        Capacity bid with delivery day 15.01.2026, results are expected around
        9:20am CET on 14.01.2026.


        ### FCR

        8:20am CET/CEST on the day before delivery day. E.g. for an FCR bid with
        delivery day 15.01.2026, results are expected around 8:20am CET on
        14.01.2026.


        ## Revenue calculation


        ### aFRR Energy


        The aFRR Energy auction is Pay As Clear.


        The `settlementPrice` for each product is only decided after the
        delivery period has ended and depends on the activations that have taken
        place during the delivery period.


        The `settlementPrice` can be found in the data center of
        **regelleistung.net**. It can also be received through our internal
        revenue-reporting endpoint. Importantly, it is not part of the response
        of an AFRR Energy result, since the results are generated before the
        settlement price is decided.


        If your bid is accepted, you are not automatically receiving revenue for
        the delivery period.


        You are paid only for the activated power you deliver, not the accepted
        capacity. The activations your asset performed can be received through
        our internal revenue-reporting endpoint.


        Example:

        - `energyPrice` offered in the bid: 80 EUR/MWh

        - `settlementPrice`: 100 EUR/MWh

        - Total activated power in 15 minutes: 2000 kW

        - Revenue: 100 EUR/MWh * 2 MW * 0.25 h = 50 EUR



        ### aFRR Capacity


        The aFRR Capacity auction is Pay As Bid and takes place on the day
        before the delivery day between 9:00am-9:20am CET/CEST.


        Depending on your offered `capacityPrice`, your bid is rejected or
        accepted.


        If a bid is accepted, you are paid the offered `capacityPrice` for each
        hour of the delivery period.


        You are paid for the capacity you provide, irrespective of the
        activations your asset delivers.


        Example:

        - `capacityPrice` offered in bid: 100 EUR/MW

        - `acceptedCapacity` received in result: 2000 kW

        - Revenue: (100 EUR/MW/h * 2 MW) * 4h = 800 EUR



        ### FCR


        The FCR Capacity auction is Pay As Clear and takes place on the day
        before the delivery day between 8:00am-8:20am CET/CEST.


        During this auction, a settlement price is set for each 4 hour EFA block
        on the next day.


        For an accepted bid, this settlement price will be equal to or higher
        than the capacity price offered on your bid.


        If a bid is accepted, you are paid the `settlementPrice` for the whole
        duration of the delivery period.


        You are paid for the capacity you provide, irrespective of the
        activations your asset delivers.


        Example:

        - `capacityPrice` offered in bid: 80 EUR/MW

        - `settlementPrice` received in result: 100 EUR/MW

        - `acceptedCapacity` received in result: 2000 kW

        - Revenue: 100 EUR/MW * 2 MW = 200 EUR


        ### Behaviour during full availability


        Once a bid has received a result, both the ancillary commitment and the
        available wholesale capacity on the virtual asset are adjusted.


        You can check your ancillary commitments per market through the
        `operationalData` endpoint on the virtual asset, by requesting the
        following categories: `fcrCommitment`, `afrrPosCommitment`,
        `afrrNegCommitment`.


        You can check your available wholesale capacity by requesting the
        following categories: `wholesalePowerCapacityChargeAvailable`,
        `wholesalePowerCapacityDischargeAvailable`.


        The adjustment depends on the nature of the result:


        If the result is accepted and `acceptedCapacity` = `offeredCapacity`,
        your ancillary commitments and wholesale capacity are unchanged. 


        If `acceptedCapacity` < `offeredCapacity`, the ancillary commitment for
        the duration of the delivery period is reduced to the value of
        `acceptedCapacity` and `wholesalePowerCapacityDischargeAvailable` and/or
        `wholesalePowerCapacityChargeAvailable` is increased by the same
        amount. 


        If the bid is rejected, the ancillary commitment for the duration of the
        delivery period is reduced to 0 and
        `wholesalePowerCapacityDischargeAvailable` and/or
        `wholesalePowerCapacityChargeAvailable` is increased by the
        `offeredCapacity` of the bid.


        E.g. if a aFRR Pos bid is rejected, the `offeredCapacity` of the bid is
        removed from `afrrPosCommitment` and added to
        `wholesalePowerCapacityDischargeAvailable`.


        ### Behaviour during unavailability


        If a virtual asset is affected by an unavailability, we may:


        1, Reduce the `acceptedCapacity` of a result and adjust the ancillary
        commitments timeseries accordingly.


        2, Change the status of a result from `accepted: true` to `accepted:
        false` and adjust the ancillary commitments timeseries accordingly.


        Notably, reducing or rejecting ancillary bids is always a last resort
        action: We will first fully reduce the available wholesale capacity
        before touching the ancillary bids.


        To be informed about the state of your ancillary commitments and the
        available wholesale capacity, make sure to always monitor the following
        operational data categories: `afrrPosCommitment`, `afrrNegCommitment`,
        `fcrCommitment`, `wholesalePowerCapacityChargeAvailable`,
        `wholesalePowerCapacityDischargeAvailable`.
      parameters:
        - description: Access token
          in: header
          name: Authorization
          required: true
          schema:
            default: Bearer <access token value>
            type: string
        - description: Organisation ID
          in: path
          name: organisationID
          required: true
          schema:
            type: string
        - description: Virtual Asset ID
          in: path
          name: virtualAssetID
          required: true
          schema:
            type: string
        - description: Query start time
          in: query
          name: start
          required: true
          schema:
            type: string
        - description: Query end time
          in: query
          name: end
          required: true
          schema:
            type: string
        - description: Selected markets
          in: query
          name: markets
          schema:
            type: string
        - description: Selected product directions
          in: query
          name: productDirections
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AncillaryResultsBody'
                type: array
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
components:
  schemas:
    AncillaryResultsBody:
      properties:
        deliveryDay:
          example: '2025-11-11'
          type: string
        market:
          example: AFRRCapacity
          type: string
        product:
          example: POS_00_04
          type: string
        results:
          items:
            $ref: '#/components/schemas/AncillaryResultBody'
          type: array
          uniqueItems: false
      required:
        - deliveryDay
        - market
        - product
      type: object
    AncillaryResultBody:
      properties:
        accepted:
          example: true
          type: boolean
        acceptedCapacity:
          description: In kW
          example: 1000
          format: float
          type: number
        bidID:
          example: 11111111-1111-1111-1111-111111111111
          format: uuid
          type: string
        capacityPrice:
          description: In EUR/MW/h (AFRR Capacity) or EUR/MW (FCR)
          example: 100.5
          format: float
          type: number
        energyPrice:
          description: In EUR/MWh (AFRR Capacity and AFRR Energy only)
          example: 100.5
          format: float
          type: number
        offeredCapacity:
          description: In kW
          example: 2000
          format: float
          type: number
        settlementPrice:
          description: In EUR/MW (FCR only)
          example: 100.5
          format: float
          type: number
      required:
        - bidID
      type: object

````