Skip to main content

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 meter and meter_counters nodes, so consumers can resolve counter identifiers such as external_id from 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 optional filters.search term for searching events and an optional pagination.before cursor for paging backwards; both are echoed back in the query of the response
  • Apps can now be configured through options: a new optional options list accepted on PATCH /v1/app-configurations/{appId}/versions/{version} and returned wherever apps and app configurations are read, where every returned option reports whether it is configured, lifted, sensitive, and when its value was last changed (value_updated_at); components declare through a new optional uses_options flag that they read those options, and accept options.sensitive on POST/PATCH /v1/app-configurations/{appId}/versions/{version}/components
  • New POST /v1/app/{appId}/options/resolve endpoint added for resolving the configured option values of an app
  • The secrets field 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, and source.provider_event_url โ€” affecting GET /v1/calendar/events, POST /v1/calendar/events, and GET/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/health for reading the current health, POST /v1/configs/health:scan for starting a new scan, POST /v1/configs/health:cleanup for cleaning up what a scan reported, and POST /v1/configs/health:coverage-request for 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_enabled setting โ€” accepted on POST /v2/portal/portal and 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_widths and capability UI hooks a new optional default_width, while ui_config.grid_layout is deprecated and will be removed in a future version โ€” affecting PUT /v1/entity/schemas/{slug}, POST/PUT /v1/entity/schemas/capabilities/{composite_id}, and everywhere schemas and capabilities are read
  • POST /v1/entity:graph now accepts an optional filter per graph node, for narrowing which entities that node matches

2026-08-26 Integration Toolkit API

  • New GET /v1/entities/{entityId}/sync-status endpoint added for reading how an entity is synced with the connected external system โ€” each reported sync state carries an optional last_operation and last_synced_at, plus optional readings_last_event_id, readings_last_operation, and readings_last_synced_at for meter readings
  • New POST /v1/erp/updates/direct_simulation endpoint added for simulating a direct update payload
  • Use cases can now be configured for direct updates through a new optional configuration.direct field, and configuration.entities[].fields is no longer required โ€” accepted when creating or updating a use case or an integration, returned wherever use cases are read, and also accepted by POST /v1/erp/updates/mapping_simulation and POST /v2/erp/updates/mapping_simulation
  • POST /v3/erp/updates/events now accepts an optional correlation_id per event

2026-08-26 Journey Config API

  • New optional settings.authGate field 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 validationRules may 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/notifications now accepts an optional template_id for creating a notification from a notification template, and an optional skip_user_resolution for delivering to the given recipients without resolving them to users first

2026-08-26 Workflows Execution API

  • agent_execution and agent_execution_id on a workflow task may now be null where an object and a string were previously returned โ€” affecting all flow execution and task responses (breaking)
  • New optional loop_iterations field added to workflow tasks, reporting how often a looping task ran; tasks and phases additionally report an optional analytics.skipped_at when they were skipped, and executions an optional analytics.started_by_org_id

2026-08-25 Blueprint API

  • New POST /v2/blueprint-manifest/jobs/{job_id}:retry endpoint added for retrying a blueprint job that did not finish
  • Job progress now reports why an individual resource failed through new optional error_code and error_data fields on resource_progress โ€” returned by GET /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_ref request field is accepted by POST /v2/portal/contract/{id}/resolve-templates, POST /v2/portal/entity:get, POST /v2/portal/entity:search (also per slug as slug.templates_ref), and POST /v2/portal/metering/readings, while the inline templates, counter_templates, slug.templates, and group_title request fields are deprecated and will be removed in a future version

2026-08-25 Design Builder API

  • PUT /v1/designs/addConsumer/{application}/{designId} and PUT /v1/designs/removeConsumer/{application}/{designId} no longer accept the should_delete request field (breaking)

