Miscellaneous#

Endpoints#

An endpoint represents a single connection between Skype and a client. A user may have multiple endpoints connected, for example if running Skype on their desktop and their phone. Similarly, connecting through SkPy creates a new endpoint.

There is a noticeable difference between being connected (at least one open endpoint) and being available (at least one client set status to Online). Skype for Web makes the distinction by showing an empty white circle when all clients claim to be offline, but no circle at all for no endpoints connected.

For desktop clients, the Invisible status sets its endpoint to be offline, whereas Offline actually disconnects the endpoint from the network.

Pagination#

Some APIs, such as fetching recent conversations or messages, include syncState URLs in the response. This allows you to fetch subsequent pages of data by calling this URL rather than the documented one.

{...
 "_metadata": {"backwardLink": "https://db3-client-s.gateway.messenger.live.com/v1/...?syncState=...&view=msnp24Equivalent",
               "forwardLink": "https://db3-client-s.gateway.messenger.live.com/v1/...?syncState=...&view=msnp24Equivalent",
               "syncState": "https://db3-client-s.gateway.messenger.live.com/v1/...?syncState=...&view=msnp24Equivalent",
               "totalCount": 10},
 ...}

The backwardLink and forwardLink attributes link to the previous and next result set, whilst syncState is the current page URL, and the one needed to retrieve all results.

Typically (for recents), the first call will give you the 10 most recent objects of that type. The response from the provided syncState URL would be objects 11 to 20, and a new syncState URL for objects 21 to 30, and so on. If a new object becomes available in the meantime, it is provided in the next synced call. For example, assume we start on item 100. The first call will provide items 100 to 91 (the 10 most recent). The next call gives 90 to 81. Two more items show up, 101 and 102. The next call will now give 102, 101, and 80 to 73.

Web UI options#

Skype for Web allows configuring various server-side settings for the connected account. This table shows how UI options map to flags and options:

Setting

Value

Flags/options

Notifications tab

Notifications

ON

21=OFF

Sounds

ON

22=OFF

Messaging tab

Web link previews

ON

11=OFF

YouTube player

ON

12=ON

@mention notifications

ON

13=OFF

Enable image paste (removed)

ON

14=ON

Typing indicator

ON

20=OFF

Emoticon suggestions

ON

23=ON

Show emoticons

ON

24=OFF

Show animated emoticons

ON

25=OFF

Show large emoticons

ON

26=OFF

Pin favorites (removed)

ON

27=OFF

Privacy tab

Allow calls from… [1]

Anyone

OPT_SKYPE_CALL_POLICY=0

Contacts only

OPT_SKYPE_CALL_POLICY=2

Allow video and screen sharing from…

Anyone

15=OFF, 16=OFF

Contacts only

15=ON, 16=OFF

Nobody

15=OFF, 16=ON

Personalization tab

Dark theme

ON

28=ON

GET https://flagsapi.skype.com/api/v1#

Retrieve all flags set for the current user.

[1, 12, 14, 15]
PUT https://flagsapi.skype.com/api/v1/(int: id)#

Set (enable) a flag.

Parameters:
  • id – flag identifier

DELETE https://flagsapi.skype.com/api/v1/(int: id)#

Clear (disable) a flag.

Parameters:
  • id – flag identifier

GET https://api.skype.com/users/(str: id)/options/(str: option)#

Get an option’s value. One of optionInt, optionBin or optionStr will be set in the response.

Parameters:
  • id – user identifier of connected account

  • option – option name

{"optionInt": 0, "optionName": "OPT_SKYPE_NAME", "optionBin": null, "optionStr": null}
POST https://api.skype.com/users/(str: id)/options/(str: option)#

Set an option’s value.

Note

There are probably stringValue and binaryValue form fields too, but no options of those types currently exist.

Parameters:
  • id – user identifier of connected account

  • option – option name

Form Parameters:
  • integerValue – new value to set

Profile and services#

The people settings endpoint provides another interface for setting account-wide options. Currently the only known one here is Skype.AutoBuddy, for automatically adding address book contacts to the Skype contact list.

GET https://people.directory.live.com/people/account/settings#

Retrieve all set options.

Note

Skype.AutoBuddy is only returned if true. The value is also returned as a string.

Request Headers:
  • X-AppId5c7a1e34-3a23-4a36-b2e6-7aa15be85f07

  • X-SerializeAspurejson

{"Settings": [{"Name": "Skype.AutoBuddy", "Value": "true"}]}
POST https://people.directory.live.com/people/account/settings#

Update one or more options.

Note

Boolean values are passed as booleans here, despite being retrieved as a string.

Request Headers:
  • X-AppId5c7a1e34-3a23-4a36-b2e6-7aa15be85f07

  • X-SerializeAspurejson

Request JSON Array of Objects:
  • Settings – subset of data to add or edit

The profile provides access to contact email addresses and phone numbers on the account.

GET https://pf.directory.live.com/profile/mine/System.ShortCircuitProfile.json#

Retrieve all profile information for the connected account.

Request Headers:
  • PS-ApplicationId5c7a1e34-3a23-4a36-b2e6-7aa15be85f07

