Manage Blocks

A block’s lifecycle looks like this:

Tentative ──confirm──▶ Definite
    ▲                      │
    │       release        │  cancel
    └──────────────────────┤
                            ▼
                          Canceled

Tentative

The default status on creation. Units are reserved for the group, but availability elsewhere is not reduced yet, so the hold can be adjusted or abandoned with no side effects.

Definite

PUT /booking/v1/block-actions/{id}/confirm

Confirming is what actually reserves the inventory. This call re-checks availability and only succeeds if there is still enough left. Treat it as a normal rejectable call in your integration: if availability has shrunk since the block was created, prompt the organiser to reduce the block rather than assuming confirmation always works.

Amend covers general edits, including moving a block between statuses directly:

PUT /booking/v1/block-actions/{id}/amend
{
  "from": "2026-08-09",
  "to": "2026-08-12",
  "grossDailyRate": { "amount": 160, "currency": "EUR" },
  "timeSlices": [
    { "blockedUnits": 3 },
    { "blockedUnits": 0 },
    { "blockedUnits": 7 }
  ],
  "marketSegmentId": "BUSR",
  "status": "Tentative"
}

Release moves a block from Definite back to Tentative and returns the inventory. Only allowed if no reservation has been picked up yet:

PUT /booking/v1/block-actions/{id}/release

Cancel moves the block to Canceled. Only allowed if no reservation has been picked up yet:

PUT /booking/v1/block-actions/{id}/cancel

Pickup creates reservations against its block. Each pickup consumes one held unit from the block.

POST /booking/v1/groups/{id}/reservations
{
  "reservations": [
    {
      "blockId": "MUC-QJNXJR",
      "arrival": "2026-08-08",
      "departure": "2026-08-10",
      "adults": 1,
      "comment": "Needs a wake-up call",
      "primaryGuest": {
        "title": "Mr",
        "gender": "Male",
        "firstName": "Jon",
        "middleInitial": "D",
        "lastName": "Doe",
        "email": "john.d@doe.com",
        "phone": "+4989123343",
        "address": {
          "addressLine1": "My Street 1",
          "postalCode": "12453",
          "city": "MyCity",
          "countryCode": "GB"
        },
        "company": { "name": "Company GmbH", "taxId": "1442" }
      }
    },
    {
      "blockId": "MUC-WKMCKT",
      "arrival": "2026-08-08",
      "departure": "2026-08-10",
      "adults": 1,
      "childrenAges": [6],
      "primaryGuest": {
        "title": "Mr",
        "gender": "Male",
        "firstName": "Eric",
        "middleInitial": "E",
        "lastName": "Steinmetz",
        "email": "eric.e@steinmetz.com",
        "phone": "+4989123343",
        "address": {
          "addressLine1": "My Street 1",
          "postalCode": "12453",
          "city": "MyCity",
          "countryCode": "GB"
        }
      }
    }
  ]
}
  • blockId ties the new reservation to its block, and the returned reservation ID ties it back to the group.
  • The reservation inherits the block’s rate plan; you don’t repeat rate details on the pickup call.
  • If a picked-up reservation is cancelled, the unit returns to the block’s unpicked pool automatically, it doesn’t need to be manually restored.
  • Everything after pickup (amend, check-in, cancel) runs through the standard reservation-actions endpoints, the same ones you’d use for any non-block reservation.

Wash frees the unpicked remainder of a Definite block back to public availability, without changing the block’s own status. Useful when actual attendance comes in under the negotiated block size:

PUT /booking/v1/block-actions/{id}/wash

Each Block action — created, changed, deleted, confirmed, released, washed, cancelled — sends an event you can listen to using webhooks.