Development API for third-side integrations

Loading models list

  • Description
  • Parameters
  • Response
Loads list of models from the website. By default this page will return only online models list.

Each <item> tag represent one model, below is the meaning of it’s tags/attributes:
Attribute Type Value
allowedChatType Integer "0" - Model currently accept Free chat
"1" - Model is in Break mode
"2" - Model is in Group chat and does not accept Free.
"3" - Model is busy in Private chat.
"4" - Model is Offline.
"5" - Model is in Private chat and accept only Voyeur (Spy) chat.
liveChatStatus Integer "0" - Model is Offline
"1" - Model is Online

Inner tags for Item:.
Tag Type Description Example Value
id Integer Model id 11
screenName String Model visual name on website and in chats Test_model
categoryIds String (Array of Integers) IDs of categories the model is listed in 1,2,3
featuredPicture Integer Profile image parameters 123
privateShowPrice Double Model’s GROUP chat price 1.0
vipShowPrice Double Model’s PRIVATE one2one chat price 2.0
voyeurShowPrice Double Model’s VOYEUR (SPY) chat price 0.5
age Integer Model’s visible age 18
gender String Model’s gender Female
customFields Array of custom tags Model’s profile information fields Look at the table customFields below
blockedLocations Array of custom tags Countries/states/IP addresses model is blocked Look at the table blockedLocations below

