Skip to main content
POST
/
api
/
billing
/
products
{
  "Status": 123,
  "Message": "<string>",
  "Value": "<any>",
  "WasSuccessful": true,
  "Errors": [
    {
      "AttemptedValue": "<any>",
      "Message": "<string>",
      "PropertyName": "<string>"
    }
  ]
}
A Product represents an item that can be sold to customers. Products can be sold via contracts (ContractProduct entity), added to bookings (BookingProduct entity), or purchased directly (CoworkerProduct entity). Products support both one-off sales and recurring charges. Recurring charges can be set to daily, weekly, monthly, or yearly frequencies, or charged every time a contract is invoiced. For invoice-linked recurring charges, prefer using ContractProduct to associate the sale directly with a specific contract rather than relying on the customer’s MainContract. Use AvailableAs to control whether a product can be sold as a one-off purchase, a recurring charge, or both. The SystemProductType field categorises the product (e.g. day pass, credit bundle, booking product, stationery, or other). Products can optionally track stock levels, be restricted to specific pricing plans (tariffs), and be limited to members or contacts only.

Authentication

This endpoint requires OAuth2 authentication. Include a valid bearer token in the Authorization header. The authenticated user must be a full unrestricted administrator or have the Product-Create role.

Enums

ValueName
0None
1DayPass
2CreditBundle
3Stationery
4BookingFeature
5BookingProducts
99Other
ValueName
0None
1RecurrentOrOneOff
2OnlyRecurrent
3OnlyOneOff

Request Body

Required Fields

BusinessId
integer
required
Business Id.
Name
string
required
Product name.
Description
string
required
Product description.
DisplayOrder
integer
required
Display order. Defaults to 0.
Price
number
required
Product price.
CurrencyId
integer
required
Currency Id.

Optional Fields

SystemProductType
integer
Category of the product: DayPass, CreditBundle, Stationery, BookingFeature, BookingProducts, or Other. See eProductType enum above.
InvoiceLineDisplayAs
string
Custom text shown on the invoice line instead of the product name.
Sku
string
SKU code.
Tags
string
Tags.
Visible
boolean
Whether the product is visible to customers on the members portal and mobile app. Defaults to true.
SyncToSquare
boolean
Sync to Square.
TaxRateId
integer
Tax Rate Id.
ReducedTaxRateId
integer
Reduced Tax Rate Id.
ExemptTaxRateId
integer
Exempt Tax Rate Id.
FinancialAccountId
integer
Financial Account Id.
AvailableAs
integer
Controls whether the product can be sold as a one-off purchase, a recurring charge, or both (RecurrentOrOneOff, OnlyRecurrent, OnlyOneOff). See eRecurrentProductOptions enum above.
OnlyForContacts
boolean
Restrict purchase to contacts (customers without an active contract).
OnlyForMembers
boolean
Restrict purchase to customers with an active contract (members).
Tariffs
integer[]
Tariffs.
Archived
boolean
Whether the product is archived. Archived products cannot be sold but existing charges remain active.
Starred
boolean
Mark the product as featured or highlighted.
TrackStock
boolean
Enable stock tracking for this product. When enabled, each sale reduces the stock count.
AllowNegativeStock
boolean
Allow sales to continue even when stock reaches zero.
StockAlertLevel
integer
Stock level at which a low-stock alert is triggered.
ApplyProRating
boolean
Whether to pro-rate the price when the product is added or removed part-way through a billing period.
NewImageUrl
string
New Image Url.
ClearImageFile
boolean
Clear Image File.
InvoiceCoworker
boolean
Whether to invoice the customer directly rather than their company or team.
SyncToNexKiosk
boolean
Sync to NexKiosk.
CreateDeliveryWhenPurchased
boolean
Automatically create a delivery record for the customer when this product is purchased.

Code Examples

curl -X POST \
  "https://spaces.nexudus.com/api/billing/products" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "BusinessId": 0,
    "Name": "",
    "Description": "",
    "DisplayOrder": 0,
    "Price": 0,
    "CurrencyId": 0
}'

Response

200

Status
integer
HTTP status code. 200 on success.
Message
string
A human-readable message confirming the creation.
Value
object
Contains the Id of the newly created record.
WasSuccessful
boolean
true if the product was created successfully.
Errors
array
null on success.
Example Response
{
  "Status": 200,
  "Message": "Product was successfully created.",
  "Value": {
    "Id": 87654321
  },
  "OpenInDialog": false,
  "OpenInWindow": false,
  "RedirectURL": null,
  "JavaScript": null,
  "UpdatedOn": "2025-01-15T10:30:00Z",
  "UpdatedBy": "admin@example.com",
  "Errors": null,
  "WasSuccessful": true
}

400

Message
string
A summary of the validation error(s), in the format PropertyName: error message.
Value
any
null on validation failure.
Errors
object[]
Array of validation errors.
WasSuccessful
boolean
false when the request fails validation.
Example Response
{
  "Message": "Name: is a required field",
  "Value": null,
  "Errors": [
    {
      "AttemptedValue": null,
      "Message": "is a required field",
      "PropertyName": "Name"
    }
  ],
  "WasSuccessful": false
}