{"TraceGraph": null,
 "Views": [{"Attributes": [{"Acl": null,
                            "Name": "PersonalContactProfile.Emails",
                            "Value": [{"Acl": null,
                                       "AddSearchableApplications": null,
                                       "DeleteSearchableApplications": null,
                                       "HasSearchableApplications": true,
                                       "Label": "Email_Other",
                                       "Name": "fred.adams@live.co.uk",
                                       "Searchable": true,
                                       "SearchableApplications": [{"Name": "Skype"}],
                                       "Source": "Msa",
                                       "State": "Verified"}]},
                           {"Acl": null,
                            "Name": "PersonalContactProfile.Emails.LastModified",
                            "Value": "/Date(1451606400000)/"},
                           {"Acl": null,
                            "Name": "PhoneVerificationQosAlert",
                            "Value": 0},
                           {"Acl": null,
                            "Name": "PersonalContactProfile.Phones",
                            "Value": [{"Acl": "",
                                       "AddSearchableApplications": null,
                                       "Country": "UK-44",
                                       "CountryName": "UK",
                                       "DeleteSearchableApplications": null,
                                       "HasSearchableApplications": false,
                                       "Label": "Phone_Other",
                                       "Name": "07012345678",
                                       "Searchable": false,
                                       "SearchableApplications": [],
                                       "Source": "Msa",
                                       "State": "Verified",
                                       "SuggestedVerifyMethod": "Sms"}]}],
            "Id": {"Cid": "-9000000000000000000", "Puid": null}}]}
POST https://pf.directory.live.com/profile/mine/System.ShortCircuitProfile.json#

Make changes to a part of the profile information.

Request Headers:
  • PS-ApplicationId5c7a1e34-3a23-4a36-b2e6-7aa15be85f07

Request JSON Array of Objects:
  • Attributes – subset of data to add or edit

Services are additional or paid featured applied to an account, such as voicemail, local numbers, and Skype minutes.

GET https://consumer.entitlement.skype.com/users/(string: id)/services#

Retrieve a list of all active services.

Query Parameters:
  • id – user identifier of connected account

Request Headers:
  • Acceptapplication/json; ver=3.0

[{"active": false,
  "attributes": {"currency": "GBP"},
  "balance": 0,
  "balanceFormatted": "£0.00",
  "end": null,
  "href": "/users/fred.2/services/pstn",
  "id": "pstn",
  "reset": null,
  "service": "pstn",
  "start": null},
 {"active": true,
  "end": "2036-01-01T00:00:00+00:00",
  "href": "/users/fred.2/services/voicemail",
  "id": "voicemail",
  "reset": null,
  "service": "voicemail",
  "start": "2016-01-01T00:00:00+00:00"},
 {"active": true,
  "end": "2016-01-01T00:00:00+00:00",
  "href": "/users/fred.2/services/pstn_transfer",
  "id": "pstn_transfer",
  "reset": null,
  "service": "pstn_transfer",
  "start": "2016-01-01T00:00:00+00:00"},
 {"active": true,
  "attributes": {"monthly_minutes": 60,
                 "package": "api_300-region-landline-world-60"},
  "balance": 60,
  "data": {"calling_plan": "api_300-region-landline-world",
           "href": "/offers/calling-legacy/skus/package-api_300-region-landline-world-60/subscriptions/package-api_300-region-landline-world-60-1m",
           "nameFormatted": "World minutes for Office 365 60 mins 1 month"},
  "end": "2017-01-01T00:00:00+00:00",
  "href": "/users/fred.2/services/package.api_300-region-landline-world-60",
  "id": "package.api_300-region-landline-world-60",
  "quota": 60,
  "reset": "2016-02-01T00:00:00+00:00",
  "service": "package",
  "start": "2016-01-01T00:00:00+00:00"}]
GET https://consumer.entitlement.skype.com/users/(string: id)/services/(string: service)#

Fetch details for a single service.

Query Parameters:
  • id – user identifier of connected account

  • service – active service identifier

Request Headers:
  • Acceptapplication/json; ver=3.0

{"active": false,
 "attributes": {"currency": "GBP"},
 "balance": 0,
 "balanceFormatted": "£0.00",
 "end": null,
 "href": "/users/fred.2/services/pstn",
 "id": "pstn",
 "reset": null,
 "service": "pstn",
 "start": null}

URL scanning#

On Skype for Web, URLs in messages are displayed as rich block links containing a thumbnail and blurb.

GET https://urlp.asm.skype.com/v1/url/info#
Query Parameters:
  • url – address to ping for info

{"category": "generic",
 "content_type": "text/html",
 "description": "Search the world's information, including webpages, images, videos and more.",
 "favicon": "https://eus1-urlp.secure.skypeassets.com/static/google-32x32.ico",
 "favicon_meta": {"height": 32, "width": 32},
 "site": "www.google.com",
 "size": "-1",
 "status_code": "200",
 "thumbnail": "https://eus1-urlp.secure.skypeassets.com/static/google-90x90.png",
 "thumbnail_meta": {"height": 90, "width": 90},
 "title": "Google",
 "url": "http://google.com/",
 "user_pic": ""}

Static resources#

Skype provides a single JSON file containing all emoticons, animations and videos. Each release (i.e. when any resources are added or removed) has a different hash.

GET https://static-asm.secure.skypeassets.com/pes/v1/configs/(string: hash)/views/en#

Retrieve a list of all resources, along with their shortcuts and visibility.

Parameters:
  • hash – version identifier for the static set

Tracking#

There appears to be several analytics/tracking tools in place on Skype for Web, from the following domains:

  • browser.pipe.aria.microsoft.com

  • c1.microsoft.com

  • go.trouter.io and *.drip.trouter.io

  • pipe.skype.com

Unsupported features#

P2P group chats#

These are the older variants of group conversations, referenced by blob rather than thread ID, and not stored centrally on Skype’s servers. As such, these are not available via Skype for Web.

Note

You can “convert” a P2P chat to a threaded conversation from within a supported client, by using the /fork command. This creates a new cloud group chat with the same participants.

Multiple file transfers#

It appears that file transfers involving more than one file are handled differently within downloadable clients, and are not yet available over Skype for Web (the message is replaced with “Receiving files over P2P network is not supported on Skype for Web”).

This forum post notes that there are two file transfer modes, one of which is “cloud transfer” and works with Skype for Web. Other clients will likely be updated to support this at some point.