Skip to main content
PUT
/
api
/
billing
/
products
Update Product
curl --request PUT \
  --url https://spaces.nexudus.com/api/billing/products \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "Id": 123,
  "BusinessId": 123,
  "Name": "<string>",
  "SystemProductType": 123,
  "Description": "<string>",
  "DisplayOrder": 123,
  "Price": 123,
  "CurrencyId": 123,
  "AvailableAs": 123
}
'
{
  "Status": 123,
  "Message": "<string>",
  "Value": "<any>",
  "WasSuccessful": true,
  "Errors": [
    {
      "AttemptedValue": "<any>",
      "Message": "<string>",
      "PropertyName": "<string>"
    }
  ]
}

Documentation Index

Fetch the complete documentation index at: https://learn.nexudus.com/llms.txt

Use this file to discover all available pages before exploring further.

Updates an existing Product record. You must include the Id of the record to update along with all required fields.

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-Edit role.

Enums

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

Request Body

Required Fields

Id
integer
required
The Id of the Product record to update.
BusinessId
integer
required
ID of the business linked to this record.
Name
string
required
Product name.
SystemProductType
integer
required
Category of the product: DayPass, CreditBundle, Stationery, BookingFeature, BookingProducts, or Other.
Description
string
required
Product description.
DisplayOrder
integer
required
Display order.
Price
number
required
Product price.
CurrencyId
integer
required
ID of the currency linked to this record.
AvailableAs
integer
required
Controls whether the product can be sold as a one-off purchase, a recurring charge, or both (RecurrentOrOneOff, OnlyRecurrent, OnlyOneOff).

Optional Fields

InvoiceLineDisplayAs
string
Custom text shown on the invoice line instead of the product name.
Sku
string
SKU code.
Tags
string
Comma-separated tags for categorising and filtering.
Visible
boolean
Whether the product is visible to customers on the members portal and mobile app.
VisibleInKiosk
boolean
Whether the product is visible to customers in the NexKiosk app.
AvailableToAi
boolean
Whether this product is available to any AI channels (Email, Chat or WhatsApp) for recommendations for day passes;.
NotesForAi
string
Additional notes about the product that are included in AI channel recommendations and responses to provide more context to customers.
ShowPriceForAi
boolean
Whether to show the price of this product in AI channel recommendations and responses based on users’ budget preferences.
PriceForAi
number
Override price to show in AI channel recommendations and responses based on users’ budget preferences (if not set, the regular Price value is used).
SyncToSquare
boolean
Sync to Square Point of Sale.
TaxRateId
integer
ID of the tax rate linked to this record.
ReducedTaxRateId
integer
ID of the reduced tax rate linked to this record.
ExemptTaxRateId
integer
ID of the exempt tax rate linked to this record.
FinancialAccountId
integer
ID of the financial account linked to this record.
OnlyForContacts
boolean
Restrict purchase to contacts (customers without an active contract).
OnlyForMembers
boolean
Restrict purchase to customers with an active contract (members).
Tariffs
integer[]
List of tariffs linked to this record.
AddedTariffs
integer[]
The added tariffs value for this product.
RemovedTariffs
integer[]
The removed tariffs value for this product.
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
URL of a new file to upload as the image.
ClearImageFile
boolean
Set to true to remove the current 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 PUT \
  "https://spaces.nexudus.com/api/billing/products" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "BusinessId": 0,
    "Name": "",
    "SystemProductType": 0,
    "Description": "",
    "DisplayOrder": 0,
    "Price": 0,
    "CurrencyId": 0,
    "AvailableAs": 0,
    "Id": 87654321
}'

Response

200

Status
integer
HTTP status code. 200 on success.
Message
string
A human-readable message confirming the update.
Value
object
Contains the Id of the updated record.
WasSuccessful
boolean
true if the product was updated successfully.
Errors
array
null on success.
Example Response
{
  "Status": 200,
  "Message": "Product was successfully updated.",
  "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
}