A CannedResponse is a reusable message template, known as a Message Macro in the Nexudus UI (Admin Panel > CRM > Message Macros).
Message macros can be sent directly to customers or used alongside reminders to automate communication. They support dynamic tokens — placeholders such as \{salutation\} — that Nexudus automatically replaces with live data from your account when the message is delivered.
Message macros are available across all locations in a network, regardless of which location created them.
Supported tokens
Location tokens (always available):
Token Description \{businessname\} / \{locationName\}Location name \{businessphone\}Location phone \{businesscontactphone\}Location phone or contact phone \{businesscontactweb\}Location web contact \{businessaddress\}Location address \{businessemail\}Location email contact \{businessid\}Location ID \{businessurl\}Location public URL \{businessavatar\}Location logo URL \{businessbanner\}Location banner URL \{logoImage\}Location logo as an HTML <img> tag \{timezone\}Location timezone \{date\}Current date in location timezone \{time\}Current time in location timezone \{yesterday\}Yesterday’s date \{tomorrow\}Tomorrow’s date \{terms\}Terms & conditions (rendered from Markdown) \{iosurl\}iOS app URL \{androidurl\}Android app URL \{serviceurl\}Dashboard URL \{unsubscribeurl\}Unsubscribe URL (custom fields) Any Business custom fields
Customer tokens (always available):
Token Description \{firstname\}Customer first name \{fullname\}Customer full name \{salutation\}Customer salutation \{email\} / \{username\}Customer email \{coworkerid\}Customer ID \{coworkerguid\}Customer GUID \{homebusiness\}Customer’s home location name \{companyname\} / \{companyName\}Company name \{phone\}Mobile phone or landline \{address\}Address \{postcode\}Post code \{cityname\}City \{state\}State \{billingname\} / \{billingName\}Billing name \{billingadress\}Billing address \{billingcityname\}Billing city \{billingpostcode\}Billing post code \{billingstate\}Billing state \{accesscardid\} / \{accessCardId\}Access card ID / pincode \{accesscardtag\}Access card tag \{accesspincode\}Access PIN code \{cardNumber\}Card number \{keyFobNumber\}Key fob number \{tariffname\}Current pricing plan name \{tariffprice\}Current pricing plan price \{nexttariffname\}Next pricing plan name \{nexttariffprice\}Next pricing plan price \{contractnotes\}Contract notes \{cancellationdate\}Contract cancellation date \{nextinvoicedate\}Next invoice date \{invoicedperiod\}Invoiced period date \{contracterm\}Contract term end date \{desks\}Assigned desks (comma-separated) \{generalterms\}General terms & conditions \{contracterms\}Contract terms & conditions \{teamNames\}Team names (comma-separated) \{custom1\} – \{custom30\}Legacy custom fields 1–30 \{coworkerurl\}Admin URL for the customer \{coworkerpublicurl\}Public profile URL \{coworkerprofileurl\}Customer profile admin URL \{coworkercontractsurl\}Customer contracts admin URL \{coworkermessagesurl\}Customer messages admin URL \{coworkerproductssurl\}Customer products admin URL \{coworkerproposalsurl\}Customer proposals admin URL \{gocardlesssignupurl\}Direct debit signup URL \{teamsignuplink\}Team signup link (custom fields) Any Coworker custom fields
User / account tokens (always available when the customer has a portal access / user account):
Token Description \{userid\}User ID \{passportnumber\}Passport number \{password\}Temporary password (only during password reset) \{useraccesstoken\}User access token \{activateurl\}Account activation URL \{loginurl\}Login URL \{magiclink\}Magic link for passwordless login \{resetpasswordurl\}Reset password URL \{unpaidinvoicescount\}Number of unpaid invoices \{unpaidinvoicenumbers\}Unpaid invoice numbers (comma-separated) \{unpaidinvoicestotal\}Unpaid invoices total amount \{dueinvoicescount\}Number of overdue invoices \{dueinvoicenumbers\}Overdue invoice numbers (comma-separated) \{dueinvoicestotal\}Overdue invoices total amount \{earliestduedate\}Earliest due date across unpaid invoices
Message-macro-specific tokens :
Token Description \{nextbillingdate\}Next tariff billing date \{priceplan\}Active pricing plan names (comma-separated, all contracts) \{nextpriceplan\}Next pricing plan names (comma-separated) \{priceplanprice\}Total cost of active pricing plans (formatted in location currency) \{nextpriceplanprice\}Total cost of next pricing plans \{maincontractpriceplan\}Main contract pricing plan name \{maincontractprice\}Main contract price \{maincontractbillingdate\}Main contract renewal / billing date \{maincontractstartdate\}Main contract start date \{deliverytable\}HTML table of uncollected deliveries (location, name, date, notes)
Delivery tokens (resolved from the customer’s oldest uncollected delivery, if any):
Token Description \{deliveryreference\} / \{deliveryname\}Delivery name \{deliverycreatedon\}Delivery creation date (full format) \{deliverylocation\}Delivery location \{deliverynotes\}Delivery notes \{deliveryfileurl\}Delivery label image URL \{deliveryqrcode\}Delivery QR code URL \{deliverycode128\}Delivery barcode (Code 128) URL
Product tokens (available when the macro is sent alongside a product purchase — CoworkerProduct or BookingProduct):
Token Description \{productname\}Product name \{productid\}Product ID \{productstocklevel\}Current stock level \{productstockalertlevel\}Stock alert level \{product\}”Qty x Product Name” \{price\}Product price (formatted in location currency) \{notes\}Purchase notes (custom fields) Any Product custom fields
Booking tokens (available when the product purchase is linked to a booking):
Token Description \{bookingId\}Booking ID \{bookingNumber\}Booking number (zero-padded) \{bookingUniqueId\}Booking GUID \{bookingDurationInMinutes\}Booking duration in minutes \{resourceId\}Resource ID \{resourceName\}Resource name \{resourceDescription\}Resource description \{resourcetype\}Resource type name \{fromTime\}Booking start date/time \{toTime\}Booking end date/time \{desk\}Desk name (or location name if none) \{desknotes\}Desk notes \{confirmationContent\}Resource email confirmation content \{bookingTerminateUrl\}Booking cancellation URL \{accesstoken\}Booking access code \{price\}Estimated booking cost (overrides product price) \{pricewithcredits\}Estimated cost after credits \{additionals\}Booking add-on products \{additionals_with_description\}Add-on products with descriptions \{products\}Product list (HTML formatted) \{notes\}Booking notes (custom fields) Any Booking custom 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 CannedResponse-Create role.
Request Body
Required Fields
Name of the message macro.
Optional Fields
Subject line shown in the customer’s inbox when the message macro is delivered.
Body of the message macro; supports dynamic tokens (e.g. {salutations}) that Nexudus replaces with live data when the message is sent.
Code Examples
curl -X POST \
"https://spaces.nexudus.com/api/crm/cannedresponses" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"BusinessId": 0,
"Name": ""
}'
Response
200
HTTP status code. 200 on success.
A human-readable message confirming the creation.
Contains the Id of the newly created record.
true if the cannedresponse was created successfully.
{
"Status" : 200 ,
"Message" : "CannedResponse 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
A summary of the validation error(s), in the format PropertyName: error message.
null on validation failure.
Array of validation errors. The value that was submitted for the field, or null if missing.
The validation error message.
The name of the property that failed validation.
false when the request fails validation.
{
"Message" : "Name: is a required field" ,
"Value" : null ,
"Errors" : [
{
"AttemptedValue" : null ,
"Message" : "is a required field" ,
"PropertyName" : "Name"
}
],
"WasSuccessful" : false
}