> ## 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 aFRR results for a given virtual asset and delivery day.

> # Gets aFRR results for a given virtual asset, product and delivery day

## Query Parameters

Required query parameters:

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

Optional query parameters:

`accepted`: An optional boolean to filter the response to show only accepted or rejected results. If the parameter is not set, all results are returned.

## 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:

`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:

`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.

`settlementPrice`: This field is null.

`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 a bid with delivery period starting at 12:30pm, results are expected around 12:07pm.

### AFRR Capacity
**9:20am CET/CEST** on the day before the delivery day. E.g. for any AFRR Capacity bid with delivery day 15.01.2026, results are expected around 9: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

## Adjustment of virtual asset blocks

The incoming result leads to an adjustment of the aFRR and wholesale block on the virtual asset.

Inside the aFRR block's power capacity timeseries, the `powerCapacity` is updated to value of the result's `acceptedCapacity` for the delivery period of the product.

At the same time, the `powerCapacity` of the wholesale block (`"market":"WHOLESALE"`) for the delivery period of the product you bid on is adjusted: 

If `acceptedCapacity` = `offeredCapacity`, nothing happens. If `acceptedCapacity` < `offeredCapacity`, the `powerCapacity` of the aFRR block for the duration of the delivery period is reduced to the value of `acceptedCapacity`, whereas the `powerCapacity` of the wholesale block is increased by the same amount during that time. If the bid is rejected altogether, the `powerCapacity` of the aFRR block for the duration of the delivery period is reduced to 0 and the `powerCapacity` of the wholesale block is increased by the same amount.

If a bid is rejected, the `powerCapacity` is removed from the aFRR block and fully added to the wholesale block.




## OpenAPI

````yaml https://api.sandbox.trlyr.com/docs/doc.json get /organisations/{organisationID}/virtual-assets/{virtualAssetID}/ancillary/afrr/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/afrr/results:
    get:
      tags:
        - afrr
      summary: Get all aFRR results for a given virtual asset and delivery day.
      description: >
        # Gets aFRR results for a given virtual asset, product and delivery day


        ## Query Parameters


        Required query parameters:


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


        Optional query parameters:


        `accepted`: An optional boolean to filter the response to show only
        accepted or rejected results. If the parameter is not set, all results
        are returned.


        ## 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:


        `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:


        `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.


        `settlementPrice`: This field is null.


        `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 a bid
        with delivery period starting at 12:30pm, results are expected around
        12:07pm.


        ### AFRR Capacity

        **9:20am CET/CEST** on the day before the delivery day. E.g. for any
        AFRR Capacity bid with delivery day 15.01.2026, results are expected
        around 9: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


        ## Adjustment of virtual asset blocks


        The incoming result leads to an adjustment of the aFRR and wholesale
        block on the virtual asset.


        Inside the aFRR block's power capacity timeseries, the `powerCapacity`
        is updated to value of the result's `acceptedCapacity` for the delivery
        period of the product.


        At the same time, the `powerCapacity` of the wholesale block
        (`"market":"WHOLESALE"`) for the delivery period of the product you bid
        on is adjusted: 


        If `acceptedCapacity` = `offeredCapacity`, nothing happens. If
        `acceptedCapacity` < `offeredCapacity`, the `powerCapacity` of the aFRR
        block for the duration of the delivery period is reduced to the value of
        `acceptedCapacity`, whereas the `powerCapacity` of the wholesale block
        is increased by the same amount during that time. If the bid is rejected
        altogether, the `powerCapacity` of the aFRR block for the duration of
        the delivery period is reduced to 0 and the `powerCapacity` of the
        wholesale block is increased by the same amount.


        If a bid is rejected, the `powerCapacity` is removed from the aFRR block
        and fully added to the wholesale block.
      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: Delivery Day
          in: query
          name: deliveryDay
          required: true
          schema:
            default: YYYY-MM-DD
            type: string
        - description: 'Market: ''capacity'' or ''energy'''
          in: query
          name: market
          schema:
            type: string
        - description: Filter for accepted or rejected bids
          in: query
          name: accepted
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AFRRResultsBody'
                type: array
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
components:
  schemas:
    AFRRResultsBody:
      properties:
        deliveryDay:
          example: '2025-11-11'
          type: string
        product:
          example: POS_00_04
          type: string
        results:
          items:
            $ref: '#/components/schemas/AFRRResultBody'
          type: array
          uniqueItems: false
      required:
        - deliveryDay
        - product
      type: object
    AFRRResultBody:
      properties:
        accepted:
          example: true
          type: boolean
        acceptedCapacity:
          description: In kW
          example: 1000
          format: float
          type: number
        capacityPrice:
          description: In EUR/MW/h (will be 'null' in energy market bid)
          example: 100.5
          format: float
          type: number
        energyPrice:
          description: In EUR/MWh
          example: 100.5
          format: float
          type: number
        offeredCapacity:
          description: In kW
          example: 1000
          format: float
          type: number
        settlementPrice:
          description: In EUR/MW/h or EUR/MWh
          example: 100.5
          format: float
          type: number
      type: object

````