Improved

October 2026 Updates

šŸ†• New Features (24)

  • Photo Reports in Documents: Create Document accepts attachment_uids to build a photo report gallery, and layout_uid is now optional. Photo report PDFs match the web gallery, with an optional name and time.
  • Supplier Delivery Type: Purchase orders shipped to a job address accept supplier_delivery_type (ROOF_LOAD or GROUND_DROP, default GROUND_DROP), which is passed to the supplier order.
  • Appointments Assignee Filter: Get Appointments accepts filter.assigned_to with one or more user UIDs and returns only appointments assigned to those users.
  • Image Thumbnails in Job Checklists: Job details and inspection form submissions accept include_thumbnail and thumbnail_resolution, which add file_proxy_url to image and file answers.
  • Field Selection for More Modules: Projects, Service Contracts, material requests and product details accept fields_to_select, so you get only the fields you request.
  • Send Mail for Organizations, Customers and Users: The send mail API now sends email for organization, customer and user records, through the connected mailbox chosen with email_config_uid.
  • Bulk PDF Library Uploads: The PDF library API accepts a libraries array to create up to 50 files and folders at once, optionally inside a parent folder.
  • Slope and Storey Pricing in Booking Widget: Booking widget quotes can add charges for roof slope and number of storeys, and questions can be hidden from customers.
  • QXO Proof of Delivery: Delivery photos and PDFs from QXO are now attached automatically to delivered purchase orders as proof of delivery.
  • Appointment Type Reordering: Admins and team leaders can reorder appointment types. Appointment type lists now return in display order.
  • Organization SLA: Organizations now support has_sla and sla_duration (days, hours, minutes) on create, update, import and details, the same as customers.
  • Purchase and Work Order Bulk Field Update: The bulk action endpoints add an update_field action to set due date, payment term, template, custom fields and more on many orders at once.
  • Assisted Scheduling Slot Interval: An optional slot_interval (5–240 minutes) sets the gap between slot start times, so 2-hour jobs can start on the hour.
  • CPQ Vendor Choice: Job status updates that trigger CPQ accept vendor_uid, so you choose the vendor or supplier branch that prices the generated proposal.
  • Silent Mention Messages in Chat: Chat channels can post a silent message, without a push notification, when users are added through mentions.
  • Custom Financing Promo Prefix: Financing providers can set a promo_message_prefix that replaces "As low as" on proposal pages, the customer portal and estimate details.
  • Payment Failure Stats by Reason: A new analytics endpoint groups failed Zuper Pay transactions by failure reason for a date range, with count and amount per reason.
  • Customer Viewed Estimates: Estimates carry a read-only customer_viewed flag you can filter on. Estimate stats add counts and amounts for viewed-but-unsigned estimates.
  • Job Status by Internal Name: Job statuses now have a stable internal_key, and status updates accept status_internal_name instead of the status UID.
  • Public Gallery Bulk Download: Customers on shared albums and public job or project galleries can download selected photos, whole days or the full gallery as a ZIP.
  • First Mate Measurement Upload: Measurement uploads now accept First Mate XML exports, mapped to the same roof tokens as other measurement providers.
  • Email Threads for Work Orders and Vendors: Email threads can link to work orders, purchase orders, material requests, vendors and subcontractors. Inbound vendor emails link automatically.
  • Channel Members for Mentions: A new endpoint returns every member of a chat channel in one call, so mention pickers work in channels with over 100 members.
  • Bank Verification Reminders: Customers paying by bank account get an email reminder to verify it with microdeposits, with the payment details, instructions and expiry date.

