NAV Navbar

Introduction

This is the documentation of the Easy Live APIs (REST and WebSocket).

Contact support@goeasylive.com for any question related to this documentation.

Use case examples:

Visit https://goeasylive.com/features/ to learn more about Easy Live capabilities or E-mail contact@goeasylive.com to request additional features.

PRE-REQUIRED:

Easy Live Oauth client ID & secret key. E-mail contact@goeasylive.com to obtain your keys to the API.

OAuth 2.0 Authentication - Login and access

The following describes a two step process where an Easy Live customer will grant your application access to its Easy Live account. A permanent access token is obtained on the completion of step 2.

1 - Invoking the Login Dialog and Setting the Redirect URL

Your app must initiate a redirect to an endpoint which will display the login dialog. Make sure to fill the scope appropriately according to which API/Methods are to be used.

HTTP Request

GET https://www.goeasy.live/auth/dialog/?client_id={client_id} &redirect_uri={redirect_uri} &scope={scope} &state={state}

Query Parameters

Parameter Description
REQUIRED client_id The ID of your app, send by Easy Live (E-mail contact@goeasylive.com).
REQUIRED redirect_uri The URL that you want to redirect the person logging in back to. This URL will capture the response from the Login Dialog.
REQUIRED scope A comma separated list of Permissions to request from the person using your app. more informations
OPTIONAL state String limited to 100 characters. An arbitrary string created by your app for identify request in your app. You can pass id or like you want. The Easylive authorization server returns as a parameter of the response unmodified.

Success Response

User is redirect to {redirect_uri} with get parameter {code} :

code is lower than 100 characters with only a-Z or 0-9 or “-”.

{redirect_uri}?code={code} Example: https://your.website/callback.html?code=CharsHere

Error Response

{redirect_uri}?error={error} Example: https://your.website/callback.html?code=user%20canceled

2 - Exchanging Code for an Access Token

To get an access token, make an HTTP GET request to the following OAuth endpoint:

HTTP Request

GET http://www.goeasy.live/api/v1/oauth/access_token/?client_id={client_id} &client_secret={client_secret} &redirect_uri={redirect_uri} &code={code}

Query Parameters

Parameter Description
REQUIRED client_id The ID of your app, send by Easy Live.
REQUIRED client_secret The Secret ID of your app, send by Easy Live.
REQUIRED redirect_uri Need same as step 1.
REQUIRED code Code in response of step 1.

JSON Response

A successful response will be a JSON dictionary:

