Offerings catalog

Voucher Types

A VoucherType represents a type of voucher that can be purchased at a site.

get/shop/voucher-types

List Voucher Types

listVoucherTypes

This endpoint lists all the VoucherTypes which are associated with the given site.

Query parameters

  • site_idstringrequired

    Filter results by the site they belong to

  • archivedbooleanoptional

    Whether to include archived resources in the response. When true, archived resources are returned; when false or omitted, only non-archived resources are returned.

  • amount_typestringoptional

    Filter voucher types by their amount type.

    Possible values:cashdiscount_to_zero
  • customisable_amountbooleanoptional

    Filter voucher types by their customisable amount status.

  • querystringoptional

    Filter voucher types by their name.

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

Responses

  • 200

    A paginated list of VoucherTypes for the requested site.

  • 401

    The user is unauthenticated

post/shop/voucher-types

Create a voucher type

createVoucherType

Creates a new VoucherType on the site identified by the site_id query parameter, attributed to the caller's primary organisation. name is required; everything else has a sensible default.

The body's shape depends on amount_type:

  • amount_type=cash uses amount, customisable_amount, and partially_redeemable; the discount-to-zero-only fields are forced to null server-side.
  • amount_type=discount_to_zero uses valid_weekdays, invalid_date_set_ids, valid_offerings, and invalid_offerings; the cash-only fields are ignored.

The new voucher type's min_price / max_price are seeded from the submitted price at create time. Requires SETTINGS_MANAGE on the target site.

Query parameters

  • site_idstringrequired

    Filter results by the site they belong to

