Skip to main content
POST
/
api
/
billing
/
productextraservices
{
  "Status": 123,
  "Message": "<string>",
  "Value": "<any>",
  "WasSuccessful": true,
  "Errors": [
    {
      "AttemptedValue": "<any>",
      "Message": "<string>",
      "PropertyName": "<string>"
    }
  ]
}
A ProductExtraService links an ExtraService to a Product. The meaning of UsesIncluded depends on the type of the linked extra service:
  • Booking time (ExtraService with IsPrintingCredit = false) — customers receive an allowance of booking time for the resource type(s) associated with that extra service. For example, a product called “Hot Desk Bundle” might include 2 hours of meeting room usage — achieved by linking a “Meeting Room Hourly” extra service with “UsesIncluded 120.
  • Printing credit (ExtraService with IsPrintingCredit = true) — customers receive a number of print jobs/pages. UsesIncluded is the number of printing credits included. The linked extra service must have ChargePeriod = 5 (Uses) and Price = 1.
Always check IsPrintingCredit on the linked extra service before interpreting UsesIncluded. For booking-time extra services, the unit of UsesIncluded is determined by the ChargePeriod of the linked ExtraService:
ExtraService ChargePeriodUsesIncluded unit
1 (Minutes)Minutes
2 (Days)Days
3 (Weeks)Weeks
4 (Months)Months
5 (Uses)Individual uses
6 (FourWeekMonths)4-week periods
So “UsesIncluded 60 on a minutes extra service means 60 minutes of booking time included. On a daily extra service it means 60 full days.

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 ProductExtraService-Create role.

Request Body

Required Fields

ProductId
integer
required
Product Id.
ExtraServiceId
integer
required
Extra Service Id.
UsesIncluded
integer
required
Uses included.

Optional Fields

ExpireTimeInMonths
integer
Expire Time In Months.
ExpireTimeInWeeks
integer
Expire Time In Weeks.
ExpirationType
integer
Expiration type. See eRecurrentChargePattern? enum above.
ExpiresIn
integer
Expires in.

Code Examples

curl -X POST \
  "https://spaces.nexudus.com/api/billing/productextraservices" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "ProductId": 0,
    "ExtraServiceId": 0,
    "UsesIncluded": 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 productextraservice was created successfully.
Errors
array
null on success.
Example Response
{
  "Status": 200,
  "Message": "ProductExtraService 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
}