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

# Update FCR bids for a single product and delivery day.

> # Updates a fCR product bid for a virtual asset

The endpoint expects a list of bids for a single product and delivery day. For now, only a single bid per product is allowed.

If one (or more) bids have already been submitted for the product, they will be replaced by the newer submission.

## Path parameters

`productDateCode`:

The product date code identifies a single product and delivery day pair: `YYYY-MM-DD_{{productName}}`, e.g. `2025-01-01_NEGPOS_00_04`.

The delivery day inside the `productDateCode` path parameter must be in the following format: `YYYY-MM-DD`, e.g. `2025-01-01` (full day according to RFC3339).

All submitted bids for this product are updated. Previous bids are deleted.

## Request body

The request body is a list of bids to be placed for the selected product and delivery day. It contains the following fields:

`offeredCapacity`:

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

The value must be an integer multiple of 1 megawatt. Any non-integral part will be rounded down, e.g. 1000.5 is accepted and rounded down to 1000kW, whereas 1500 would be rejected.

`capacityPrice`: 

The capacity price of the 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. 

The max price that can be bid into both markets is 15,000 Euros, the min price is -15,000 Euros. 

If you bid a positive price (> 0), you will be paid by the TSO. If you bid a negative price (< 0), you pay the TSO.

## Bidding deadline

All bids must be placed before the following deadline: **7:30 am CET/CEST** on the day before delivery. The auction opens a week before the delivery day.

## Determining available bidding capacity

Validation 1 and 2 must be passed, or the bid will be rejected.

### Validation 1: Available fCR capacity timeseries

The `offeredCapacity` for fCR bids at any given point in time must be lower than or equal to the available fCR capacity of the virtual asset.

The value can be retrieved from the `operationalData` endpoint on the virtual asset as a 15 minute timeseries by requesting the operational data category `fcrCapacityAvailable`.

Example:
- `fcrCapacityAvailable` from 00:00-04:00 am:        4000 kW
- Remaining capacity for product `NEGPOS_00_04`:     4000 kW

### Validation 2: Max total ancillary capacity timeseries

The `offeredCapacity` for fCR bids at any given point in time must also take into account bids that have already been placed in the aFRR market for the same period so as not to exceed the max total ancillary capacity of the virtual asset.

An aFRR bid has either a positive or a negative product direction, while an fCR bid has both product directions.

The max total ancillary capacity can be retrieved from the `operationalData` endpoint on the virtual asset as a 15 minute timeseries by requesting the operational data category `maxTotalAncillaryCapacityChargeAvailable` (negative direction) and `maxTotalAncillaryCapacityDischargeAvailable` (positive direction) respectively. The lower of those two values will determine the remaining fCR capacity.

Example:
- `maxTotalAncillaryCapacityDiscargeAvailable`:          5000 kW
- `maxTotalAncillaryCapacityChargeAvailable`:            4000 kW
- aFRR Pos bid placed for product `POS_00_04`:           3000 kW
- Remaining capacity for product `NEGPOS_00_04`:         1000 kW (minimum(5000,4000) - 3000)

## Deleting bids

To delete a bid, set the bid body as an empty array:

```json
[
  {
    "bids": [],
    "deliveryDay": "2026-04-10",
    "product": "NEGPOS_00_04"
  }
]
```
## Adjustment of virtual asset blocks

Once a valid bid has been submitted, a new fCR block (`"market":"FCR"`) is added to the virtual asset.

The block will cover the duration of the whole virtual asset.

Inside the block's power capacity timeseries, the `powerCapacity` is updated to value of the bid's `offeredCapacity` for the delivery period of the product you bid on.

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

Both the fCR and the wholesale block will be adjusted according to the incoming bid results.

E.g. if a bid is rejected, the `powerCapacity` is removed from the fCR block and added to the wholesale block.

## Response format

Returns a JSON representation of the created fCR product bids identical to the POST fCR bids response body.




## OpenAPI

