developers.refinitiv.com
Open in
urlscan Pro
2600:9000:2140:2200:19:f220:7800:93a1
Public Scan
Submitted URL: https://app.communications.lseg.com/e/er?utm_source=eloqua&utm_medium=email&utm_campaign=740308_enterprisecustomernewsletter&utm_con...
Effective URL: https://developers.refinitiv.com/en/article-catalog/article/contributing-your-data-refinitiv-elektron-websocket-api-refinitiv?utm...
Submission: On March 14 via api from SG — Scanned from CA
Effective URL: https://developers.refinitiv.com/en/article-catalog/article/contributing-your-data-refinitiv-elektron-websocket-api-refinitiv?utm...
Submission: On March 14 via api from SG — Scanned from CA
Form analysis
3 forms found in the DOM<form id="ftlContainer" data-form-reason="developer portal submit ftl details" novalidate="novalidate">
<div class="tr-Grid tr-Grid--even2">
<div class="tr-Grid-items">
<div class="tr-Grid-item">
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="screenNameWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="screenName">
<span class="tr-FormTextControl-labelText">Screen name</span>
<input class="tr-FormTextControl-input" title="" id="screenName" name="screenName" type="text" placeholder="E.g - Jack" autocomplete="off">
</label>
<span id="screenNameerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="companyNameWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="companyName">
<span class="tr-FormTextControl-labelText">Company name</span>
<input class="tr-FormTextControl-input" title="" id="companyName" name="companyName" type="text" placeholder="E.g - Refinitiv" autocomplete="off">
</label>
<span id="companyNameerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="spokenLangWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="spokenLang">
<span class="tr-FormTextControl-labelText">Spoken language(s) (Optional)</span>
<input class="tr-FormTextControl-input" title="" id="spokenLang" name="spokenLang" type="text" placeholder="Separate multiple values with commas" autocomplete="off">
</label>
<span id="spokenLangerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="progLangWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="progLang">
<span class="tr-FormTextControl-labelText">Programming language(s) (Optional)</span>
<input class="tr-FormTextControl-input" title="" id="progLang" name="progLang" type="text" placeholder="Separate multiple values with commas" autocomplete="off">
</label>
<span id="progLangerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="checkbox1Label">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl tr-new-checkbox">
<label class="tr-FormTextControl-label" for="check1">
<input type="checkbox" id="check1" name="check1">
<span class="ui-checkbox__bg"></span>
<span>Share my full name, country and languages with other developers <a target="_blank"></a>
</span>
</label>
<label id="check1-error" class="error" for="check1"></label>
</div>
</div>
</div>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="checkbox2Label">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl tr-new-checkbox">
<label class="tr-FormTextControl-label" for="check2">
<input type="checkbox" id="check2" name="check2">
<span class="ui-checkbox__bg"></span>
<span>Share the company I work for and my email address with other developers <a target="_blank"></a>
</span>
</label>
<label id="check2-error" class="error" for="check2"></label>
</div>
</div>
</div>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="checkbox3Label">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl tr-new-checkbox">
<label class="tr-FormTextControl-label" for="check3">
<input type="checkbox" id="check3" name="check3">
<span class="ui-checkbox__bg"></span>
<span>I agree to <a href="/en/terms-of-use" target="_blank"> terms & conditions</a>
<h>
<h> and </h><a href="https://www.refinitiv.com/en/policies/privacy-statement" target="_blank">privacy policy</a>
</h>
</span>
</label>
<label id="check3-error" class="error" for="check3"></label>
</div>
</div>
</div>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="checkbox4Label">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl tr-new-checkbox">
<label class="tr-FormTextControl-label" for="check4">
<input type="checkbox" id="check4" name="check4">
<span class="ui-checkbox__bg"></span>
<span>Send me communications about Financial & Risk resources, including products or services. <a href="/en/testpagetermandcondition" target="_blank"></a>
</span>
</label>
<label id="check4-error" class="error" for="check4"></label>
</div>
</div>
</div>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-Grid tr-Grid--even2">
<div class="tr-Grid-items">
<div class="tr-Grid-item sr-backButtonArea">
<a class="tr-Anchor tr-Link tr-Link--iconLeft tr-Link--withIcon tr-Link--inline tr-Hidden">
<span class="tr-Link-icon">
<span class="tr-Svg">
<span class="tr-Svg-inner">
<svg aria-hidden="true" viewBox="0 0 24 24">
<g class="nc-icon-wrapper" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 12H2"></path>
<path d="M9 19l-7-7 7-7" stroke-linecap="square"></path>
</g>
</svg>
</span>
</span>
</span>
<span class="tr-Link-inner">Back</span>
</a>
</div>
<div class="tr-Grid-item ">
<button id="submitBtn" class="tr-Anchor tr-Button tr-Button--primary" type="submit">
<span class="tr-Button-body">Complete profile</span>
</button>
</div>
</div>
</div>
</div>
<input type="hidden" value="00018RA_DeveloperPortal_Inbound" name="elqFormName">
<input type="hidden" value="530566577" name="elqSiteId">
<input type="hidden" value="1111" name="elqCampaignId">
<input type="hidden">
<input type="hidden" value="0" name="hiddenField">
<input type="hidden" value="LeadSourceMostRecent" name="LeadSource-MostRecent">
<input type="hidden" value="secondaryleadsource" name="secondary_lead_source">
<input type="hidden" value="DetailleadSourcedetailmostrecent" name="Detail-LeadSourceDetail-MostRecent">
<input type="hidden" value="utm_campaign" name="utm_campaign">
<input type="hidden" value="utm_source" name="utm_source">
<input type="hidden" value="utm_medium" name="utm_medium">
<input type="hidden" value="utm_content" name="utm_content">
<input type="hidden">
<input type="hidden" value="utm_term" name="utm_term">
<input type="hidden" value="source_URL" name="source_URL">
<input type="hidden" value="hiddenCampaignId" name="hiddenCampaignId">
</div>
<div class="tr-Grid-item">
</div>
</div>
</div>
<div>
<style>
.hidden {
display: none;
}
</style>
<p class="hidden" id="constraintsAsString">{"messages":{"companyName":{"trengtext":"Please enter the company name in correct format","required":"Please enter the company name"},"screenName":{"answerHubScreenName":"Please enter the name in correct
format","required":"Please enter your screen name "}},"rules":{"companyName":{"trengtext":true,"required":true},"screenName":{"answerHubScreenName":true,"required":true}}}</p>
<script>
var country;
$.validator.addMethod('trtext', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[A-Za-z]+$'));
}, 'only Strings are allowed');
$.validator.addMethod('tremail', function(value, element) {
return this.optional(element) || value.match(new RegExp('[a-zA-Z0-9_.-\.]+@[a-zA-Z0-9\-\_\.]+\.[a-zA-Z0-9]{2,4}$'));
}, 'Please specify the correct domain for your documents');
$.validator.addMethod('accountno', function(value, element) {
return this.optional(element) || value.match(new RegExp('[A](-)([0-9]{8})$'));
}, 'Please enter 8 digit customer number (A-xxxxxxxx)');
$.validator.addMethod('requestId', function(value, element) {
return this.optional(element) || value.match(new RegExp('^$|^[0][0-9]{7}$'));
}, 'Please enter correct requestId');
$.validator.addMethod('trinternaluser', function(value, element) {
return this.optional(element) || value.match(new RegExp('[a-zA-Z0-9_.-\.]+@(?!thomson.com|reuters.com|thomsonreuters.com|refinitiv.com|tr.com)[a-zA-Z0-9\-\_\.]+\.[a-zA-Z0-9]{2,4}$'));
}, 'Please enter a valid customer email address');
$.validator.addMethod('trphone', function(value, element) {
return this.optional(element) || value.match(new RegExp('(^\\+)((\\s*[0-9]\\s*){8,})(\\s*(x|X?)\\s*)((\\s*[0-9]\\s*)*\\d$)$'));
}, 'Please enter correct phone number');
$.validator.addMethod('phone', function(value, element) {
return this.optional(element) || value.match(new RegExp('(^\\+)((\\s*[()-]?[0-9]\\s*[()-]?){9,20})$'));
}, 'Please enter correct phone number');
$.validator.addMethod('trengtext', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[a-zA-Z0-9-@#$%^& *!_s]*$'));
}, 'Chinize characters are not allowed');
$.validator.addMethod('trregtext', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[a-zA-Z0-9-., \']*$'));
}, 'Only alphabets numbers or characters');
$.validator.addMethod('reftextarea', function(value, element) {
return this.optional(element) || value.match(new RegExp('[a-zA-Z0-9][\\sa-zA-Z0-9]'));
}, 'Spaces not allowed');
$.validator.addMethod('marketingemail', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$'));
}, 'Please specify the correct domain for your documents');
$.validator.addMethod('answerHubScreenName', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[\\w\\.\\-\\@\\+\\s]+$'));
}, 'Please enter the name in correct format');
$(document).ready(function() {});
</script>
</div>
</form>
<form id="Feedback-Modal" novalidate="novalidate">
<h1>Feedback</h1>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="feedbackfirstnameWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="feedbackfirstname">
<span class="tr-FormTextControl-labelText">First name</span>
<input class="tr-FormTextControl-input" title="" id="feedbackfirstname" name="feedbackfirstname" type="text" autocomplete="off">
</label>
<span id="feedbackfirstnameerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="feedbacklastnameWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="feedbacklastname">
<span class="tr-FormTextControl-labelText">Last name</span>
<input class="tr-FormTextControl-input" title="" id="feedbacklastname" name="feedbacklastname" type="text" autocomplete="off">
</label>
<span id="feedbacklastnameerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="feedbackemailWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="feedbackemail">
<span class="tr-FormTextControl-labelText">Email address</span>
<input class="tr-FormTextControl-input" title="" id="feedbackemail" name="feedbackemail" type="email" autocomplete="off">
</label>
<span id="feedbackemailerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m " id="feedbacktypeWrapper">
<div class="tr-FormSelectControl">
<label class="tr-FormSelectControl-label sr-FormSelectControl--labelWithIcon" for="feedbacktype">
<span class="tr-FormSelectControl-labelText">
<span>Feedback type</span>
</span>
<span class="tr-FormSelectControl-input">
<select id="feedbacktype" class="tr-FormSelectControl-select" name="feedbacktype">
<option value="generalFeedback" class="tr-FormSelectControl-option">General Feedback About This Site</option>
<option value="reportProblem" class="tr-FormSelectControl-option">Report a Problem With This Site</option>
</select>
<span class="tr-FormSelectControl-arrow">
<span class="tr-Svg" style="width: 1.5rem">
<span class="tr-Svg-inner">
<svg aria-hidden="true" viewBox="0 0 24 24">
<path d="M16 10l-4 4-4-4" fill="none" stroke="currentColor" stroke-linecap="square" stroke-width="2"></path>
</svg>
</span>
</span>
</span>
</span>
</label>
<label id="feedbacktype-error" class="error" for="feedbacktype"></label>
</div>
</div>
<script>
var reqField = "";
var fieldId = "feedbacktype";
if (reqField) {
$('#' + fieldId).prop('required', true);
}
</script>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m " id="problemtypeWrapper">
<div class="tr-FormSelectControl">
<label class="tr-FormSelectControl-label sr-FormSelectControl--labelWithIcon" for="problemtype">
<span class="tr-FormSelectControl-labelText">
<span>Problem Type</span>
</span>
<span class="tr-FormSelectControl-input">
<select id="problemtype" class="tr-FormSelectControl-select" name="problemtype">
<option value="brokenlink" class="tr-FormSelectControl-option">Broken Link</option>
<option value="imagesnotdisplaying" class="tr-FormSelectControl-option">Images not displaying</option>
<option value="pagesnotdisplaying" class="tr-FormSelectControl-option">Pages not displaying</option>
<option value="other" class="tr-FormSelectControl-option">Other</option>
</select>
<span class="tr-FormSelectControl-arrow">
<span class="tr-Svg" style="width: 1.5rem">
<span class="tr-Svg-inner">
<svg aria-hidden="true" viewBox="0 0 24 24">
<path d="M16 10l-4 4-4-4" fill="none" stroke="currentColor" stroke-linecap="square" stroke-width="2"></path>
</svg>
</span>
</span>
</span>
</span>
</label>
<label id="problemtype-error" class="error" for="problemtype"></label>
</div>
</div>
<script>
var reqField = "";
var fieldId = "problemtype";
if (reqField) {
$('#' + fieldId).prop('required', true);
}
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="feedbackSubjectWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextControl">
<label class="tr-FormTextControl-label" for="feedbackSubject">
<span class="tr-FormTextControl-labelText">Subject</span>
<input class="tr-FormTextControl-input" title="" id="feedbackSubject" name="feedbackSubject" type="text" autocomplete="off">
</label>
<span id="feedbackSubjecterrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<style>
.hidden {
display: none;
}
</style>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m" id="messageWrapper">
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-FormTextareaControl">
<label class="tr-FormTextareaControl-label" for="message">
<span class="tr-FormTextareaControl-labelText">Message</span>
<textarea class="tr-FormTextareaControl-input" title="" id="message" name="message" autocomplete="off"></textarea>
</label>
<span id="messageerrortext" class="hidden" style="color:red;"></span>
</div>
</div>
</div>
<script>
</script>
<p>Attach files to upload</p>
<div>
<div class="confdiv" id="feedbackattachment">
<div class="attachment-box">
<input type="file" class="uploadFile" name="feedbackattachment" id="-file-feedbackattachment" onchange="viewAttachment(this)">
<div>
<p class="m pull-left mild-bold file-details">Attachments <span class="file-detail"> (10 MB limit) </span>
</p>
</div>
<div>
<p class="tr-Link--icon tr-Link--primary m pull-right mild-bold file-details file_upload" id="addAttachment">
<span class="tr-Link-inner ">Attach file</span>
<span class="tr-Link-icon">
<span class="tr-Svg">
<span class="tr-Svg-inner">
<svg viewBox="0 0 64 64">
<path d="M48 16v28c0 8.8-7.2 16-16 16s-16-7.2-16-16V15c0-6.1 4.9-11 11-11s11 4.9 11 11v27c0 3.3-2.7 6-6 6s-6-2.7-6-6V16" fill="none" stroke="#4d4d4d" stroke-linecap="round" stroke-width="4"></path>
</svg>
</span>
</span>
</span>
</p>
</div>
<div id="feedbackattachment-feed__attachments-list" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 feed__attachments-list"></div>
</div>
<input type="hidden" id="attachmentId" name="attachmentArr" value="">
<input type="hidden" id="attachArr" name="attachArr" value="">
<input type="hidden" id="fileArr" name="fileArr" value="">
<label class="error" for="-file-feedbackattachment"></label>
</div>
</div>
<div class="tr-VerticalSpacing tr-VerticalSpacing--m">
<div class="tr-Grid tr-Grid--even2">
<div class="tr-Grid-items">
<div class="tr-Grid-item sr-backButtonArea">
<a class="tr-Anchor tr-Link tr-Link--iconLeft tr-Link--withIcon tr-Link--inline tr-Hidden">
<span class="tr-Link-icon">
<span class="tr-Svg">
<span class="tr-Svg-inner">
<svg aria-hidden="true" viewBox="0 0 24 24">
<g class="nc-icon-wrapper" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 12H2"></path>
<path d="M9 19l-7-7 7-7" stroke-linecap="square"></path>
</g>
</svg>
</span>
</span>
</span>
<span class="tr-Link-inner">Back</span>
</a>
</div>
<div class="tr-Grid-item ">
<button id="feedbackSubmitButton" class="tr-Anchor tr-Button tr-Button--primary" type="submit">
<span class="tr-Button-body">Submit</span>
</button>
</div>
</div>
</div>
</div>
<div>
<style>
.hidden {
display: none;
}
</style>
<p class="hidden" id="constraintsAsString">{"messages":{"feedbacklastname":{"required":"Please enter last name"},"feedbackfirstname":{"required":"Please enter first name"},"problemtype":{"required":"Please select problem
type"},"feedbackemail":{"tremail":"Please enter email correctly","required":"Please enter email"},"message":{"required":"Please enter message"},"feedbackSubject":{"required":"Please enter subject"},"feedbacktype":{"required":"Please select
feedback
type"}},"rules":{"feedbacklastname":{"required":true},"feedbackfirstname":{"required":true},"problemtype":{"required":true},"feedbackemail":{"tremail":true,"required":true},"message":{"required":true},"feedbackSubject":{"required":true},"feedbacktype":{"required":true}}}
</p>
<script>
var country;
$.validator.addMethod('trtext', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[A-Za-z]+$'));
}, 'only Strings are allowed');
$.validator.addMethod('tremail', function(value, element) {
return this.optional(element) || value.match(new RegExp('[a-zA-Z0-9_.-\.]+@[a-zA-Z0-9\-\_\.]+\.[a-zA-Z0-9]{2,4}$'));
}, 'Please specify the correct domain for your documents');
$.validator.addMethod('accountno', function(value, element) {
return this.optional(element) || value.match(new RegExp('[A](-)([0-9]{8})$'));
}, 'Please enter 8 digit customer number (A-xxxxxxxx)');
$.validator.addMethod('requestId', function(value, element) {
return this.optional(element) || value.match(new RegExp('^$|^[0][0-9]{7}$'));
}, 'Please enter correct requestId');
$.validator.addMethod('trinternaluser', function(value, element) {
return this.optional(element) || value.match(new RegExp('[a-zA-Z0-9_.-\.]+@(?!thomson.com|reuters.com|thomsonreuters.com|refinitiv.com|tr.com)[a-zA-Z0-9\-\_\.]+\.[a-zA-Z0-9]{2,4}$'));
}, 'Please enter a valid customer email address');
$.validator.addMethod('trphone', function(value, element) {
return this.optional(element) || value.match(new RegExp('(^\\+)((\\s*[0-9]\\s*){8,})(\\s*(x|X?)\\s*)((\\s*[0-9]\\s*)*\\d$)$'));
}, 'Please enter correct phone number');
$.validator.addMethod('phone', function(value, element) {
return this.optional(element) || value.match(new RegExp('(^\\+)((\\s*[()-]?[0-9]\\s*[()-]?){9,20})$'));
}, 'Please enter correct phone number');
$.validator.addMethod('trengtext', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[a-zA-Z0-9-@#$%^& *!_s]*$'));
}, 'Chinize characters are not allowed');
$.validator.addMethod('trregtext', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[a-zA-Z0-9-., \']*$'));
}, 'Only alphabets numbers or characters');
$.validator.addMethod('reftextarea', function(value, element) {
return this.optional(element) || value.match(new RegExp('[a-zA-Z0-9][\\sa-zA-Z0-9]'));
}, 'Spaces not allowed');
$.validator.addMethod('marketingemail', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$'));
}, 'Please specify the correct domain for your documents');
$.validator.addMethod('answerHubScreenName', function(value, element) {
return this.optional(element) || value.match(new RegExp('^[\\w\\.\\-\\@\\+\\s]+$'));
}, 'Please enter the name in correct format');
$(document).ready(function() {});
</script>
</div>
</form>
GET https://developers.refinitiv.com/en/search-results
<form class="tr-SiteFooter-search" action="https://developers.refinitiv.com/en/search-results" method="get" role="search">
<div class="tr-SiteFooter-searchInner">
<div class="tr-SearchInput tr-SearchInput--dark" data-auto-focus="false" data-color-theme=""dark"" data-name=""q"" data-placeholder=""Search"" data-rehydratable="tr-SearchInput" data-typeahead="true"
data-typeahead-url=""https://lseg-production.ent.eu-west-2.aws.cloud.es.io/api/as/v1/engines/devportal-en-prod/query_suggestion?"" data-elastic-key="Bearer search-j7qr422s9s61csioo1r85rgx" data-value="""" tabindex="-1">
<label class="tr-SearchInput-label u-hiddenVisually" for="searchInput-1">Search</label>
<div class="tr-SearchInput-box"><input class="tr-SearchInput-input" autocomplete="off" placeholder="Search" id="searchInput-1" type="search" name="q" aria-haspopup="true" aria-owns="searchInput-1-typeahead" aria-expanded="false"
aria-autocomplete="both" aria-label="Search" role="combobox" aria-activedescendant="" value="">
<div class="tr-SearchInput-buttons"><button aria-label="Clear search" class="tr-SearchInput-clearButton" type="button">
<div class="tr-SearchInput-icon"><svg class="tr-Icon tr-Icon--xs" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" xmlns:xlink="http://www.w3.org/1999/xlink">
<path fill=""
d="M27.5861028,3.00085283 L28.9982943,4.41304438 L17.414,15.997 L29.0032453,27.5861028 L27.5890317,29.0003163 L16,17.411 L4.41219155,28.9991472 L3,27.5869556 L14.587,15.999 L3.00292893,4.41421356 L4.41714249,3 L16.002,14.585 L27.5861028,3.00085283 Z">
</path>
</svg></div>
</button><button aria-label="Submit search" class="tr-SearchInput-searchButton" type="submit">
<div class="tr-SearchInput-icon"><svg class="tr-Icon tr-Icon--xs" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" xmlns:xlink="http://www.w3.org/1999/xlink">
<path fill=""
d="M13.9585481,2 C20.5630719,2 25.9170963,7.35402437 25.9170963,13.9585481 C25.9170963,16.8301187 24.7686012,19.6049993 23.0816215,21.6664982 L29.8994949,28.4852814 L28.4852814,29.8994949 L21.6640371,23.0753342 C19.6025381,24.7623139 16.8301187,25.9170963 13.9585481,25.9170963 C7.35402437,25.9170963 2,20.5630719 2,13.9585481 C2,7.35402437 7.35402437,2 13.9585481,2 Z M14,4 C8.4771525,4 4,8.4771525 4,14 C4,19.5228475 8.4771525,24 14,24 C19.5228475,24 24,19.5228475 24,14 C24,8.4771525 19.5228475,4 14,4 Z">
</path>
</svg></div>
</button></div>
</div>
<div class="tr-SearchInput-typeahead" tabindex="-1">
<ul class="tr-SearchInput-typeaheadItems" id="searchInput-1-typeahead" role="listbox"></ul>
</div>
</div>
</div>
</form>
Text Content
Loading GlobalGlobal Directory EXPLORE OUR SITES London Stock Exchange Group Refinitiv MyRefinitiv Refinitiv Perspectives London Stock Exchange FTSE Russell LCH Contact Us SignSign in/Register Sign in Register Problems signing In? Developer Community * APIs APIs * Connected Risk * DataScope * Datastream * Eikon * Eikon Messenger See all APIs * FX Venues * Open PermID * Qual-ID * REDI * Refinitiv Data Libraries * Refinitiv Data Platform * Refinitiv Due Diligence * Refinitiv Knowledge Direct * Refinitiv Real-Time * Refinitiv Tick History * Workspace * World-Check * Yield Book * Articles Articles ARTICLES * Eikon Access data to power in-house or thirdparty desktop apps with Refinitiv data * World-Check Screen entity names, with or without secondary fields such as date of birth for individuals * Refinitiv RealTime Provides consumer, provider and publisher features available to developers of applications to connect to Refinitiv Real-Time Distribution Systems * DataScope The DataScope Select APIs offer programmatic access to Refinitiv content in a more flexible way than the browser- and FTP-based data access solutions * Refinitiv Data Libraries A set of ease-of-use interfaces offering coders uniform access to the breadth and depth of financial data and services available on the Refinitiv Data Platform See all Articles * Newsletters See our Developer Digest Newsletters * Developer Tools Developer Tools DEVELOPER TOOLS * RIC Search * Data Model Discovery * Data Exploration Tool * Data Catalogue * API Playground * Speed Guide See all Tools * Use Cases Use Cases USE CASES ARTIFICIAL INTELLIGENCE The Artificial Intelligence pipeline is a sequence of technical phases that will take an AI project from the early data acquisition phase up-to production. Read more arrow-right RISK & REGULATORY COMPLIANCE Manage country risk ranking, digital identity verification, document proofing and screening via one API. Read more arrow-right SUSTAINABLE FINANCE AND INVESTING Build sustainability into your investment strategy with our environmental, social and governance (ESG) data and services Read more arrow-right See all Use Cases * Events Events * Events * Academy Sessions Events UPCOMING EVENTS * There are no further events planned in 2023 View all Events PAST EVENTS * Regime Detection - Systematic Technical Analysis and Trading Strategy Webinar In this session we will build on the previous systematic strategy session –where we generated and used pre-built technical analysis indicators & features and backtested a simple strategy using various packages in Python. In particular we will focus on the task of Regime Detection to ignore any signals generated that are against the regime we are in and ultimately improve our systematic performance. * Tech Analysis and Strategy Backtesting Webinar As we become more and more systematic, we have to decide what tool to use to design, test and implement our system. * Refinitiv Real Time: Customer Updates Q2 Join us as we talk through the latest updates to our Real Time product services and hear from some of our customers as they explain the benefits they are seeing from utilising this service Academy Sessions * Refinitiv Academy The Refinitiv Academy provides partners with a variety of learning options to enhance their understanding of Refinitiv solutions. Whether you are just getting started with Refinitiv or are an advanced user, we provide the training and resources you need to be successful every step of the way. * Live instructor led classes Choose from a selection of live instructor-led classes offered in local languages across a variety of market sectors * On-Demand videos Check out our collection of On-Demand training videos to help you get the most out of the Refinitiv Product catalogue * Videos Videos * About About ABOUT US * Who we are * Careers * Customer Stories * Events & Webinars * Media Center * MyRefinitiv * Partners * Refinitiv * Refinitiv Charities * Refinitiv Perspectives * Social Impact * Sustainability and Refinitiv * Q&A Q&A ThankyouErrorModal Cancel Success-form THANK YOU THANK YOU FOR YOUR FEEDBACK AN ERROR OCCURED Support ticket number: Your support ticket has been created and emailed to you. We will review your message and get back to you shortly via email. Please try again later The attached file(s) are not uploaded because of invalid file(s) Close 1. Home 2. Article Catalog 3. Contributing your data to Refinitiv with WebSocket API and Refinitiv Real-Time Distribution System Article Contributing your data to Refinitiv with WebSocket API and Refinitiv Real-Time Distribution System July 04,2019 * facebook * twitter * linkedin * whatsapp * email Wasin Waeosri Developer Advocate Developer Advocate INTRODUCTION Update: September 2021 This article is the other part of how to contribute data your data to Refinitiv article. The first article shows how to setup Refinitiv Real-Time Distribution System for RCC and how to contribute data with Refinitiv Real-Time SDK Java/C++ (formerly known as Elektron SDK). This second article focuses on how to contribute your data to RCC using Websocket API for Pricing Streaming and Real-Time Service (aka WebSocket API) through Refinitiv Real-Time Distribution System (Refinitiv Real-Time Advanced Distribution and Advanced Data Hub servers). Note: RCC username, password, and host list credentials are required for contributing data to Refinitiv. Please reach out to your Refinitiv sales associate to acquire RCC access credentials. RCC OVERVIEW The Refinitiv Contribution Channel (RCC) is a new service for on-boarding content to Refinitiv. Depending on the client's needs, access to the service will be fulfilled by one or more of the following products: Contributions Channel for Refinitiv Real-Time Advanced Distribution Server/Advanced Data Hub Server, Contributions Channel for Real-Time API, Contributions Channel for Spreadsheet. RCC aims for replacing the legacy Market Link IP (MLIP) system. CONTRIBUTION SETUP Update (As of March 2021): The direct Websocket access to Contributions Channel Tutorial is available here. Developers can contributing data to RCC with Real-Time SDK C++/Java (RSSL connection) and WebSocket API (WebSocket connection). Currently, there are three methods to contribute data to the RCC. 1. Use Refinitiv Real-Time SDKs to directly connect to RCC to contribute data. To use this method, please refer to the following tutorials * ETA C/C++ Consumer - Posting data to Contributions Channel * EMA C/C++ Consumer - Posting data to Contributions Channel * ETA Java Consumer - Posting data to Contributions Channel * EMA Java Consumer - Posting data to Contributions Channel 2. Use Refinitiv Real-Time SDKs or WebSocket API for contributing data to RCC via Refinitiv Real-Time Distribution System. To use this method, please refer to the following first article and continue on this article: 3. Use WebSocket API to directly connect to RCC to contribute data. To use this method, please refer to the following the Contributing Data to Refinitiv Contributions Channel (RCC) via WebSocket tutorial page. This article is focusing on the second method which is contributing data via Refinitiv Real-Time Distribution System servers (Real-Time Advanced Distribution and Advanced Data Hub servers). The servers will take care of the RCC connection, JSON-OMM conversion, and login process for the application. The Refinitiv Real-Time Advanced Data Hub server connects to RCC through the delivery direct network via Tunnel Stream Aggregator (TSA) adapter, which is a private network (TLS encrypted) between a client site and Refinitiv. The TSA adapter is already packaged with the Advanced Data Hub version 3.2, and needs to be configured. You can find more detail regarding the Advanced Data Hub-RCC configurations in Contributing your data to Refinitiv article page. You can find Advanced Data Hub-RCC configuration parameters example in the project's /infra_config/rdms_trcc.cnf file (please note that it is not a completed Advanced Data Hub configuration file). Once this configuration is complete and the Contribution service RCC is available to the user, as shown in the Service-Up state in Advanced Data Hub and Advanced Distribution Server consoles. The WebSocket application can be used to POST data to this service in Advanced Distribution/Advanced Data Hub server. If you are interested to contribute data using the RSSL connection (with or without Refinitiv Real-Time Distribution System)), please visit the following series of Real-Time SDK and RCC based on your prefer API: * Contributing your data to Refinitiv article. * EMA Java Tutorial - Posting data to Contribution Channel. * EMA C++ Tutorial - Posting data to Contribution Channel. Note: The reader must have an understanding of Real-Time SDK, WebSocket programming, and be familiar with OMM Market Price data. You should also have a basic understanding of Refinitiv Real-Time market data infrastructure components like Advanced Distribution Server, Advanced Data Hub, etc. The code snippets in this article are shown in Python programming language. CONTRIBUTION PROCESS The application requires the following steps to contribute data to RCC via Refinitiv Real-Time Advanced Distribution Server/Advanced Data Hub Server: 1. The application initiates a WebSocket connection with Advanced Distribution Server. 2. The application sends a OMM Login request message to Advanced Distribution Server in JSON format. 3. Once the application receives a Login Refresh message from Advanced Distribution Server, the application can contribute data to RCC via an Off-Stream Post message. 4. The RCC Off-Stream Post message must have the following conditions: * The Ack attribute must be true * The message must contain the PostID attribute and value * The Key information includes Name and Service attributes that refer to the contribution RIC name and RCC contribution service name * The Message payload must be an Update message type * The Message payload must contain the same Key information as the Post message The example RCC Off-Stream Post message is shown in Posting result example section below. Note: Please note that RCC supports Off-Stream Post only. If you are not familiar with the WebSocket API Posting concept, please visit Contributing Data to Refinitiv Real-Time using the Websocket API article which will give you a full explanation of the WebSocket API Posting mechanisms and process. APPLICATION CODE WALKTHROUGH Following snippet of code is taken/modified from Elektron WebSocket API Python market_price_posting.py example, available in the Example Applications package. Complete RCC contribution posting sample is on Refinitiv-API-Samples GitHub page. The example project contains both the Python console application and Jupyter Notebook application. please check the README.md in the source code project for more detail regarding how to run the example. A successful login to Advanced Distribution Server, results in the Login-Refresh message. The process_login_response() function then calls c function to send the Post message. def process_message(ws, message_json): # Process all incoming messages. """ Parse at high level and output JSON of message """ message_type = message_json['Type'] if message_type == "Refresh": if 'Domain' in message_json: message_domain = message_json['Domain'] if message_domain == "Login": process_login_response(ws, message_json) # Process incoming Login Refresh Response message. def process_login_response(ws, message_json): """ Send Off-Stream Post """ print("Sending Off-Stream Post to Real-Time Advanced Distribution Server") send_market_price_post(ws) Copy The send_market_price_post () function creates the Off-Stream post message in JSON format, then sends it to Advanced Distribution Server as follows: # Create JSON Off-Stream Post message and sends it to ADS server. def send_market_price_post(ws): global post_id global bid_value global ask_value global primact_1_value """ Send a post message contains a market-price content to RCC """ """ Contribution fields """ contribution_fields = { "BID": bid_value, "ASK": ask_value, "PRIMACT_1": primact_1_value } """ OMM Post msg Key """ mp_post_key = { "Name": post_item_name, "Service": service_name } """ OMM Post Payload """ contribution_payload_json = { "ID": 0, "Type": "Update", "Domain": "MarketPrice", "Fields": contribution_fields, "Key": {} } """ OMM Off-Stream Post message """ mp_post_json_offstream = { "Domain": "MarketPrice", "Ack": True, "PostID": post_id, "PostUserInfo": { "Address": position, "UserID": int(app_id) }, "Key": {}, "Message": {}, "Type": "Post", "ID": login_id } contribution_payload_json["Key"] = mp_post_key mp_post_json_offstream["Key"] = mp_post_key mp_post_json_offstream["Message"] = contribution_payload_json ws.send(json.dumps(mp_post_json_offstream)) print("SENT:") print(json.dumps(mp_post_json_offstream, sort_keys=True, indent=2, separators=(',', ':'))) Copy POSTING RESULT EXAMPLE This posted data will automatically be forwarded to RCC and thus contributed to Refinitiv. The output from this example application shows a successful login to Advanced Distribution Server, followed by initial contribution upon login-refresh and multiple contributions upon receiving an acknowledgment: INITIATE AND LOGIN TO ADVANCED DISTRIBUTION SERVER Connecting to WebSocket ws://localhost:15000/WebSocket ... WebSocket successfully connected! SENT: { "Domain":"Login", "ID":1, "Key":{ "Elements":{ "ApplicationId":"256", "Position":"10.42.68.162" }, "Name":"root" } } RECEIVED: [ { "Domain":"Login", "Elements":{ "MaxMsgSize":61430, "PingTimeout":30 }, "ID":1, "Key":{ "Elements":{ "AllowSuspectData":1, "ApplicationId":"256", "ApplicationName":"ADS", "Position":"10.42.68.162", "ProvidePermissionExpressions":1, "ProvidePermissionProfile":0, "SingleOpen":1, "SupportBatchRequests":7, "SupportEnhancedSymbolList":1, "SupportOMMPost":1, "SupportOptimizedPauseResume":1, "SupportPauseResume":1, "SupportStandby":1, "SupportViewRequests":1 }, "Name":"root" }, "State":{ "Data":"Ok", "Stream":"Open", "Text":"Login accepted by host apis30." }, "Type":"Refresh" } ] Copy Contribution data via an Off-Stream Post message Sending Off-Stream Post to Real-Time Advanced Distribution Server SENT: { "Ack":true, "Domain":"MarketPrice", "ID":1, "Key":{ "Name":"<CONTRIBUTION_RIC>", "Service":"<CONTRIBUTION_Service>" }, "Message":{ "Domain":"MarketPrice", "Fields":{ "ASK":35.48, "BID":34.25, "PRIMACT_1":116.5 }, "ID":0, "Key":{ "Name":"<CONTRIBUTION_RIC>", "Service":"<CONTRIBUTION_Service>" }, "Type":"Update" }, "PostID":1, "PostUserInfo":{ "Address":"10.42.68.162", "UserID":256 }, "Type":"Post" } Here RECEIVED: [ { "AckID":1, "ID":1, "Key":{ "Name":"<CONTRIBUTION_RIC>", "Service":"<CONTRIBUTION_Service>" }, "Type":"Ack" } ] Copy REFERENCES * Refinitiv Real-Time & Distribution on the Refinitiv Developer Community website. * Websocket API for Pricing Streaming and Real-Time Services page. * Developer Webinar Recording: Introduction to WebSocket API. * Contributing Data to Refinitiv Real-Time using the Websocket API article. * Contributing your data to Refinitiv article. * Contributing Data to Refinitiv Contributions Channel (RCC) via WebSocket Tutorial. * EMA Java Tutorial - Posting data to Contribution Channel. * EMA C++ Tutorial - Posting data to Contribution Channel. * Contributing Data to Refinitiv Contributions Channel (RCC) via WebSocket Tutorial. For any question related to this example or WebSocket API, please use the Developer Community Q&A Forum. DOWNLOADS Example.EWA.Posting.TRCC Source Code * GitHub - Contributing your data to Refinitiv with WebSocket API * Explore API Samples on GitHub Related APIs * WebSocket API * Refinitiv Real-Time SDK - C++ Edition * Refinitiv Real-Time SDK - Java Edition * Explore All APIs Related Articles * Contributing your data to Refinitiv May 22, 2020 • Gurpreet Bal * Contributing Data to Refinitiv Real-Time using the Websocket API June 24, 2019 • Umer Nalla * Contributing Data to Refinitiv Contributions Channel (RCC) via WebSocket March 05, 2021 • Jirapongse Phuriphanvichai * Explore all Articles ftlScreen WELCOME ! HELP US PERSONALISE YOUR EXPERIENCE BY COMPLETING YOUR PROFILE. Screen name Company name Spoken language(s) (Optional) Programming language(s) (Optional) Share my full name, country and languages with other developers Share the company I work for and my email address with other developers I agree to terms & conditions and privacy policy Send me communications about Financial & Risk resources, including products or services. Back Complete profile {"messages":{"companyName":{"trengtext":"Please enter the company name in correct format","required":"Please enter the company name"},"screenName":{"answerHubScreenName":"Please enter the name in correct format","required":"Please enter your screen name "}},"rules":{"companyName":{"trengtext":true,"required":true},"screenName":{"answerHubScreenName":true,"required":true}}} ftlErrorScreen THERE IS SOME PROBLEM WITH THE REQUEST SENT. Close versuccessModal Close EMAIL VERIFICATION SUCCESSFULLY DONE! Thank you for registering. You will typically receive your email confirmation within 20 mins with further instructions on how to proceed with access to Developer Community Close feedbackModal Close FEEDBACK First name Last name Email address Feedback type General Feedback About This Site Report a Problem With This Site Problem Type Broken Link Images not displaying Pages not displaying Other Subject Message Attach files to upload Attachments (10 MB limit) Attach file Back Submit {"messages":{"feedbacklastname":{"required":"Please enter last name"},"feedbackfirstname":{"required":"Please enter first name"},"problemtype":{"required":"Please select problem type"},"feedbackemail":{"tremail":"Please enter email correctly","required":"Please enter email"},"message":{"required":"Please enter message"},"feedbackSubject":{"required":"Please enter subject"},"feedbacktype":{"required":"Please select feedback type"}},"rules":{"feedbacklastname":{"required":true},"feedbackfirstname":{"required":true},"problemtype":{"required":true},"feedbackemail":{"tremail":true,"required":true},"message":{"required":true},"feedbackSubject":{"required":true},"feedbacktype":{"required":true}}} Search * About Refinitiv * Who we are * MyRefinitiv * Careers * Media Center * Partners * Press Releases * Market Insights * Refinitiv.com * Refinitiv Perspectives * Reuters Editorial Forums * Lipper Alpha Insight * MiFID II * Contact Us * Community Forum * Product Support * Sales * Media Relations * Supplier Portal * Whistleblowing * Connect with us * Github * LinkedIn * Twitter * Youtube * Medium * Explore LSEG Sites * London Stock Exchange Group * London Stock Exchange * FTSE Russell * LCH Refinitiv * Cookie Policy * Privacy Statement * Terms of use * Copyright * Do not sell my info