⭐ Improvements (31)

  • Organization Unique Field: Companies can make organizations unique by name or email. Names and emails are trimmed, and name checks ignore case.
  • User Update Webhook: The user.update webhook now fires on every successful user update, not only name changes, and includes an updated_fields list.
  • Job Webhook Payloads: Job webhook payloads now include status_name_normalized, and status and feedback events include job_category_details.
  • Hover ESX Is Opt-In: Hover measurements fetch the ESX file only when the request sets additional_files.ESX: true. It is off by default.
  • Receive Items Over-Receipt Protection: Received quantities can no longer exceed the ordered quantity. Lines that would over-receive are skipped and returned in rejected_line_items.
  • Avalara Tax Code Search: Keyword search for Avalara tax codes now matches the tax code itself, as well as its description.
  • Sold By on Proposals: Proposal templates get sold-by merge tags (name, email, phone and more). CPQ proposals set Sold By to the user who triggered them.
  • Job Timezone in Scheduling Checklist: Scheduling a job from a checklist can set or clear the job timezone. Schedule and activity dates use the selected timezone.
  • Activity Improvements: Activity lists include each user's role. Address edits log per-field detail, and changes made through the Zuper MCP server show MCP as their source.
  • 3D Secure Cards in Charges: Card charges, bulk charges and invoice auto-charge now detect cards that need 3D Secure. Failure emails show clearer invoice, amount and reason details.
  • QXO Call for Availability: QXO catalog items not stocked at the selected branch now show "Call for availability" instead of out of stock.
  • Job Stats by Assignee: The job stats analytics endpoint accepts filter.user_uid, one or many, so every count covers only those assignees.
  • More Sort Options in Get Jobs: sort_by now accepts job_title, created_at and updated_at.
  • Customer Tags on Contacts: Job, quote, invoice, contract, asset, project and request details now include customer_tags for primary and secondary contacts.
  • Multiple Users from Checklist Lookups: Copying a checklist or inspection form User lookup to a custom field now copies every selected user, not only the first.
  • Supplier Import Uses Smallest Unit: Supplier product import and bulk mapping now default to the smallest available unit of measure when nothing else sets the unit.
  • Payment Request Push Notifications: The creator of a payment request gets a push notification when it is paid, with amount, customer, invoice number and job.
  • Payment Totals and Delete Protection: Payment totals count only successful, unrefunded amounts. Invoices and quotes can't be deleted while a payment is processing.
  • Attachment Uploader and History: The attachments API now returns created_at and created_by, and include_attachment_history=true adds has_attachment_history to each attachment.
  • EagleView EV1 Report Files: EagleView measurements now deliver PDFs for Roof 3D EV1, Roof 2D, Full House EV1 and BidPerfect EV1 reports.
  • QuickBooks IDs Kept on Update: Quote and invoice updates keep QuickBooks ID custom fields the request leaves out. Send an empty value to clear one.
  • Invoiced Purchase Orders to Vendor Approval: Purchase order status can now move from INVOICED to VENDOR_APPROVED or VENDOR_REJECTED.
  • Email Threads Follow the Job Customer: When a job's customer changes, its email threads move to the new customer.
  • Silent Work Hours Update: Changing a user's work hours still syncs the mobile app but no longer adds an entry to the technician's notification list.
  • Job Document Signatures and Company Tags: Signatures can print without a date, a linked signature date is stamped at signing, and company name, email, phone and address merge tags are available.
  • Proposal Add-on Cards: Add-on cards on the customer proposal page show the price including tax and put the upgrade image beside the title.
  • Duplicate Customer Message: Creating or updating a customer that breaks the unique rule now returns 409 naming the field, for example "Email should be unique".
  • Default Roofing CPQ Formulas: 21 new default CPQ formulas cover roof materials, accessories, installation labor and steep-pitch fees.
  • Timesheet Reports in Your Timezone: Timesheet reports now show dates and shift times in the user's preferred timezone and date format, else the company's.
  • Payment Reports: The payment transaction report adds Reason Code and Reason columns. Payout reconciliation reports add a totals row and can be scheduled quarterly.
  • Customer Name in Job Notes Report: The Job Notes report adds a Customer Name column after Job Tags.