customFields
"name" attribute Type Example Value
body String Petite
height String 150cm (4'11")
weight String 38kg (84 lbs)
hairColor String Blonde
hairLength String Long
eyeColor String Blue
ethnic String White
orientation String Straight
aboutMe CDATA <![CDATA[ Some info ]]>
galleryContext String (URL) https://webvideo.softservice.org/templates/galleries/11
galleryContext URL part of model’s gallery.
To get model’s picture join galleryContext, picture ID and necessary resolution:

Image size is limited to requested boundary:
pictureUrl = galleryContext + "/" + pictureId + "320x240.jpg"
Image size is equals to requested boundary and cropped to keep aspect ratio:
pictureUrl = galleryContext + "/" + pictureId + "320x240_crop.jpg"
Image size is equals to requested boundary and aspect ratio is ignored:
pictureUrl = galleryContext + "/" + pictureId + "320x240_fixed.jpg"

blockedLocations
Attibute Type Example Value
country Integer 321
state String CA
ip Long Integer 134744072
ipMask Long Integer 4294967295
IP address and IP mask is stored as LONG INTEGERS.
https://<domain>/exec/modelnet-provider.jsp?cmd=get-models&k=<secret-key>
Parameter Type Value Description
k String Secret key shared between WebVideo and third-party system.
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Modelnet</title>
    <link>https://webvideo-domain-name</link>
    <description>Performers</description>
    <ttl>1</ttl>
    <lastBuildDate>current date time</lastBuildDate>
    <item allowedChatType="4" liveChatStatus="0">
      <id>11</id>
      <screenName>Test_model</screenName>
      <categoryIds>1,2,3</categoryIds>
      <featuredPicture id=”123” />
      <privateShowPrice>1.0</privateShowPrice>
      <vipShowPrice>2.0</vipShowPrice>
      <voyeurShowPrice>0.5</voyeurShowPrice>
      <age>18</age>
      <gender>Female</gender>
      <customFields>
        <custom name="body">Petite</custom>
        <custom name="height">150cm (4'11")</custom>
        <custom name="weight">38kg (84 lbs)</custom>
        <custom name="hairColor">Blonde</custom>
        <custom name="hairLength">Long</custom>
        <custom name="eyeColor">Blue</custom>
        <custom name="ethnic">White</custom>
        <custom name="orientation">Straight</custom>
        <custom name="aboutMe"><![CDATA[ Some info ]]></custom>
        <custom name="galleryContext">https://webvideo.softservice.org/templates/galleries/11</custom>
      </customFields>
      <blockedLocations>
        <location country=”231” state=”CA” />
        <location ip=”134744072” ipMask=”4294967295” />
      </blockedLocations>
    </item>
    <item ...>
      ...
    </item>
  </channel>
</rss>

Loading categories list

  • Description
  • Parameters
  • Response
Loads list of categories from the website. You could specify language parameter to get translations for title and description.
https://<domain>/exec/modelnet-provider.jsp
Property Type Value Description
cmd String get-categories Type of call
k String Secret key shared between WebVideo and third-party system.
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Modelnet</title>
    <link>http://demo.modelnet.club</link>
    <description>Categories</description>
    <ttl>1</ttl>
    <lastBuildDate>Tue, 23 Jan 2018 09:52:08 NOVT</lastBuildDate>
      <item>
      <title>Girls alone</title>
      <id>115</id>
      <name language="english" lng="en">Girls alone</name>
    </item>
    <item>
      <title>Couples</title>
      <id>124</id>
      <name language="english" lng="en">Couples</name>
    </item>
  </channel>
</rss>

Integrating third-party clients and per-minute billing

  • Description
  • Parameters
  • Response
There are few callbacks that third-party system necessary to implement to integrate it's own users with their money balances into WebVideo. All requests are made via HTTP to the URL provided and implemented by third-party. Type of call and other information passed as GET parameters.
https://<domain>/exec/modelnet-provider.jsp
Parameter Name Type Example Value Description
cmd String get-customer-info Type of call
viewer id String 4462039D8E2B492EB92B42A1B6C7F246 String unique identifier of third-party user. This parameter is passed to WebVideo chat in HTML and passed back to third-party system. Could be SESSIONID / GUID/ user Id or any other string uniquely identifies user.
performer-id Integer 11 WebVideo model id the user currently entering to.
k String Secret key shared between WebVideo and third-party system.
<customer id="123" screeName="test_user" balance="123.12">
Attribute Name Type Description
id Integer Strictly integer id of customer
screeName String String user’s screen name
balance Double Double 2-fraction digits user’s balance
In case of error following XML could be returned and error text will be displayed to user:
<error>Something is wrong</error>

Check customer's balance

  • Description
  • Parameters
  • Response
This request is made to third-party system preceding any spending operation. In case of paid chat sessions this call is made right before starting session and every 30 seconds during chat session with incrementing amount. In case of TIP this call is made once before tip billing call. The purpose of this call is to check balance and lock necessary money on user’s balance. Actual billing callback will be made separately.
https://<domain>/exec/modelnet-provider.jsp
Parameter Name Type Expected Value Description
cmd String check-enough-balance Type of call
customer-id Integer 123 Id of third-party customer returned in response to get-customer-info call
amount Double 1.02 Double 2-fraction digits amount required to be locked on user’s balance
session-id Integer 123123 WebVideo chat session id. In case the amount should be locked for chat session. In case of TIPPING this value will be empty.

In case of amount=0 and session-id is empty this call actually check for whole third-party backend website is available and customer is not blocked of starting privates. In this case website should either return error in case of customer is blocked or customer balance otherwise.
performer-id Integer 11 WebVideo model id. Model id in case the amount should be locked for chat session. In case of TIPPING this value will be empty.
tariff-type Integer 2 Available values:
2 - Group chat
3 - Private chat
4 - Voyeur (Spy) chat
In case of TIPPING this value will be empty.
session-start-time String (UTC Format) 2016-04-07 15:07:21 UTC current chat session start time. In case of TIPPING this value will be empty.
session-end-time String (UTC Format) 2016-04-07 15:08:51 UTC current chat session end time. In case of TIPPING this value will be empty.
k String Secret key shared between WebVideo and third-party system.
<customer balance="55.32">
Where balance does not include locked amount. For example in case user’s actual balance is 56.34 and WebVideo requested to lock 1.02 the expected response balance should be 55.32.
In case of not enough money on balance or any other error following xml with error description could be returned:
<error>Your balance is not enough to continue</error>

Charge customers for chat session

  • Description
  • Parameters
  • Response
This call is made once after chat session is finished. Any money locks made for certain session id should be released and final billing transaction should be created.
https://<domain>/exec/modelnet-provider.jsp
Parameter Value Type Example Value Description
cmd String create-session-by-session Type of call
customer-id Integer 123 Id of third-party customer returned in response to get-customer-info call
session-id Integer 123123 WebVideo chat session id.
session-start-time String (UTC Format) 2016-04-07 15:07:21 UTC current chat session start time.
session-amount Double 1.02 Double 2-fraction digits amount to charge.
performer-id Integer 11 WebVideo model id.
k String Secret key shared between WebVideo and third-party system.
<customer balance="55.32">
User's balance after this charge transaction;
Or in case of error:
<erorr>Something went wrong</error>

Charge customers for Tip

  • Description
  • Parameters
  • Response
This call is made once when user send TIP to model. Any money locked for tipping should be released and final tip transaction should be created.
https://<domain>/exec/modelnet-provider.jsp
Parameter Name Type Example Value Description
cmd String create-expenses-by-tip Type of call
customer-id Integer 123 Integer id of third-party customer returned in response to get-customer-info call
tip-amount Double 5.00 Double 2-fraction digits amount to charge.
performer-id Integer 11 WebVideo model id.
performer-screenName String test_model WebVideo model screen name.
k String Secret key shared between WebVideo and third-party system.
<customer balance="55.23">
User’s balance after this charge transaction.
Or in case of error:
<error>Something went wrong</error>

Insert video chat to third-party page

  • Description
  • Parameters
  • Script
To Embed chat into third-party system, put following html code and pass necessary parameters describing model and user in script’s url:
<div id="widget-webvideo_chat"></div>
<script type="text/javascript" src="https:///exec/widgets/chat/api.jsp?<parameters>"></script>
https://<domain>/exec/widgets/chat/api.jsp?<parameters>
Fields marked with are required.
Parameter Name Type Example Value Description
performer_id Integer 123 WebVideo model id.
authCode String 4462039D8E2B492EB92B42A1B6C7F246 String unique identifier of third-party user. This parameter is used get-customer-info request. Could be SESSIONID / GUID/ user Id or any other string uniquely identifies user.
loginUrl String (URL) https://<domain>/login Absolute URL to user’s login page. Оpen in a new window (target=_blank).
registrationUrl String (URL) https://<domain>/join Absolute URL to user’s registration page. Оpen in a new window (target=_blank).
modelListUrl String (URL) https://<domain>/models Absolute path to models list. Оpen in a parent window (target=_top).
modelProfileUrl String (URL) https://<domain>/model123 Absolute path to model’s profile page.. Оpen in a parent window (target=_top).
addFundsUrl String (URL) https://<domain>/addfunds Absolute URL to user’s add funds page. Оpen in a new window (target=_blank).
custom_css_url String (URL) https://<domain>/chat_custom.css Absolute URL to chat widget customization CSS.
ttl Long 1411103607000 Widget page expiration time (UTC time in milliseconds). Copy-paste protection.
salt String aabbccdd HASH salt value.
hash String HASH value generated by following scheme:
SHA256(all parameters alphabetically ordered and concatenated + secret key)
Secret key is setup in WebVideo Admin Area: System configuration -> Internal callback secret key
Here is an example php script that create chat widget script url and embed widget to the page:
<?php
$data_ar = array(
  "performer_id" => "123",
  "authCode"	 => "4462039D8E2B492EB92B42A1B6C7F246",
  "loginUrl"     => "https://domain.com/login",
  "registrationUrl"     => "https://domain.com/join",
  "modelListUrl"     => "https://domain.com/models",
  "modelProfileUrl"     => "https://domain.com/model/123",
  "addFundsUrl"     => "https://domain.com/addfunds",
  "custom_css_url"     => "https://domain.com/chat_custom.css"
);

function sign_params($data_ar, $secret_key)
{
  $data_ar['salt'] = uniqid();
  $data_ar['ttl'] = round(microtime(true) * 1000) + 30*60*1000; //Link valid for 30min
  ksort($data_ar, SORT_STRING);
  $data_ar['hash'] = hash('sha256', implode('', $data_ar) . $secret_key);
  return $data_ar;
}

function getWebvideoWidgetUrl($data_ar) {
  $webvideo_secret_key = 'webvideocallback123';
  return 'https://webvideo-domain-name/?' . http_build_query(sign_params($data_ar, $webvideo_secret_key));
  return $url;
}
?>
<div id="widget-webvideo_chat"></div>
<script type="text/javascript" src="<?php print(getWebvideoWidgetUrl($data_ar)); ?>"></script>