2026-08-25 Validation Rules API

  • Rule conditions can now be limited to certain situations through a new optional applies_when field, accepted on POST /v1/validation-rules and PATCH /v1/validation-rules/{ruleId} and returned wherever rules are read
  • Value adjustments of a condition (adjust on the value itself and on its min and max) now also accept a context value instead of only a fixed number, and gained a new optional rounding setting โ€” so consumers must be prepared for adjust.value no longer always being a number
  • Rule conditions gained two new operators, maxDigits and maxDecimals, for limiting how many digits and decimal places a value may have โ€” accepted on POST /v1/validation-rules and PATCH /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 view and user_groups fields on POST /v1/message/messages:search, POST /v1/message/threads:searchIds, POST /v2/message/threads:search, and POST /v1/message/unread:counts (which takes the view per scope as scopes.view_id); the search term q is 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, and upload.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_jsonata for building the request body with a JSONata expression, and enabled for switching a single step off; file uploads additionally accept an optional upload.max_total_bytes limit
  • POST /v2/erp/imports now accepts an optional import_id to continue working on an existing import, answers with 200 in that case, and can answer with 404 or 409 when the referenced import cannot be used

2026-08-21 Message API

  • New POST /v1/message/unread:counts endpoint 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_parameters field โ€” available on the regular, ECP, and installer journey configuration of a task, accepted on POST/PUT /v1/workflows/definitions and POST/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_at field, returned by GET /v1/access-tokens, POST /v1/access-tokens, and DELETE /v1/access-tokens/{id}
  • The maximum expires_in accepted by POST /v1/access-tokens was raised from 7 days (604800 seconds) to 1 year (31536000 seconds)

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 optional context, effective_at, previous_value, source_label, source_reference, and source_system fields are no longer part of the common row, so consumers must read them from the specific row type โ€” affecting GET /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_type accepts and returns the new contract_pricing_changed value, and a new optional history_change_types query 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_information and GET /v1/billing/billing_accounts/{id}/pricing_information) now returns the full base_prices and working_prices lists of a contract, reports a tariff_type for each base and working price, and accepts a new optional include_history query parameter for returning the configuration history along with it

2026-08-20 Calendar API

  • Calendars now always report an is_epilot_default flag indicating whether a calendar is the organization's default calendar โ€” returned by GET /v1/calendar, POST /v1/calendar, POST /v1/calendar/sources/outlook, and GET/PATCH /v1/calendar/{calendar_id}
  • calendar_id is no longer required when creating an event through POST /v1/calendar/events โ€” the event is placed in the default calendar when it is omitted
  • DELETE /v1/calendar/{calendar_id} can now answer with 409 when the calendar cannot be deleted

2026-08-20 Event Catalog API

  • POST /v1/events/{event_name}:trigger can now answer with 409, 425, and 503 when an event cannot be triggered
  • New optional automation_trigger_only and automation_trigger_seed_node fields added to catalog events, marking events that are only triggered from an automation and naming the node that seeds them โ€” returned by GET /v1/events, GET /v1/events/{event_name}, and PATCH /v1/events/{event_name}

2026-08-20 Journey Config API

  • New optional stepperType field 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, and trigger_entity fields were removed, and _event_source and _trigger_source_type are now always automation (breaking)
  • ticket, event_attachments, _trigger_source_type, and _trigger_source are now always present; event_attachments is always sent but may be empty when the request carries no files, and _trigger_source identifies the automation execution and action that triggered the request

2026-08-19 App API

  • Apps can now declare functions โ€” a new optional list accepted on PATCH /v1/app-configurations/{appId}/versions/{version} and returned wherever apps and app configurations are read, together with a new function custom action type that lets a component reference one of those functions; APP_FUNCTION is accepted as a componentType filter on GET /v1/app and as an event source on POST /v1/app-events and POST /v1/app-configurations/{appId}/events
  • The sandbox custom action type was removed โ€” configuration.type no longer accepts sandbox on POST/PATCH /v1/app-configurations/{appId}/versions/{version}/components and 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_type accepts and returns the new basic value, so consumers must be prepared for this additional value
  • New optional query request 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