````yaml https://api.sandbox.trlyr.com/docs/doc.json put /organisations/{organisationID}/virtual-assets/{virtualAssetID}/ancillary/fcr/bids/{productDateCode}
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/fcr/bids/{productDateCode}:
    put:
      tags:
        - fcr
      summary: Update FCR bids for a single product and delivery day.
      description: >
        # Updates a fCR product bid for a virtual asset


        The endpoint expects a list of bids for a single product and delivery
        day. For now, only a single bid per product is allowed.


        If one (or more) bids have already been submitted for the product, they
        will be replaced by the newer submission.


        ## Path parameters


        `productDateCode`:


        The product date code identifies a single product and delivery day pair:
        `YYYY-MM-DD_{{productName}}`, e.g. `2025-01-01_NEGPOS_00_04`.


        The delivery day inside the `productDateCode` path parameter must be in
        the following format: `YYYY-MM-DD`, e.g. `2025-01-01` (full day
        according to RFC3339).


        All submitted bids for this product are updated. Previous bids are
        deleted.


        ## Request body


        The request body is a list of bids to be placed for the selected product
        and delivery day. It contains the following fields:


        `offeredCapacity`:


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


        The value must be an integer multiple of 1 megawatt. Any non-integral
        part will be rounded down, e.g. 1000.5 is accepted and rounded down to
        1000kW, whereas 1500 would be rejected.


        `capacityPrice`: 


        The capacity price of the 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. 


        The max price that can be bid into both markets is 15,000 Euros, the min
        price is -15,000 Euros. 


        If you bid a positive price (> 0), you will be paid by the TSO. If you
        bid a negative price (< 0), you pay the TSO.


        ## Bidding deadline


        All bids must be placed before the following deadline: **7:30 am
        CET/CEST** on the day before delivery. The auction opens a week before
        the delivery day.


        ## Determining available bidding capacity


        Validation 1 and 2 must be passed, or the bid will be rejected.


        ### Validation 1: Available fCR capacity timeseries


        The `offeredCapacity` for fCR bids at any given point in time must be
        lower than or equal to the available fCR capacity of the virtual asset.


        The value can be retrieved from the `operationalData` endpoint on the
        virtual asset as a 15 minute timeseries by requesting the operational
        data category `fcrCapacityAvailable`.


        Example:

        - `fcrCapacityAvailable` from 00:00-04:00 am:        4000 kW

        - Remaining capacity for product `NEGPOS_00_04`:     4000 kW


        ### Validation 2: Max total ancillary capacity timeseries


        The `offeredCapacity` for fCR bids at any given point in time must also
        take into account bids that have already been placed in the aFRR market
        for the same period so as not to exceed the max total ancillary capacity
        of the virtual asset.


        An aFRR bid has either a positive or a negative product direction, while
        an fCR bid has both product directions.


        The max total ancillary capacity can be retrieved from the
        `operationalData` endpoint on the virtual asset as a 15 minute
        timeseries by requesting the operational data category
        `maxTotalAncillaryCapacityChargeAvailable` (negative direction) and
        `maxTotalAncillaryCapacityDischargeAvailable` (positive direction)
        respectively. The lower of those two values will determine the remaining
        fCR capacity.


        Example:

        - `maxTotalAncillaryCapacityDiscargeAvailable`:          5000 kW

        - `maxTotalAncillaryCapacityChargeAvailable`:            4000 kW

        - aFRR Pos bid placed for product `POS_00_04`:           3000 kW

        - Remaining capacity for product `NEGPOS_00_04`:         1000 kW
        (minimum(5000,4000) - 3000)


        ## Deleting bids


        To delete a bid, set the bid body as an empty array:


        ```json

        [
          {
            "bids": [],
            "deliveryDay": "2026-04-10",
            "product": "NEGPOS_00_04"
          }
        ]

        ```

        ## Adjustment of virtual asset blocks


        Once a valid bid has been submitted, a new fCR block (`"market":"FCR"`)
        is added to the virtual asset.


        The block will cover the duration of the whole virtual asset.


        Inside the block's power capacity timeseries, the `powerCapacity` is
        updated to value of the bid's `offeredCapacity` for the delivery period
        of the product you bid on.


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


        Both the fCR and the wholesale block will be adjusted according to the
        incoming bid results.


        E.g. if a bid is rejected, the `powerCapacity` is removed from the fCR
        block and added to the wholesale block.


        ## Response format


        Returns a JSON representation of the created fCR product bids identical
        to the POST fCR bids response body.
      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: Bid ID
          in: path
          name: productDateCode
          required: true
          schema:
            default: YYYY-MM-DD_ProductName
            type: string
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/UpdateFCRProductBid'
              title: updateFCRProductBid
              type: array
        description: FCR Product Bid Update
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/FCRProductBidsBody'
                type: array
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
components:
  schemas:
    UpdateFCRProductBid:
      properties:
        capacityPrice:
          description: In EUR/MW
          example: 100.5
          format: float
          type: number
        offeredCapacity:
          description: In kW
          example: 1000
          format: float
          type: number
      required:
        - capacityPrice
        - offeredCapacity
      type: object
    FCRProductBidsBody:
      properties:
        bids:
          items:
            $ref: '#/components/schemas/FCRProductBidBody'
          type: array
          uniqueItems: false
        deliveryDay:
          example: '2025-11-11'
          type: string
        product:
          example: NEGPOS_00_04
          type: string
        productDateCode:
          example: 2025-11-11_NEGPOS_00_04
          type: string
      required:
        - deliveryDay
        - product
        - productDateCode
      type: object
    FCRProductBidBody:
      properties:
        capacityPrice:
          description: In EUR/MW
          example: 100.5
          format: float
          type: number
        offeredCapacity:
          description: In kW (must be an integer multiple of 1 megawatt, e.g. 1000, 2000)
          example: 1000
          format: float
          type: number
      required:
        - capacityPrice
        - offeredCapacity
      type: object

````