Request body

  • namestringrequired

    Customer-facing display name for the voucher type. Shown in the shopfront, the gift-voucher email, and the admin UI. Plain text.

  • descriptionstringoptionalnullable

    Long-form description of what the voucher type is for. Shown on the voucher's shopfront page.

  • product_codestringoptionalnullable

    Optional product code used to map this voucher type to an external POS or PMS catalogue. Free-form string; uniqueness is not enforced server-side.

  • external_idstringoptionalnullable

    External identifier used by integrations to reference this voucher type. Free-form.

  • image_idstringoptionalnullable

    ID of an uploaded Media to use as the cover image on the voucher type's shopfront page and in the gift-voucher email. Must reference a media item belonging to the caller's organisation.

  • recipient_messagestringoptionalnullable

    Default message included in the gift-voucher email sent to the recipient. The customer can override this at purchase time. HTML is accepted but stripped down to the site's allowed-tag list server-side.

  • amount_typestringoptional

    Determines whether this voucher type is a fixed-amount gift card (cash) or a single-offering discount-to-zero voucher (discount_to_zero). Drives which other fields are honoured — see the body description for details.

    Possible values:cashdiscount_to_zero
  • amountintegeroptional

    The cash value of the voucher in the smallest currency unit (e.g. pence/cents). Only relevant when amount_type=cash. Ignored for discount_to_zero.

  • customisable_amountbooleanoptional

    When true, the cashier (or customer at checkout) can override the voucher's value at sale time — useful for "any amount" gift cards. Only relevant when amount_type=cash; dropped from the payload for discount_to_zero.

  • partially_redeemablebooleanoptional

    When true, vouchers of this type can be redeemed in multiple transactions until the balance is exhausted. When false, the full value must be spent in one go and any remainder is forfeited. Only relevant when amount_type=cash.

  • valid_weekdaysstring[]optionalnullable

    Lowercase weekday names the voucher may be redeemed on. Only relevant when amount_type=discount_to_zero; forced to null for cash.

  • invalid_date_set_idsstring[]optionalnullable

    IDs of date sets (e.g. bank holidays, blackout periods) on which the voucher may not be redeemed. Only relevant when amount_type=discount_to_zero; forced to null for cash. Each ID must belong to the caller's organisation.

  • valid_offeringsobject[]optionalnullable

    Allowlist of offerings the voucher may be redeemed against. When set, the voucher is only valid for these offerings. Only relevant when amount_type=discount_to_zero; forced to null for cash.

  • invalid_offeringsobject[]optionalnullable

    Denylist of offerings the voucher may not be redeemed against. Used when valid_offerings is empty to express "any offering except these". Only relevant when amount_type=discount_to_zero.

  • default_validity_intervalstringoptionalnullable

    Default duration a sold voucher is valid for, as an ISO 8601 duration. The voucher's expiry is computed as `purchased_at

    • default_validity_interval. Examples: P1Y= 1 year,P6M= 6 months,P30D` = 30 days.
  • offered_onlinebooleanoptional

    When true, the voucher type can be purchased via the public shopfront. When false, it's sellable only via the admin UI.

  • privatebooleanoptional

    When true, the voucher type is reachable only via a direct link — it doesn't appear on category pages and isn't indexed by search engines.

  • visibilitystringoptional

    The visibility status of the product.

    Possible values:publiclink_onlyprivate
  • members_onlybooleanoptional

    When true, only customers with an active membership can purchase this voucher type. Combine with permitted_membership_type_ids to restrict further to specific tiers.

  • permitted_membership_type_idsstring[]optionalnullable

    Membership-type UUIDs whose active members are allowed to purchase this voucher type. Only relevant when members_only=true. Membership types from outside the site's brand are silently filtered out server-side.

  • category_idsstring[]optional

    Voucher-category IDs this voucher type belongs to. Used for shopfront grouping. Each ID must reference a category on the voucher type's site.

  • currencyoptional

    The ISO-4217 currency code (lowercase) the voucher's amount is expressed in. Must be a currency supported by the site.

Responses

  • 201

    A single VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 422

    The request didn't pass validation

get/shop/voucher-types/{voucherTypeId}

Retrieve a VoucherType

getVoucherType

Use this endpoint to retrieve a VoucherType model.

Path parameters

Responses

  • 200

    The VoucherType was successfully retrieved

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

put/shop/voucher-types/{voucherTypeId}

Update a voucher type

updateVoucherType

Updates an existing VoucherType. name is required (the validator re-asserts it on every update); other fields are optional and omitted fields retain their current values. Cash- vs discount-to-zero-specific fields are conditionally enforced — see the request body for details.

Sending category_ids: [] explicitly clears the category list (the only way to wipe categories — omitting the key leaves them unchanged).

Requires the SETTINGS_MANAGE permission on the voucher type's site.

Path parameters

Request body

  • namestringrequired

    Customer-facing display name. Plain text.

  • descriptionstringoptionalnullable

    Long-form description shown on the voucher's shopfront page.

  • product_codestringoptionalnullable

    External POS/PMS product code.

  • external_idstringoptionalnullable

    External identifier for integrations.

  • image_idstringoptionalnullable

    ID of an uploaded Media to use as the cover image.

  • recipient_messagestringoptionalnullable

    Default message included in the gift-voucher email. HTML is stripped to the site's allowed-tag list.

  • amount_typestringoptional

    Switches the voucher between a fixed cash-value gift card (cash) and a single-offering discount-to-zero voucher (discount_to_zero). Drives which other fields are honoured.

    Possible values:cashdiscount_to_zero
  • amountintegeroptional

    Cash value in the smallest currency unit. Only relevant when amount_type=cash.

  • customisable_amountbooleanoptional

    When true, the value can be overridden at sale time. Only relevant when amount_type=cash.

  • partially_redeemablebooleanoptional

    When true, the voucher can be redeemed across multiple transactions. Only relevant when amount_type=cash.

  • valid_weekdaysstring[]optionalnullable

    Lowercase weekday names the voucher is valid on. Only relevant when amount_type=discount_to_zero.

  • invalid_date_set_idsstring[]optionalnullable

    Date-set IDs the voucher is not valid on. Only relevant when amount_type=discount_to_zero.

  • valid_offeringsobject[]optionalnullable

    Allowlist of offerings the voucher may be redeemed against. Only relevant when amount_type=discount_to_zero.

  • invalid_offeringsobject[]optionalnullable

    Denylist of offerings the voucher may not be redeemed against. Only relevant when amount_type=discount_to_zero.

  • default_validity_intervalstringoptionalnullable

    ISO 8601 duration a sold voucher is valid for after purchase. e.g. P1Y = 1 year.

  • offered_onlinebooleanoptional

    Whether the voucher type is sellable via the public shopfront.

  • privatebooleanoptional

    When true, the voucher type is reachable only via direct link.

  • visibilitystringoptional

    The visibility status of the product.

    Possible values:publiclink_onlyprivate
  • members_onlybooleanoptional

    When true, only customers with an active membership can purchase.

  • permitted_membership_type_idsstring[]optionalnullable

    Membership-type UUIDs whose active members are allowed to purchase. Only relevant when members_only=true.

  • category_idsstring[]optional

    Voucher-category IDs this voucher type belongs to. Sending [] clears the existing categories.

  • currencyoptional

    ISO-4217 currency code in lowercase. Must be supported by the site.

Responses

  • 200

    A single VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

delete/shop/voucher-types/{voucherTypeId}

Delete a voucher type

deleteVoucherType

Soft-deletes the voucher type. Existing vouchers already sold under this type remain valid and redeemable; the type itself is removed from new-sale flows. Use POST .../restore to bring it back.

Requires the SETTINGS_MANAGE permission on the voucher type's site. No request body.

Path parameters

Responses

  • 204

    Voucher type deleted successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

get/shop/voucher-types/{voucherTypeId}/availability-rules

List availability rules for a voucher type

listVoucherTypeAvailabilityRules

Returns all AvailabilityRules configured on a VoucherType. Availability rules carve up the calendar into windows when vouchers of this type can or cannot be redeemed — useful for blocking peak holiday dates, restricting redemptions to specific seasons, or only allowing redemption from a future opening date.

Rule semantics: any is_available: false rule overrides any is_available: true rule for the same period.

Path parameters

Responses

  • 200

    A list of AvailabilityRules configured on the VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

post/shop/voucher-types/{voucherTypeId}/availability-rules

Create an availability rule for a voucher type

createVoucherTypeAvailabilityRule

Adds a new AvailabilityRule to a VoucherType. Use is_available: true to open redemption windows, or is_available: false to block redemptions during the supplied date range. Omit the dates to apply the rule from today onwards with no end date.

Requires the update ability on the voucher type.

Path parameters

Request body

  • is_availablebooleanrequired

    true opens redemption windows; false closes them. false rules override true rules for the same period.

  • date_fromdateoptionalnullable

    First date the rule applies (inclusive), in the voucher type's timezone. Defaults to today when omitted.

  • date_todateoptionalnullable

    Last date the rule applies (inclusive). Must be on or after date_from. Omit for an open-ended rule.

Responses

  • 201

    A single AvailabilityRule belonging to the VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/voucher-types/{voucherTypeId}/availability-rules/{availabilityRuleId}

Retrieve a voucher type availability rule

getVoucherTypeAvailabilityRule

Returns a single AvailabilityRule belonging to the given VoucherType.

Path parameters

Responses

  • 200

    A single AvailabilityRule belonging to the VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

put/shop/voucher-types/{voucherTypeId}/availability-rules/{availabilityRuleId}

Update a voucher type availability rule

updateVoucherTypeAvailabilityRule

Replaces an AvailabilityRule on a VoucherType. The server validates the same shape as on create, so is_available is required and any supplied dates must keep date_to on or after date_from. Requires the update ability on the voucher type.

Path parameters

Request body

  • is_availablebooleanrequired

    Whether the window is bookable for voucher redemption. false overrides true.

  • date_fromdateoptionalnullable

    First date the rule applies (inclusive).

  • date_todateoptionalnullable

    Last date the rule applies (inclusive). Must be on or after date_from.

Responses

  • 200

    A single AvailabilityRule belonging to the VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

delete/shop/voucher-types/{voucherTypeId}/availability-rules/{availabilityRuleId}

Delete a voucher type availability rule

deleteVoucherTypeAvailabilityRule

Removes an AvailabilityRule from a VoucherType. Redemption windows are recomputed from the remaining rules. Vouchers already issued are not affected.

Path parameters

Responses

  • 204

    Availability rule deleted successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

post/shop/voucher-types/{voucherTypeId}/copy

Duplicate a voucher type

copyVoucherType

Creates a copy of an existing VoucherType with the supplied fields overlaid on top. Useful when seeding a near-identical offering off an existing one. The new voucher type is created under the same site and organisation as the original; you can override any write-able field by sending it in the body. Fields omitted from the body are inherited from the source verbatim.

name is required so the new copy is distinguishable from the source. The amount_type-based field rules apply just as on create — see the request body for details.

Requires the SETTINGS_MANAGE permission on the original voucher type's site.

Path parameters

Request body

  • namestringrequired

    Display name for the new copy. Required so the copy is distinguishable from the source.

  • descriptionstringoptionalnullable

    Override the long-form description on the copy. Defaults to the source's description when omitted.

  • product_codestringoptionalnullable

    Override the POS/PMS product code. Defaults to the source's value.

  • external_idstringoptionalnullable

    Override the external identifier on the copy. Defaults to the source's value; consider setting this explicitly so integrations don't see two offerings with the same external id.

  • image_idstringoptionalnullable

    ID of an uploaded Media to use as the cover image. Defaults to the source's image.

  • recipient_messagestringoptionalnullable

    Override the gift-voucher recipient message. HTML is stripped to the site's allowed-tag list.

  • amount_typestringoptional

    Override the voucher amount type on the copy. Switching this between cash and discount_to_zero clears the fields that don't apply to the new type.

    Possible values:cashdiscount_to_zero
  • amountintegeroptional

    Override the cash value (smallest currency unit) on the copy. Only relevant when amount_type=cash.

  • customisable_amountbooleanoptional

    Override whether the value can be customised at sale time. Only relevant when amount_type=cash.

  • partially_redeemablebooleanoptional

    Override whether the copy can be partially redeemed. Only relevant when amount_type=cash.

  • valid_weekdaysstring[]optionalnullable

    Override the lowercase weekday allowlist. Only relevant when amount_type=discount_to_zero.

  • invalid_date_set_idsstring[]optionalnullable

    Override the denylist of date-set IDs the copy is invalid on. Only relevant when amount_type=discount_to_zero.

  • valid_offeringsobject[]optionalnullable

    Override the allowlist of offerings the copy may be redeemed against. Only relevant when amount_type=discount_to_zero.

  • invalid_offeringsobject[]optionalnullable

    Override the denylist of offerings the copy may not be redeemed against. Only relevant when amount_type=discount_to_zero.

  • default_validity_intervalstringoptionalnullable

    ISO 8601 duration a sold voucher of this copy is valid for. Override the source's default. e.g. P1Y = 1 year.

  • offered_onlinebooleanoptional

    Whether the copy is sellable via the public shopfront.

  • privatebooleanoptional

    When true, the copy is reachable only via direct link.

  • visibilitystringoptional

    The visibility status of the product.

    Possible values:publiclink_onlyprivate
  • members_onlybooleanoptional

    When true, only members can purchase the copy.

  • permitted_membership_type_idsstring[]optionalnullable

    Membership-type UUIDs whose active members can purchase the copy. Only relevant when members_only=true.

  • category_idsstring[]optional

    Override the voucher-category memberships on the copy. Each ID must reference a category on the voucher type's site.

  • currencyoptional

    ISO-4217 currency code in lowercase. Must be supported by the site.

Responses

  • 201

    A single VoucherType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

post/shop/voucher-types/{voucherTypeId}/restore

Restore a deleted voucher type

restoreVoucherType

Un-deletes a previously soft-deleted VoucherType. The voucher type returns to its pre-deletion state, including price, validity rules, valid/invalid offerings, and delivery options. Existing vouchers already sold under this type remain unaffected.

Requires the SETTINGS_MANAGE permission on the voucher type's site. No request body.

Path parameters

Responses

  • 200

    The voucher type was restored successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

get/shop/voucher-types/order

List voucher types in display order

listVoucherTypesOrder

Returns a lightweight, non-paginated list of VoucherTypeSummary objects for the given site, sorted by each voucher type's order field. Use this to render a drag-and-drop ordering UI without pulling the full VoucherType payload for every entry.

Requires the RESERVATIONS_VIEW permission on the site.

Query parameters

  • site_idstringrequired

    Filter results by the site they belong to

Responses

  • 200

    The voucher types for the site, sorted by order.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

put/shop/voucher-types/order

Reorder voucher types for a site

updateVoucherTypesOrder

Reorders the voucher types at a site in one request. The order of voucher_type_ids in the body determines each voucher type's order field (first ID → order: 0, second → order: 1, etc.). IDs not listed are unaffected and keep their existing order.

Returns no body on success — call GET /shop/voucher-types/order afterwards to fetch the reordered list.

Requires the SETTINGS_MANAGE permission on the site.

Request body

  • site_iduuidrequired

    ID of the site whose voucher types are being reordered. All voucher_type_ids must belong to this site.

  • voucher_type_idsstring[]required

    Voucher type IDs in the desired display order. The index of each ID in the array becomes that voucher type's order field.

Responses

  • 204

    The voucher types were reordered. No content is returned.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 422

    The request didn't pass validation