Create, update and remove an event's groups
One row per group. A row without groupId creates a group; a row
with one updates it; a row with remove: true deletes it, moving
its lines to moveItemsTo (or leaving them ungrouped when that is
omitted).
Rows are independent: a bad reference fails that row only, is reported
in errors, and every other row still applies. Send an
Idempotency-Key header to make a retry safe — a replay returns the
original response without writing again.
Changing quantityMode, groupQuantity or hidden moves the event’s
money, so the event’s totals are recomputed once per call.
Errors (per row, in errors)
name_required— a create row without a name.group_not_found—groupIdisn’t a group on this event.group_id_required— a row asking to remove without naming a group.move_target_not_found—moveItemsToisn’t a group on this event.move_target_is_removed_group—moveItemsTonames a group this same batch removes.invalid_group_quantity—groupQuantitybelow 1, or not a whole number.
Whole-request failures: 404 event_not_found, 400 groups_must_be_array, 422 too_many_items above 500 rows.
POST
/api/v1/events/{id}/groupsAuthorization
AuthorizationBearer token (bloomcount_...) · headerrequiredPath parameters
idstringrequiredHeader parameters
Idempotency-KeystringReplays return the cached response. 24h TTL, scoped per API key.
Request body
requiredapplication/jsongroupsEventGroupWriteItem[]requiredmax items 500
Show propertiesHide properties
Array of
EventGroupWriteItemgroupIdstringOmit to create a group. Supply it to update or remove that group.
namestringRequired when creating. Renames the group when updating.
quantityModestringopen bills each line's own quantity. group multiplies every line in the group by groupQuantity, which is how a table centre repeated across twelve tables is priced.
Allowed:
opengroupgroupQuantitynumberThe multiplier used when quantityMode is group. Must be above zero.
hiddenbooleanHidden groups stay on the event but are excluded from its totals, which is how a proposal offers an option without pricing it.
orderintegerSort position in the event. New groups are appended when omitted.
removebooleanDeletes the group. Requires groupId.
moveItemsTostringOn removal, the group the deleted group's lines move to. They become ungrouped when this is omitted. Must be another group on this event.
Responses
200No row created
resultsobject[]requiredShow propertiesHide properties
Array of
objectindexintegerrequiredactionstringrequiredAllowed:
createdupdatedremovedgroupIdstringrequirederrorsobject[]requiredRows that failed. Every other row still applied.
Show propertiesHide properties
Array of
objectindexintegerrequiredPosition of the failing row in the array you sent, zero-based.
errorstringrequiredStable error code. Values:
- `group_not_found` — the `groupId` is unknown, or belongs to another event or tenant.
- `group_id_required` — `remove: true` without a `groupId`.
- `name_required` — creating a group without a name.
- `invalid_group_quantity` — `groupQuantity` is zero or negative.
- `move_target_not_found` — `moveItemsTo` is not a group on this event.
- `move_target_is_removed_group` — `moveItemsTo` points at the group being removed.
201At least one group created
resultsobject[]requiredShow propertiesHide properties
Array of
objectindexintegerrequiredactionstringrequiredAllowed:
createdupdatedremovedgroupIdstringrequirederrorsobject[]requiredRows that failed. Every other row still applied.
Show propertiesHide properties
Array of
objectindexintegerrequiredPosition of the failing row in the array you sent, zero-based.
errorstringrequiredStable error code. Values:
- `group_not_found` — the `groupId` is unknown, or belongs to another event or tenant.
- `group_id_required` — `remove: true` without a `groupId`.
- `name_required` — creating a group without a name.
- `invalid_group_quantity` — `groupQuantity` is zero or negative.
- `move_target_not_found` — `moveItemsTo` is not a group on this event.
- `move_target_is_removed_group` — `moveItemsTo` points at the group being removed.
400Malformed event ID, or `groups` is not an array.
errorstringrequired401Missing or invalid API key, or revoked / expired.
errorstringrequired403Authenticated, but the key lacks the required scope or the tenant has no API access.
errorstringrequired404Event not found in the caller's tenant.
errorstringrequired422Request body or arguments failed validation.
errorstringrequired429Per-minute rate limit (60/min) or per-month cap exceeded.
errorstringrequired