{ "access_token" : ###, "token_type" : "permanently", "scope" : ###, "state" : ### }

Name Description
access_token 64 characters with only a-Z or 0-9. Valid permanently if user not remove authorisation of your app in Easylive.
token_type Always “permanently”
scope Allowed scope, same as step 1.
state Same as step 1.

OAuth scopes

When requesting authorization from users, the scope parameter allows you to specify which permissions your app requires. These scopes are ties to the access token you receive upon a successful authorization. Without specifying scopes, your app only has access to basic information about the authenticated user. You may specify any or all of the following scopes:

Scope Name Description
input_list Can list my inputs.
input_create Can add an input
user_about_me Provides access to your:
  • Organisation name
  • Lang
  • Time zone
  • First and last name
  • Allowed Easylive server zones for your customer
(does not include email or address or phone number )
websocket Allow you to make everything with websocket.

Scopes are specified as a comma separated list in the url parameter scope when requesting authorization: &scope=input_list+input_create

Rest API

User about me

HTTP Request

GET http://www.goeasy.live/api/v1/user/about_me/?access_token={access_token}

Query Parameters

Parameter Description
REQUIRED  access_token  access token easylive, get with OAUTH method with scope “user_about_me”

JSON Response

{ "zones": [ { "id": "xxxxx", "name": "USA East - Virginia" }, { "id": "yyyyy", "name": "USA West - Oregon" }, { "id": "zzzzz", "name": "Europe - Ireland" } ], "organisation_name": "Customer company", "lang": { "name": "English", "iso": "en" }, "time_zone": "America/New_York", "user": { "first_name": "John", "last_name": "Do" } }

Name Description
zones List with 1 to N elements
zones -> id String ( max 40 characters )
zones -> name String ( max 64 characters )
organisation_name String ( max 64 characters )
lang -> iso String ( max 2 characters ) code iso ( “en” or “fr” )
lang -> name String ( max 64 characters )
time_zone String (The canonical name of the time zone https://en.wikipedia.org/wiki/Tz_database)
user -> first_name String ( max 30 characters )
user -> last_name String ( max 30 characters )

Input List

HTTP Request

GET http://www.goeasy.live/api/v1/input/list/?access_token={access_token} &zone_id={zone_id} &type_id={type_id}

Query Parameters

Parameter Description
REQUIRED access_token access token easylive, get with OAUTH method with scope “input_list”.
REQUIRED zone_id zone_id get in user_about_me method
OPTIONAL type_id For filter only one type List of type_id If not set, you have all inputs.

JSON Response

{ "list": [ { "type": { "name": "Other encoder", "id": "other_push" }, "title": "My Encoder", "rtmp": { "application": "live", "server": "XXXX.goeasy.live", "stream_name": "encoder_XXX_XXXXXX", "port": 1935, "url": "rtmp://XXXX.goeasy.live/live/encoder_230_XXXXXX" }, "thumbnail_url": "https://static-eu-irl.goeasy.live/camera/other_push.png" }, ... ] }

Name Description
list List with 0 to N dictionaries
type -> id String ( max 10 characters )
type -> name String ( max 64 characters )
title String ( max 64 characters )
rtmp -> application String ( max 16 characters )
rtmp -> server String ( max 32 characters )
rtmp -> stream_name String ( max 64 characters )
rtmp -> port Int
rtmp -> url String ( max 254 characters )
thumbnail_url String ( max 254 characters )

Input Create

HTTP Request

GET http://www.goeasy.live/api/v1/input/create/?access_token={access_token} &zone_id={zone_id} &type_id={type_id} &title={title}

Query Parameters

Parameter Description
REQUIRED access_token access token easylive, get with OAUTH method with scope “input_list”.
REQUIRED zone_id zone_id get in user_about_me method
REQUIRED type_id One of List of type_id
OPTIONAL title String ( max 64 characters )

JSON Response

{ "create": “ok” }

List of type_id

( Non-exhaustive list )

id English name
wirecast Wirecast
elStreamer Easy Live Streamer
fmle Flash Media Live Encoder
xsplit Xsplit
obs OBS - Open Broadcaster Software
teradek Teradek
other_push Other encoder

WebSocket API

EXAMPLE - MANUAL REQUEST WITH WEBSOCKET API:

You can use the following Easy Live - Example as both a working example of the full Oauth process and a WebSocket live connection manual request test page.

Fill in both the client ID & Secret, click on the GET button to obtain the access token. Follow the process and wait to be redirected to the Easy Live example page. Once you have the access token, click on the CONNECT button. You can then proceed with manual requests sending by copy-pasting JSON data from each request. The first request that has to be send is the INIT request.

To access the code of Easy Live - Example, send an e-mail to contact@goeasylive.com. You will then be able to open the google drive code folder.

Opening the API Websocket:

  1. Get the WebSocket access token using Oauth Doc. N.B: Token are permanents so you can do the operation manually once for your main account and store the token afterward.
  2. Open a WebSocket to the following URL: wss://ws-<zone>.goeasy.live/websocket/public/client/?access_token=<your access token from step 1 above> The zone parameter should be one of the zone the Easy Live client account has access to (Help - Zones). If needed, use User About Me to list the zones.
  3. Once opened, all the requests detailed in this document can be sent through the WebSocket as JSON strings.

Init

The WebSocket requests can be done within two differents contexts. To switch context, the init message must be send

General init

Request

{ "init": false }

Control Room init

Request

{ "init": <your control room ID> }

To get the control room ID use List control rooms. Use the control room context to handle inputs, encoding presets, broadcaster output points, control room publishing status, etc….

Control Room

All the method in the control room section should be used within the general context . Exceptions are start preview, start broadcast and stop publish.

Get default info

Used to create the default info for a control room. To be used in the control room creation method

Request

{ "website": { "scope": 44840674, "infos_init": true } }

Success

{ "customer": { "infos_init": { "visibility": "public", "event_type": "news", "facebook_sponsor_id": "", "description": "Powered by Easy Live - www.goeasylive.com", "date": "2018-02-07 15:23:32.206864", "preview": "new_live/ssnt9fFbgN0uVLVMOPcdkudl7aYJXXY9.png", "title": "Quick test", "tags": [ "easylive", "www.goeasylive.com" ] }, "scope": 44840674 } }

Create the control room

Request

{ "website": { "scope": 649729901, "live_manager": { "action": "create", "values": { "event_type": "lifestyle", "description": "super description of awesome", "visibility": "private", "preview": "https://s3.eu-west-1.amazonaws.com/eu-irl.animation/bureau/149/new_live/U7nllzcTsk3a7bE9zYm9aknJWuXeyJnf/original.jpg_1920_1080.png", "facebook_sponsor_id": "", "title": "Hella hella, hello", "date": "2018-02-07-17-15", "tags": [ "easylive", "www.goeasylive.com" ], "hour": "6:15 PM" } } } }

Success

{ "customer": { "error": null, "scope": 649729901, "live_manager": { "id": 545 } } }

Delete a control room

Request

{ "website": { "scope": 779164690, "home": { "action": "scheduled_ended_delete", "values": { "id": A } } } }

Success

{ "customer": { "home": { "response": {}, "action": "scheduled_ended_delete" }, "error": null, "scope": 779164690 } }

List control rooms

Usable in general Context

Request

{ "website": { "scope": 729709039, "home": { "action": "scheduled_ended", "values": { "name": "scheduled", "page": 0 } } } }

Success

{ "customer": { "error": null, "scope": 729709039, "home": { "response": { "count": { "scheduled": 13, "ended": 17 }, "page_count": 10, "boxs": [ { "created": "2018-05-28 06:43:00.000000", "can_delete": true, "start": 0, "archive_when_deleting": false, "title": "Test_Oppia", "id": 4221, "encrust_lan_id": false, "preview": "https://s3.eu-west-1.amazonaws.com/eu-irl.animation/eu-irl-1/286/new_live/cPc3HnpYWdMmfHWMEzxR4nUNVdddJetA/original.jpeg_96_54.png", "ended": null } ] }, "action": "scheduled_ended" } } }

Start the preview

{ "website": { "scope": 100508691, "send_publish": {} }

Stop the preview

{ "website": { "scope": 304598169, "send_stop": {} } }

Start the broadcast

{ "website": { "scope": 304598169, "send_start": {} } }

Stop the broadcast

{ "website": { "scope": 304598169, "send_stop": {} } }

Input

List the input

Request

{ "website": { "scope": 552568526, "objs": { "action": "list", "model": "camera" } } }

Success

{ "customer": { "objs": { "action": "", "selected_id": false, "model": "camera", "edit": null, "list": [{ "image_url": "", "thumbnail": "https://static-eu-irl.goeasy.live/camera/other_push.png", "common": true, "title": "test global input", "id": 264, "description": " " }] }, "error": null, "box_id": 0, "scope": 552568526 } }

Modify the input settings

Request

{ "website": { "scope": 48276231, "objs": { "action": "descriptor", "model": "camera", "object_id": 243 } } }

Success (Pull Input)

{ "customer": { "objs": { "values": [{ "can_delete": true, "input": {}, "name": "web", "label": "Arte HD", "fields": [{ "default": "Arte HD", "name": "name", "label": "Name" }, { "default": "http://streaming-hub.com/stream/arte.m3u8", "name": "input_custom", "label": "Link" }, { "default": "1280x720 HD READY (16/9)", "name": "input_size", "choices": [ ["1280x720 HD READY (16/9)", "1280x720 HD READY (16/9)"], ["1920x1080 FULL HD (16/9)", "1920x1080 FULL HD (16/9)"] ], "label": "Video Capture" }], "thumbnail": "https://static-eu-irl.goeasy.live/camera/web.png" }], "action": "descriptor", "model": "camera" }, "error": null, "box_id": 0, "scope": 48276231 } }

Success (Push Input)

{ "customer": { "box_id": 0, "objs": { "action": "descriptor", "values": [{ "can_delete": true, "label": "Wirecast", "thumbnail": "https://static-eu-irl.goeasy.live/camera/wirecast.png", "name": "wirecast", "input": { "server": "rtmp://192.168.0.128/live/", "stream": "wirecast_78_39qjOy" }, "fields": [{ "default": "Wirecast", "label": "Name", "name": "name" }] }], "model": "camera" }, "scope": 623756417, "error": null } }

Add a new Input

Request to get default info

{ "website": { "scope": 95988892, "objs": { "action": "descriptor", "model": "camera" } } }

Request to add a Pull Input

{ "website": { "scope": 315761439, "objs": { "action": "edit", "model": "camera", "values": { "input_type": "web", "name": "test RTMP 16/03", "input_custom": "testlinkrtmp", "input_size": "1280x720 HD READY (16/9)" } } } }

Request to add a Push Input

{ "website": { "scope": 457989692, "objs": { "action": "edit", "model": "camera", "values": { "input_type": "xsplit", "name": "Xsplittest" } } } }

Success

{ "customer": { "box_id": 0, "objs": { "action": "descriptor", "values": [{ "can_delete": false, "label": "Other encoder", "thumbnail": "https://static-eu-irl.goeasy.live/camera/other_push.png", "name": "other_push", "input": {}, "fields": [{ "default": "Other encoder", "label": "Name", "name": "name" }] }], "model": "camera" }, "scope": 95988892, "error": null } }

Delete an input

Request

{ "website": { "scope": 140466141, "objs": { "action": "delete", "model": "camera", "object_id": 277 } } }

Success

{ "customer": { "box_id": 0, "objs": { "action": "delete", "model": "camera" }, "scope": 140466141, "error": null } }

Toggle an input for the control room (Only possible in a control room)

Request

{ "website": { "scope": 179701354, "objs": { "action": "toggle", "model": "camera", "select": true, "object_id": 231 } } }

Success

{ "customer": { "box_id": 827, "objs": { "box": 827, "list": [{ "id": 264, "thumbnail": "https://static-eu-irl.goeasy.live/camera/other_push.png", "title": "test global input", "image_url": "", "common": true, "description": " " }], "model": "camera", "selected_id": 256, "action": "", "edit": null }, "scope": 544364715, "error": null } }

Encoding presets

List encoding preset

Request

{ "website": { "scope": 211410789, "objs": { "action": "list", "model": "quality" } } }

Success

{ "customer": { "box_id": 0, "objs": { "edit": null, "action": "", "model": "quality", "list": [{ "id": 458, "bitrate_video": 1024, "thumbnail": "https://static-eu-irl.goeasy.live/quality/sd.png", "title": "SD", "image_url": "", "common": false, "width": 854, "description": 480p<br/>25 FPS (TV standard - Europe)<br/> <div style='border:0 none;padding:15px 10px 0 0'>\n" }], "selected_id": false }, "scope": 211410789, "error": null } }

Modify an encoding preset

Request

{ "website": { "scope": 602845136, "objs": { "action": "descriptor", "model": "quality", "object_id": 458 } } }

Success

{ "customer": { "box_id": 0, "objs": { "action": "descriptor", "values": [{ "fields": [{ "default": false, "label": "Disable live", "name": "innactive_live" }, { "choices": [ ["428x240", "240p"], ["640x360", "360p"], ["800x450", "450p"], ["854x480", "480p"], ["1024x576", "576p"], ["1280x720", "720p HD"], ["1920x1080", "1080p Full HD"], ], "label": "Image size", "default": "854x480", "name": "size" }], "can_delete": true, "label": "Encoding Preset", "thumbnail": "https://static-eu-irl.goeasy.live/quality/sd.png", "name": "quality" }], "model": "quality" }, "scope": 602845136, "error": null } }

Add a new encoding preset

Request to list the encoding preset

{ "website": { "scope": 142594225, "objs": { "action": "descriptor", "model": "quality" } } }

Success

{ "customer": { "box_id": 0, "objs": { "action": "descriptor", "values": [{ "fields": [{ "default": false, "label": "Disable live", "name": "innactive_live" }, { "choices": [ ["428x240", "240p"], ["640x360", "360p"], ], "can_delete": false, "label": "Encoding Preset", "thumbnail": "https://static-eu-irl.goeasy.live/quality/hd.png", "name": "quality" }], "model": "quality" }, "scope": 142594225, "error": null } }

Request to save the new encoding preset

{ "website": { "scope": 296684281, "objs": { "action": "edit", "model": "quality", "values": { "input_type": "quality", "innactive_live": "", "size": "1280x720", "bitrate_audio": "128", "codec_video": "libx264", "codec_audio": "libfaac", "profile_video": "main", "fps": 25000, "preset_video": "faster", "save_bitrate_video": "2048", "save_profile_video": "main", "save_preset_video": "superfast", "bitrate_video": 2048 } } } }

Delete an encoding preset

Request

{ "website": { "scope": 37141473, "objs": { "action": "delete", "model": "quality", "object_id": 479 } } }

Success

{ "customer": { "box_id": 0, "objs": { "action": "delete", "model": "quality" }, "scope": 37141473, "error": null } }

Togggle to another encoding preset

Request

{ "website": { "scope": 192968306, "objs": { "action": "toggle", "model": "quality", "select": true, "object_id": 460 } } }

Success

{ "customer": { "box_id": 827, "objs": { "box": 827, "list": [{ "id": 471, "bitrate_video": 4096, "thumbnail": "https://static-eu-irl.goeasy.live/quality/fullhd.png", "title": "Full HD", "image_url": "", "common": false, "width": 1920, "description": 1080p Full HD<br/>25 FPS }], "model": "quality", "selected_id": 460, "action": "", "edit": null }, "scope": 192968306, "error": null } }

Broadcaster

Add a broadcaster

Request to display the broadcasters menu

{ "website": { "scope": 992876677, "objs": { "action": "list", "model": "broadcast" } } }

Success

{ "customer": { "box_id": 0, "objs": { "edit": null, "action": "", "model": "broadcast", "list": [], "selected_id": [] }, "scope": 992876677, "error": null } }

Request to to add a new broadcaster

{ "website": { "scope": 431149409, "objs": { "action": "descriptor", "model": "broadcast" } } }

Request to save a new broadcaster

{ "website": { "scope": 533529314, "objs": { "action": "edit", "model": "broadcast", "values": { "input_type": "multistreams", "stream": "86" } } } }

Success

{ "customer": { "box_id": 0, "objs": { "action": "descriptor", "values": [{ "fields": [{ "default": "", "label": "Appellation", "name": "nick_name" }], "can_delete": false, "label": "EasyLive Multistreams", "thumbnail": "https://s3-eu-west-1.amazonaws.com/static.twinsview.fr/directsport/img/partenaire/multistreams_square.png", "name": "multistreams" }], "model": "broadcast" }, "scope": 8062290, "error": null }

Authorize a broadcaster

Request

{ "website": { "scope": 510791173, "broadcasters": { "get_oauth_redirect_url": { "params": { "broadcasterCallback": "1", "url": "/settings/zone/" }, "name": "facebook" } } } }

Deauthorize a broadcaster

Request

{ "website": { "scope": 391427843, "broadcasters": { "delete": { "name": "youtube" } } } }

Success (Return the remaining broadcasters)

{ "customer": { "scope": 391427843, "broadcasters_accounts": { "youtube": { "platform_type": "video", "screenname": "", "avatar_80_url": "https://s3-eu-west-1.amazonaws.com/static.twinsview.fr/directsport/img/partenaire/youtube_square.png", "thumbnail": "https://s3-eu-west-1.amazonaws.com/static.twinsview.fr/directsport/img/partenaire/youtube_square.png", "url": "", "broadcaster": { "auth_method": "oauth", "service": "youtube" }, "views_total": -1, "status": { "error": null, "thumbnail": "fa-close", "name": "disabled" } } } }

Change the user from a broadcaster

Request

{ "website": { "scope": 253702806, "broadcasters": { "get_oauth_redirect_url": { "params": { "broadcasterCallback": "1", "url": "/settings/zone/" }, "name": "youtube" } } } }

Success

{ "customer": { "broadcasters_get_oauth_redirect_url": { "url": "https://accounts.google.com/o/oauth2/auth?client_id=1023456134485.apps.googleusercontent.com&redirect_uri=https://www.goeasy.live/api/auth/callback/youtube/&scope=https://www.googleapis.com/auth/youtube%20https://www.googleapis.com/auth/youtubepartner&response_type=code&access_type=offline&approval_prompt=force&state=eyJ1cmwiOiAiL3NldHRpbmdzL3pvbmUvIiwgImJyb2FkY2FzdGVyQ2FsbGJhY2siOiAiMSIsICJpZCI6IDE0N30" }, "scope": 456075349 } }

Media asset

Add a media asset

Adding request (for a picture)

{ "website": { "scope": 345108390, "animation": { "action": "can_upload", "values": { "size": 9692, "type": "image/jpeg" } } } } { "website": { "scope": 658417748, "uploads3_get": { "directory": "v2", "bucket": "animation", "mime_type": "image/jpeg" } } }

Saving request

{ "website": { "scope": 710331517, "animation": { "action": "add", "values": { "url": "https://s3-eu-west-1.amazonaws.com/eu-irl.animation/bureau/147/v2/njezuEUPTeuC7UMWcHCVVAiaEMeUdFwE/original.jpe", "width": 300, "duration": 0, "height": 225, "display": "over", "class_name": "animationImage", "volume_input": 256, "volume": 0, "fullscreen": true, "size": 9692, "name": "Animation_Image", "zoom": 50, "x": 1670, "y": 100 } } } }

Success

{ "customer": { "animations": [{ "id": 183, "fullscreen": true, "height": 225, "volume_input": 256, "zoom": "50.0000", "live_thumbnail": "", "name": "Animation_Image", "volume": 0, "link": "", "anim_hash": "qFHPXMPJxu", "duration": 0, "class_name": "animationImage", "x": 1670, "y": 100, "display": "over", "size": 9692, "width": 300, "url": "https://s3-eu-west-1.amazonaws.com/eu-irl.animation/bureau/147/v2/HUtrdrAeizj7jYAdXy7qrbYYWiwAdxuh/original.jpe" }] } }

Adding request x3 (for a video)

First one { "website": { "scope": 213399801, "animation": { "action": "can_upload", "values": { "size": 15984599, "type": "video/mp4" } } } } Second one { "website": { "scope": 616172591, "uploads3_get": { "directory": "v2", "bucket": "animation", "mime_type": "video/mp4" } } } Third one { "website": { "scope": 365325069, "animation": { "action": "add", "values": { "url": "https://s3.eu-west-1.amazonaws.com/eu-irl.animation/eu-irl-1/2197/v2/RCFxs4MTY93nmsx44uucxtAcaMCwixVU/original.mp4", "height": 1080, "width": 1920, "display_aspect_ratio": [ "16", "9" ], "sample_aspect_ratio": [ "1", "1" ], "duration": 53429, "size": 15984599, "line_id": 45557052, "name": "Vidéo" } } } }

Deleting a media asset

Request

{ "website": { "scope": 448001472, "animation": { "action": "delete", "values": [186] } } }

Answer

{ "customer": { "animation": { "action": "delete", "response": { "count": 1 } }, "scope": 448001472, "error": null } }

Scoring

Scoring activation

Request

{ "website": { "scope": 569985554, "scoring": "{\"teams\":[{\"score\":{\"point\":{\"value\":20,\"size\":3}},\"name\":{\"team\":{\"value\":\"<div>AtlantaTest</div>\",\"size\":12}},\"logo\":\"\"},{\"score\":{\"point\":{\"value\":19,\"size\":3}},\"name\":{\"team\":{\"value\":\"<div>NYC</div>\",\"size\":12}},\"logo\":\"\"}],\"config\":\"foot\",\"enabled\":true}" } }

Success

{ "834": { "scoring": { "config": "foot", "update_date": "2017-03-17 16:41:07", "teams": [{ "logo": "", "score": { "point": { "value": 20, "size": 3 } }, "name": { "team": { "value": "<div>AtlantaTest<\/div>", "size": 12 } } }, { "logo": "", "score": { "point": { "value": 19, "size": 3 } }, "name": { "team": { "value": "<div>NYC<\/div>", "size": 12 } } }], "enabled": true }, "scope": 569985554 } }

Add/Remove goal

Request

{ "website": { "scope": 573258649, "scoring": "{\"teams\":[{\"score\":{\"point\":{\"value\":21,\"size\":3}},\"name\":{\"team\":{\"value\":\"<div>AtlantaTest</div>\",\"size\":12}},\"logo\":\"\"},{\"score\":{\"point\":{\"value\":19,\"size\":3}},\"name\":{\"team\":{\"value\":\"<div>NYC</div>\",\"size\":12}},\"logo\":\"\"}],\"config\":\"foot\",\"enabled\":true}" } }

Success

{ "834": { "scoring": { "config": "foot", "update_date": "2017-03-17 16:42:15", "teams": [{ "logo": "", "score": { "point": { "value": 22, "size": 3 } }, "name": { "team": { "value": "<div>AtlantaTest<\/div>", "size": 12 } } }, { "logo": "", "score": { "point": { "value": 19, "size": 3 } }, "name": { "team": { "value": "<div>NYC<\/div>", "size": 12 } } }], "enabled": true }, "scope": 920984517 } }

Metadata

Setup the metadata

Request

{ "website":{ "scope":236844278, "infos_init":true } }

Success

"customer": { "infos_init":{ "date":"YYYY-MM-D 08:00:54.607813", "title":"Test", "event_type":"news", "description":"Powered by Easy Live - www.easylive.fr", "tags":[ "EasyLive", "www.goeasylive.com" ], "preview":"new_live/ssnt9fFbgN0uVLVMOPcdkudl7aYJXXY9.png" }, "scope":236844278 } }

Audio

Modify the audio settings

Request

{ "website": { "scope": 158568301, "volume": 230 } }

Success

{ "[Live ID]": { "volume": 230, "scope": 158568301 } }

Account management

Account creation

Request { "website": { "scope": <scope>, "customer_append": { "lang": "en", "zone": "eu-irl-3", "name": "Project Name" } } }

zone is mandatory, need fixed to "eu-irl-3" before we add us-vir-3 and us-ore-3 regions name is mendatory, name for your account lang is optional, "fr" or "en", if not set, it's the lang of parent customer

Error { "customer": { "error": "empty_name", "scope": <scope> } } errors list is "empty_name", "empty_zone", "bad_region" or "user_not_allowed"

Success { "customer": { "scope": <scope>, "customer_append": { "id": 2583, "zone": "eu-irl-3", "token" : <token> } } } Token is the oAuth token associated with the new account

Account removal

Request { "website": { "customer_remove": { "id": <id> }, "scope": <scope> } }

Success { "customer": { "customer_remove": { "id": <id> }, "scope": <scope> } }

Account List

You should be able to list customer with:

Request (without search pattern) { "website": { "customer_list": { page:0, search:"" }, "scope": <scope> } }

Request (with search pattern)

You can also search for specific accounts or patterns or account ID with the search key in the request

{ "website": { "customer_list": { page:0, search: "yoursearchpattern" }, "scope": <scope> } }

Success { "customer": { "customer_list": { list:[{id: 1111, name: "name1"}, ...], more: true }, "scope": <scope> } }

WebSocket - Scope

The WebSocket request scope is a random number between 0 and 100000000. This can be considered as the unique id of a request. It should be uniquely generated for each request (going to the server's request) and expected to be returned in the answer (coming from the server's answer). Requests/Answers are linked this way.

Might be required sometimes, in some requests.