Migration Guide


See what's new in LViS Services here.

LViS Service API

Project scope

The base URL in all project-scoped service requests has changed - "project" has been replaced with "projects".





Affected end-points:

Project info updates

"Project handshake" and "Project update" service handshake requests have been merged into one "Project handshake" request.

It's up to the service to decide if it needs to create a new project within the service database or update an existing project based on the provided project UUID. In case of an update project_name, config and api_key may be changed.


"Project handshake" request param project_uuid has been removed. project_id contains the project UUID instead of the integer ID.



  • Notification body has attribute id with UUID instead of id.

  • Attribute uuid has been removed from notification body.

These changes apply both to listings notifications and elements notifications.

Image validation

Please see here.


event_uuid and project_uuid have been renamed event_id and project_id in prefill requests.

Control API v2

See what's new in Control API here.

If you're using Control API v1 you need to migrate to Control API v2 as v1 has been removed.


All end-points in v2 use UUID as resource identifier, unlike v1, that used numerical IDs

Fetching events

In v1 fetching events was "all or nothing". GET /events would return all past events that finished in the last 7 days and all current, future and on-demand events. This may not have been what was required, but there was no way to fine tune it. And the number of events to be returned in one fetch was not configurable, which could cause these requests to be slower if they were fetching too many events.

In v2 events can be filtered by state, sorted and are returned in pages.

In order to migrate to v2 you need to analyse which event states you need, set up the filter accordingly, and then have an iteration-like code fetching events batch by batch until you have fetched all that was needed.

Note that the filter[state] attribute is required for the GET /events end-point.


  • Revoking an element must be done via passing {"action": "revoke"} to the element update end-point instead of setting the revoked_at field. revoked_at is now a read-only attribute.

  • A new "cancelled" state may be returned if element publishing was cancelled.

  • A "non_scheduled" state is returned for manual elements that have not been published

Event states

An "on_demand" state may be returned for events.

Questions structure

Combipoll (cpoll) core element has been removed from v23, and poll-like elements (polls, trivia, predictions, etc) can only have one question now, hence questions array attribute has been replaced with the question object in element-related requests.

Image validation

Please see here.

422 on exceeding limits

If you had a backoff/retry strategy implemented for handling HTTP 429 you need to consider that when maximum number of elements or events is reached and more can not be created via Control API the API now returns HTTP 422, rather than HTTP 429. You should not retry the call after receiving HTTP 422. Instead you need to report an error via log or health page.

App spec

See what's new in app spec here.

Element duration

V22 has_duration and integer duration properties have been replaced with a mandatory duration object.

Combipoll is removed

derived_from no longer supports "cpoll".

Image validation

Image field in app spec has a new required attribute: file_size, and two additional mandatory attributes that were previously optional: width and height. See image field documentation for details.

The LViS service must handle image validation errors, especially when the image is stored externally and the developer or producer has no control of it. You may also want to implement a mechanism that notifies developers and producers in case of validation errors.

Client SDK

LViS JS library

See what's new in the LViS JS library here.

  • Check that you're not relying on the ID returned by getIdmethod

    to be a numerical data type as it now returns the element's UUID instead of numerical ID

  • Replace use of signIn method with login method

  • Take advantage of the new form of setDelaymethod

    , which calculates the delay internally, simplifying your app code.

Leaderboard WS

See what's new in the leaderboard here.

  • Rename user_id to private_id

  • Rename value to score

  • If you use event-level leaderboards then change Leaderboard WS URLs generation to the new format: /api/projects/{project_id}/events/{event_id}/leaderboards/{leaderboard_id} and remove event_id from query params.

Leaderboard JS library

See what's new in the leaderboard here.

  • Rename user_id to private_id

  • Rename value to score

Enmasse JS library

If you use the Enmasse JS library and the signIn method then you need to replace it with the login method.

Native LViS & Enmasse libraries

Native libraries include changes to support:

  • UUIDs instead of IDs

  • New way of signing user session


  • Element ID type is changed from Integer to String

  • signIn() method is renamed to login() and is now asynchronous where you should pass a callback to received onSuccess or onFailure events

  • ResultCallback interface is moved to Enmasse package and onFailed method is renamed to onFailure


  • Element ID type is changed from Int64 to String

  • signIn() method is renamed to login() and is now asynchronous where you should pass a closure to get true or false completion result

Private feeds

Private feeds were deprecated in v20 and completely removed in v23. Please use Control API instead. Keep in mind Control API rate limit, implement retry and back-off strategies when migrating from private feeds.

Below is the map of old and new calls:FeedControl API


/api/v2/projects/:project_id - to get the project data



- to get listings events

Latest results



past&filter[include_in_latest_results]=true&include=stats - to get elements which are published, not revoked and included in latest results. Sorting and limit aren't supported yet.

All published



All elements


/api/v2/events/:event_id/elements?filter[state]= non_scheduled,future,current,on_demand,past&include=stats

Combipoll removal

Combipoll (cpoll) core element has been removed from v23. The implications include: