Create a Block

A block reserves a number of units, for one rate plan, across a date range. Each night in that range gets its own entry in timeSlices, so the number of blocked units can vary night to night, useful when attendance ramps up mid-event and tapers off at the end.

POST /booking/v1/blocks
{
  "groupId": "EQBOXNNQ",
  "ratePlanId": "MUC-NONREF-SGL",
  "from": "2026-08-08",
  "to": "2026-08-11",
  "grossDailyRate": {
    "amount": 160,
    "currency": "EUR"
  },
  "timeSlices": [
    { 
    "blockedUnits": 3 
    },
    { 
    "blockedUnits": 0 
    },
    { 
    "blockedUnits": 7 
    }
  ],
  "marketSegmentId": "BUSR"
}

Notes on the fields:

  • groupId links the block back to the group created in Step 1.
  • ratePlanId must be a rate plan that already exists at the property. The block negotiates against that plan’s structure rather than defining a new one.
  • from / to define the date range. timeSlices has one entry per night, in order. A three-night range (Aug 8 → Aug 11) needs exactly three entries. In the example above, the middle night holds 0 units even though the block spans it, while the surrounding nights hold 3 and 7.
  • grossDailyRate is the negotiated average rate. Apaleo’s rate on a block is a per-night average, so if the group negotiated different weekday and weekend pricing, this figure needs to be the blended average across the stay. Neither the API nor the Apaleo UI supports varying the rate itself night to night, only the unit count.
  • marketSegmentId tags the block, and any reservations picked up from it, for reporting, same as on a regular reservation. Blocks inherit a market segment from the rate plan by default, so only set this if the booking needs to be tracked separately. Changing the rate plan’s segment later only affects blocks created after that change, not existing ones.

The response returns a blockId. The block starts life in Tentative status: held, but not yet pulled out of public availability.