API v4 Release Notes — September 11, 2026
New
-
Customer communications: create, update, delete —
customer_communicationsnow supportsGET(list and by id),POST,PATCH /{id}, andDELETE /{id}. A create links both acustomerand acustomer_noteand needsdirection(ioro).typedefaults tophone, anduser_idis set to the acting user. You get a422if the note belongs to a different customer or already has an active communication. To recategorize a contact,PATCHthe existing record. -
At-risk cases: create, update, delete —
customer_at_risksnow supportsGET(list and by id),POST,PATCH /{id}, andDELETE /{id}. A create needs thecustomerrelationship and acustomer_at_risk_reason_id. Resolving and closing work by settingis_resolved/is_closed: the server fills inresolved_at/resolved_byandclosed_at/closed_by, which are read-only. A case withis_resolvedset must include acustomer_at_risk_resolution_id. List filters includeis_closed,is_resolved,assigned_user_id,is_assigned, andfollow_up_dateranges. -
At-risk notes:
POST /v4/customer_at_risk_notes— Add a follow-up note to an at-risk case. Notes can't be edited or deleted after they're created.communicationandnoteare required. You need Modify on the At Risk permission to create one. Notes are listable, and also come back withGET /v4/customer_at_risks/{id}?include=notes. -
Lead interactions:
POST /v4/lead_contacts— Log a rep interaction on a lead. Interactions can't be edited or deleted after they're created.noteis required, and the parent must be a lead (type: leads); a customer returns422. If you omituser_id,current_lead_type_id, andcurrent_rep_id, they're filled from the acting user and the lead's current state. Creating requires lead-modify access. -
GET /v4/object_files— Lists customer and lead file metadata. Filters:customer_id(orobject_id),service_type, andcreated_at/updated_atranges. Sorts onid,object_id,name,created_at, andupdated_at. File bytes are still downloaded through v1. -
24 more documented, listable resources — Each now has
GET /v4/{resource}with filters, sorting, and?count_only=true, plus a reference page. All are read-only.- Customers & leads:
message_logs,customer_to_email,consumer_financing_applications,consumer_financing_applicants,customer_equipment_reconcile,customer_billing_to_uses - Scheduling:
calendar_event_reschedules(reschedule history: old/new start, reason,initiated_by),calendar_events_extended(on-site en-route, arrival and departure status) - Billing:
customer_accounting_information,invoice_emails,invoice_statements,payment_to_invoice(which payment paid which invoice, andamount_used),accounting_journal_entries,accounting_journal_entry_lines,mmr_to_mmr_items - Workflows & e-documents:
flows,flow_steps,flow_enrollments,flow_enrollment_steps,electronic_document_envelopes,electronic_document_assignments,electronic_document_assignment_recipients,electronic_document_assignment_events,electronic_document_field_value
customer_billing_to_uses,calendar_events_extended, andpayment_to_invoicehave composite keys, so they are list-only with no/{id}route. - Customers & leads:
Changed
-
⚠ Breaking: an unrecognized filter value now returns
422. These filters used to ignore a value they didn't recognize and return the list unfiltered:users?active=,locations?active=groups?assignable=user_rep_numbers?domain=customer_payments?cleared=customer_contacts?about=calendar_categoryoncalendar_events,calendar_event_types, andcalendar_event_detail_types
They now return
422with reasonunsupported_valueand list the accepted values. Likewise, sending an array forpage,per_page,sort, orinclude(for example?page[]=2) returns422instead of being read as the default. -
GET /v4/customerscan list leads. Add?record_type=leadto list leads;record_type=customeris still the default. What you see matches the Leads page in SecurityTrax. New filters, which work for both customers and leads:lead_rep_id,lead_type_id,lead_disposition_id,lead_company_id(source),lead_company_campaign_id, andlead_callback_date_from/_to. New sorts:lead_createdandlead_callback_date. Sending a customer-only filter (location_id,sale_date_from/_to,cancelled) withrecord_type=leadreturns422. -
GET /v4/customersaccepts?rep_id=— Exact sales-rep match within your permitted results. A rep with no customers you can see returns an empty page, not403. -
New includes.
customers?include=filesworks on a single record and on the list.customer_invoices?include=invoice_line_itemsreturns the invoice with its active lines, on a single record or the list.users/{id}?include=udfsreturns a user's custom-field values.
On list requests, each row's include is capped at 100 records. When any row hits the cap, the response adds
meta.includes_truncatedandmeta.include_item_limit. -
customer_idfilter alias —customer_invoices,invoice_recurring,object_tags,object_udfs, andobject_filesacceptcustomer_idin place ofentity_id/object_id. Sending both with different values returns422. -
object_udfscovers user custom fields. Pass?object_type=user, withuser_idas an alias forobject_id, to list user values.POST /v4/object_udfs/setand/clearaccept user fields. Reading user values requires the company-wide Users view permission, and setting or clearing them requires Users modify. Customer values work as before. -
customer_notesreturnsfollow_up_dateon tickets. The ticket due date could already be written but wasn't returned in responses. It is now readable too. -
Access tokens carry a scope. When you create a token, you choose what it works with. A token without API access now gets
401 unauthenticatedon/user/v4/*. Existing tokens are scoped to API access, so current integrations keep working without changes.
Fixed
GET /v4/calendar_eventsleft out appointments you could read by id. Users who can assign sales appointments to themselves, and users with lead scheduling access, now see the same appointments in the list that they can open individually.GET /v4/customer_notestotals and pages didn't match the rows returned. Work orders you could see only through the Work Orders permission were missing from the list. Meanwhile,count_onlyandmeta.pagination.totalcould count notes you couldn't view, so pages came back shorter thanper_page. The list and its totals now apply the notes, work-order, and lead-notes permissions separately.
Never miss an API change
Get an email when new API release notes are published, or follow the RSS feed.