šŸž Bug Fixes (38)

  • Get Jobs Filter Validation: Invalid UIDs and invalid is_invoiced, scheduled or assigned values now return 400 instead of unfiltered results. Repeated filter parameters work.
  • Customer SMS From Number: Send Customer SMS now sends from the sms.from number when provided, else the company's notification number.
  • Payment Requests Need a Payment Mode: Payment requests, payment links and surcharge payments are now refused when invoice or estimate payment collection isn't configured.
  • Payment Requests for the Exact Balance: Payment requests for exactly the remaining balance are no longer rejected by rounding. Amounts are compared at the company's decimal precision.
  • Zuper Pay Transaction Status: Declined or errored transactions are now marked failed with their reason. Transactions are marked abandoned only when cancellation succeeds.
  • Field Executive Material and Work Orders: Field executives with job access can now edit material orders and update material or work order status.
  • Purchase Order Meta Filter: The created_by filter in purchase and work order meta filters now points to the correct user lookup.
  • Number Search: Global search finds jobs, projects and purchase orders by their bare number again.
  • International SOS and 2FA SMS: SOS alerts and two-factor codes now reach international phone numbers.
  • CPQ Target Margin: Items excluded from profitability no longer affect CPQ target margin calculations.
  • Vendor Re-costing: Re-costing packages for a vendor keeps the saved cost of line items that have no vendor catalog cost.
  • SRS Product Import: Products imported from SRS keep each variant's branch availability, description and order unit, so catalog rows show straight away.
  • Hidden Proposal Options: Create Proposal now saves is_hidden on options, and hidden options no longer appear in PDFs or the public proposal page.
  • Orders Linked to the Quote's Job: Material and work orders created from a quote are now linked to that quote's job.
  • Custom Deposits Kept: A custom deposit on a quote or proposal option no longer resets when customers add add-ons, choose financing or re-accept.
  • Assignment Conflict Checks: Back-to-back jobs are no longer flagged as conflicts, and overlapping appointments are caught when appointment scheduling is on.
  • Dispatch Board User Filter: The "does not contain" operator on the assigned user filter now returns the right users.
  • Invoices Paid with Surcharged Deposits: Invoices fully paid by a surcharged card deposit are now marked Paid instead of Partially Paid.
  • Invoiced Material Order Status: Editing only prices or attachments of an invoiced material order no longer changes its status.
  • Supplier Provider Update: Updating a supplier provider no longer wipes stored QXO connection keys and branch data.
  • Inactive Users in Appointment Assignment: Assigning an inactive or deleted user now returns a clear 400 error.
  • Order Template Preview: Template preview now supports work orders and purchase orders, filling vendor, title and ship-to placeholders as the sent email does.
  • Proposal Description Merge Tag: The proposal description merge tag keeps its formatting instead of showing raw HTML.
  • Email Push Notification Preview: Push notifications for new emails no longer show CSS or script code in the preview.
  • Clear Trade Type on Standalone Tasks: Sending bu_uid as null or empty now clears a standalone task's trade type.
  • Dealer Markup on Zero and Negative Lines: Dealer markup is no longer added to zero-priced or negative line items in financing totals and proposal pages.
  • Proposal Page Scroll Position: Each step of the public proposal page, including Choose Package, now opens at the top on iPad and iPhone.
  • CPQ Template Trade-Type Access: CPQ template option and line item edits now enforce trade-type restrictions.
  • Search Count for Work Orders: Search count no longer fails for work orders or subcontractors requested without purchase orders or vendors.
  • Zero Decimal Round-off: A company decimal round-off of 0 now rounds to whole numbers across invoices, estimates, payments, taxes, reminders and reports.
  • Mandatory Serial Numbers: With Mandate Serial Number on, product inward, outward and transfer now require one serial number per unit.
  • No Saved-Card Charges for Deleted Customers: Manual and automatic saved-card charges are now refused when the customer is deleted or inactive.
  • Sold By and Accepted Date on Invoiced Quotes: Updating Sold By or Accepted Date on an invoiced quote now saves instead of being dropped.
  • Cleared Quote Emails: Clearing the billing or service email on a quote no longer refills it from the customer's email on save.
  • CPQ Formulas: Formulas now compare text values such as "8in" correctly, and a lookup to a deleted checklist now reports an error.
  • Document Signing: Internal signers now get signature notifications, and the Sign & Complete button stays visible on short screens.
  • Timesheets and Timesheet Reports: Editing a punch no longer saves the day as 0 hours, and the User Shift and Approval reports no longer return a server error.
  • Service Contract Reminders: Contract reminders now follow the current reminder settings and stop for deleted or inactive reminders, so customers no longer get duplicates.