API Changelog
Breaking changes, new features, and significant updates to epilot APIs. Subscribe via RSS
2026-08-27 Event: Customer Request Submitted
- The event now also carries the meter of a ticket and its counters โ new optional
meterandmeter_countersnodes, so consumers can resolve counter identifiers such asexternal_idfrom the event itself; both are absent for customer requests created from a journey
2026-08-26 App API
- App event search (
POST /v1/app-configurations/{appId}/events) now accepts an optionalfilters.searchterm for searching events and an optionalpagination.beforecursor for paging backwards; both are echoed back in thequeryof the response - Apps can now be configured through options: a new optional
optionslist accepted onPATCH /v1/app-configurations/{appId}/versions/{version}and returned wherever apps and app configurations are read, where every returned option reports whether it isconfigured,lifted,sensitive, and when its value was last changed (value_updated_at); components declare through a new optionaluses_optionsflag that they read those options, and acceptoptions.sensitiveonPOST/PATCH /v1/app-configurations/{appId}/versions/{version}/components - New
POST /v1/app/{appId}/options/resolveendpoint added for resolving the configured option values of an app - The
secretsfield of app functions is deprecated and will be removed in a future version
2026-08-26 Calendar API
- Calendar event responses no longer contain
_tags,busy,is_recurring,source.etag, andsource.provider_event_urlโ affectingGET /v1/calendar/events,POST /v1/calendar/events, andGET/PATCH /v1/calendar/events/{event_id}(breaking)
2026-08-26 Configuration Hub API
- New endpoints added for the health of an organization's configuration:
GET /v1/configs/healthfor reading the current health,POST /v1/configs/health:scanfor starting a new scan,POST /v1/configs/health:cleanupfor cleaning up what a scan reported, andPOST /v1/configs/health:coverage-requestfor requesting coverage of a configuration that is not checked yet
2026-08-26 Customer Portal API
- Portals can now report whether the engagement center is switched on through a new optional
engagement_center_enabledsetting โ accepted onPOST /v2/portal/portaland returned wherever the portal configuration is read (GET /v2/portal/config,GET /v2/portal/configs,GET /v2/portal/public/config, and the org and public portal config endpoints in v2 and v3)
2026-08-26 Entity API
- Widget sizing moved to new fields: entity schemas accept a new optional
ui_config.widget_widthsand capability UI hooks a new optionaldefault_width, whileui_config.grid_layoutis deprecated and will be removed in a future version โ affectingPUT /v1/entity/schemas/{slug},POST/PUT /v1/entity/schemas/capabilities/{composite_id}, and everywhere schemas and capabilities are read POST /v1/entity:graphnow accepts an optionalfilterper graph node, for narrowing which entities that node matches
2026-08-26 Integration Toolkit API
- New
GET /v1/entities/{entityId}/sync-statusendpoint added for reading how an entity is synced with the connected external system โ each reported sync state carries an optionallast_operationandlast_synced_at, plus optionalreadings_last_event_id,readings_last_operation, andreadings_last_synced_atfor meter readings - New
POST /v1/erp/updates/direct_simulationendpoint added for simulating a direct update payload - Use cases can now be configured for direct updates through a new optional
configuration.directfield, andconfiguration.entities[].fieldsis no longer required โ accepted when creating or updating a use case or an integration, returned wherever use cases are read, and also accepted byPOST /v1/erp/updates/mapping_simulationandPOST /v2/erp/updates/mapping_simulation POST /v3/erp/updates/eventsnow accepts an optionalcorrelation_idper event
2026-08-26 Journey Config API
- New optional
settings.authGatefield added to journey configurations, controlling the authentication a journey requires โ accepted when creating and updating a journey configuration in v1 and v2, and returned wherever the journey configuration is read - The values of
validationRulesmay now also be arrays where only single values were returned before, so consumers reading a journey configuration must be prepared for both shapes
2026-08-26 Notification API
POST /v1/notification/notificationsnow accepts an optionaltemplate_idfor creating a notification from a notification template, and an optionalskip_user_resolutionfor delivering to the given recipients without resolving them to users first
2026-08-26 Workflows Execution API
agent_executionandagent_execution_idon a workflow task may now benullwhere an object and a string were previously returned โ affecting all flow execution and task responses (breaking)- New optional
loop_iterationsfield added to workflow tasks, reporting how often a looping task ran; tasks and phases additionally report an optionalanalytics.skipped_atwhen they were skipped, and executions an optionalanalytics.started_by_org_id
2026-08-25 Blueprint API
- New
POST /v2/blueprint-manifest/jobs/{job_id}:retryendpoint added for retrying a blueprint job that did not finish - Job progress now reports why an individual resource failed through new optional
error_codeanderror_datafields onresource_progressโ returned byGET /v2/blueprint-manifest/jobs,GET /v2/blueprint-manifest/jobs/{job_id}, the job cancel and continue endpoints, and the bulk-install target endpoints in v3
2026-08-25 Customer Portal API
- Templates can now be passed by reference instead of inline: a new optional
templates_refrequest field is accepted byPOST /v2/portal/contract/{id}/resolve-templates,POST /v2/portal/entity:get,POST /v2/portal/entity:search(also per slug asslug.templates_ref), andPOST /v2/portal/metering/readings, while the inlinetemplates,counter_templates,slug.templates, andgroup_titlerequest fields are deprecated and will be removed in a future version
2026-08-25 Design Builder API
PUT /v1/designs/addConsumer/{application}/{designId}andPUT /v1/designs/removeConsumer/{application}/{designId}no longer accept theshould_deleterequest field (breaking)
2026-08-25 Validation Rules API
- Rule conditions can now be limited to certain situations through a new optional
applies_whenfield, accepted onPOST /v1/validation-rulesandPATCH /v1/validation-rules/{ruleId}and returned wherever rules are read - Value adjustments of a condition (
adjuston the value itself and on itsminandmax) now also accept a context value instead of only a fixed number, and gained a new optionalroundingsetting โ so consumers must be prepared foradjust.valueno longer always being a number - Rule conditions gained two new operators,
maxDigitsandmaxDecimals, for limiting how many digits and decimal places a value may have โ accepted onPOST /v1/validation-rulesandPATCH /v1/validation-rules/{ruleId}and returned wherever rules are read
2026-08-24 Message API
- Message and thread searches can now be narrowed to a view or to user groups through new optional
viewanduser_groupsfields onPOST /v1/message/messages:search,POST /v1/message/threads:searchIds,POST /v2/message/threads:search, andPOST /v1/message/unread:counts(which takes the view per scope asscopes.view_id); the search termqis no longer required on the message and thread search endpoints
2026-08-21 Integration Toolkit API
- Use case configuration no longer supports
constants,lookups,params_mapping,required_params,file_source,fan_out.split_expression,upload.external_id, andupload.success_whenโ these fields are no longer accepted when creating or updating a use case or an integration, and are no longer returned by the use case, integration, and use case history endpoints (breaking) - Request steps of a use case gained two new optional fields:
body_jsonatafor building the request body with a JSONata expression, andenabledfor switching a single step off; file uploads additionally accept an optionalupload.max_total_byteslimit POST /v2/erp/importsnow accepts an optionalimport_idto continue working on an existing import, answers with200in that case, and can answer with404or409when the referenced import cannot be used
2026-08-21 Message API
- New
POST /v1/message/unread:countsendpoint added for retrieving the number of unread messages
2026-08-21 Workflows Definition API
- Journey tasks can now pass parameters into the journey they open through a new optional
context_parametersfield โ available on the regular, ECP, and installer journey configuration of a task, accepted onPOST/PUT /v1/workflows/definitionsandPOST/PUT /v2/flows/templates, and returned wherever workflow definitions, flow templates, and running workflow executions and tasks are read;PATCH /v2/flows/executions/{execution_id}/tasks/{task_id}also accepts it for the ECP and installer journey of a running task
2026-08-20 Access Token API
- Access tokens now report when they expire through a new optional
expires_atfield, returned byGET /v1/access-tokens,POST /v1/access-tokens, andDELETE /v1/access-tokens/{id} - The maximum
expires_inaccepted byPOST /v1/access-tokenswas raised from 7 days (604800seconds) to 1 year (31536000seconds)
2026-08-20 Billing API
- Configuration history entries are now one of several typed rows distinguished by
change_typeโ an installment amount change or a contract pricing change โ instead of a single flat shape; the fields that were previously always present (changed_at,created_at,entity_id,entity_type,event_id,new_value,org_id,schema_version,source) and the optionalcontext,effective_at,previous_value,source_label,source_reference, andsource_systemfields are no longer part of the common row, so consumers must read them from the specific row type โ affectingGET /v1/billing/billing_accounts/{id}/configuration_history,GET /v1/billing/contracts/{id}/configuration_history, and the pricing information endpoints (breaking) - Contract pricing changes are now tracked in the configuration history:
change_typeaccepts and returns the newcontract_pricing_changedvalue, and a new optionalhistory_change_typesquery parameter lets several change types be requested at once on all four configuration history and pricing information endpoints - Pricing information (
GET /v1/billing/contracts/{id}/pricing_informationandGET /v1/billing/billing_accounts/{id}/pricing_information) now returns the fullbase_pricesandworking_priceslists of a contract, reports atariff_typefor each base and working price, and accepts a new optionalinclude_historyquery parameter for returning the configuration history along with it
2026-08-20 Calendar API
- Calendars now always report an
is_epilot_defaultflag indicating whether a calendar is the organization's default calendar โ returned byGET /v1/calendar,POST /v1/calendar,POST /v1/calendar/sources/outlook, andGET/PATCH /v1/calendar/{calendar_id} calendar_idis no longer required when creating an event throughPOST /v1/calendar/eventsโ the event is placed in the default calendar when it is omittedDELETE /v1/calendar/{calendar_id}can now answer with409when the calendar cannot be deleted
2026-08-20 Event Catalog API
POST /v1/events/{event_name}:triggercan now answer with409,425, and503when an event cannot be triggered- New optional
automation_trigger_onlyandautomation_trigger_seed_nodefields added to catalog events, marking events that are only triggered from an automation and naming the node that seeds them โ returned byGET /v1/events,GET /v1/events/{event_name}, andPATCH /v1/events/{event_name}
2026-08-20 Journey Config API
- New optional
stepperTypefield added to journey steps, controlling how a step is presented in the journey stepper โ accepted when creating and updating a journey configuration in v1 and v2, and returned wherever the journey configuration is read
2026-08-20 Event: Customer Request Submitted
- The event is now triggered from an automation instead of an entity operation โ the
operation,activity_id,activity_type, andtrigger_entityfields were removed, and_event_sourceand_trigger_source_typeare now alwaysautomation(breaking) ticket,event_attachments,_trigger_source_type, and_trigger_sourceare now always present;event_attachmentsis always sent but may be empty when the request carries no files, and_trigger_sourceidentifies the automation execution and action that triggered the request
2026-08-19 App API
- Apps can now declare
functionsโ a new optional list accepted onPATCH /v1/app-configurations/{appId}/versions/{version}and returned wherever apps and app configurations are read, together with a newfunctioncustom action type that lets a component reference one of those functions;APP_FUNCTIONis accepted as acomponentTypefilter onGET /v1/appand as an eventsourceonPOST /v1/app-eventsandPOST /v1/app-configurations/{appId}/events - The
sandboxcustom action type was removed โconfiguration.typeno longer acceptssandboxonPOST/PATCH /v1/app-configurations/{appId}/versions/{version}/componentsand it is no longer returned on the app, app-configuration, and public component read endpoints (breaking) - App components can now authenticate with basic auth โ
configuration.auth_typeaccepts and returns the newbasicvalue, so consumers must be prepared for this additional value - New optional
queryrequest parameter added to the app proxy endpoints (GET/POST/PUT/PATCH/DELETE /v1/public/app/{appId}/proxy/{proxyName}/{path}) for passing a query string on to the proxied request