About this guide

This section describes this guide to help you find what you want quickly. If you are developing for the Skype API, please read the complete document and understand its technical and procedural information.

Purpose of this guide

This document describes the public Skype application programming interface (API) for Windows, the Skype APIs for Linux and Mac, and provides a reference guide for the Skype developer community.

Who reads this guide?

Skype's developer community who work with us to enrich the Skype experience and extend the reach of free telephone calls on the internet.

What is in this guide?

This document contains the following information:

More information

The Skype websites contain useful information for developers:

Legal information

This document is the property of Skype Technologies S.A. and its affiliated companies (Skype) and is protected by copyright and other intellectual property rights laws in Luxembourg and abroad. Skype makes no representation or warranty as to the accuracy, completeness, condition, suitability, or performance of the document or related documents or their content, and shall have no liability whatsoever to any party resulting from the use of any of such documents. By using this document and any related documents, the recipient acknowledges Skype's intellectual property rights thereto and agrees to the terms above, and shall be liable to Skype for any breach thereof. For usage restrictions please read the end user license agreement (EULA).

Text notation

This document uses monospace font to represent code, file names, commands, objects and parameters. The following text conventions apply for syntax:

Overview of the Skype API

The Skype API provides a mechanism for 3rd party scripts, applications and devices to control Skype UI functions and implement additional or improved features to complement the Skype.

The API has two layers:

Additionally, there are several Skype API wrapper libraries that encapsulate the functionality of Skype API. Such wrappers can act as optional third layers.

Communication Layer

Communication Layer provides a mechanism for external application to communicate with Skype. This layer is platform-dpendant - a transport mechanism to exchange data with Skype is different on Windows, Linux and Mac operating systems.

For more information on how to implement communication layers for different operating systems, see following sections of this document:

Once your application has attached itself to Skype via Communication Layer, it can forget all about it and proceed with talking to Skype, using Protocol layer commands.

Protocol Layer

The Protocol Layer is a language of commands that Skype knows how to respond to. The syntax of that language is described in Skype API reference portion of this documument.

Commands sent to Skype must be in UTF-8 format.

To get a better feel how the command protocol works, you should start by downloading the Upload new attachment "Tracer.exe" program. Once you get that program running (and have authorised its connection to the API in Skype UI) you can play around with commands you can find in the Commands section.

For example, you can query various properties of a contact record (User object) like this:

-> get user echo123 birthday
<- USER echo123 BIRTHDAY 0
-> get user echo123 is_video_capable
<- USER echo123 IS_VIDEO_CAPABLE FALSE

A test call to Skype's call testing service using API would look approximately like that:

-> call echo123
<- CALL 14662 STATUS UNPLACED
<- CALL 14662 STATUS UNPLACED
<- CALL 14662 STATUS ROUTING
<- USER echo123 COUNTRY United Kingdom
<- USER echo123 COUNTRY United Kingdom
<- USER echo123 COUNTRY 
<- CALL 14662 STATUS RINGING
<- USER echo123 COUNTRY United Kingdom
<- CALL 14662 VAA_INPUT_STATUS FALSE
<- CALL 14662 STATUS INPROGRESS
<- CALL 14662 DURATION 1
<- CALL 14662 DURATION 2
<- CALL 14662 DURATION 3
<- CALL 14662 STATUS FINISHED

Wrappers

While text based command protocol is more universal, using pre-built libraries is easier to start with. Currently we have three officially supported API wrapper libraries you can choose from:

Skype API on Windows

When developing applications to work with Skype, follow these general guidelines:

Skype for Windows sends and receives API commands using WM_COPYDATA messages. Use the RegisterWindowMessage method to register the following messages:

To initiate communication, a client application broadcasts the SkypeControlAPIDiscover message, including its window handle as a wParam parameter. Skype responds with a SkypeControlAPIAttach message to the specified window and indicates the connection status with one of the following values:

When the API becomes available, Skype broadcasts the SKYPECONTROLAPI_ATTACH_API_AVAILABLE = 0x8001 message to all application windows in the system. The data exchange uses commands (or responses), provided as null-terminated UTF-8 strings. The terminating 0 must be transferred as well. You cannot combine several messages in one packet. There is no limit to the length of the transferred string.

Note: The result of processing the message must be different from zero (0), otherwise Skype considers that the connection broken.

If the API client spends more than 1 second processing a message, the connection is disconnected. Use the PING command to test the connection status. To ease debugging during development, in regedit enter the key APITimeoutDisabled (DWORD value, 0 = timeout enabled 1 = timeout disabled) into the HKCU\Software\Skype\Phone\UI file in the registry to override the 1 second timeout.

To check if Skype is installed, in regedit check if the following key exists: HKCU\Software\Skype\Phone, SkypePath . This key points to the location of the skype.exe file . If this key does not exist, check if the HKLM\Software\Skype\Phone, SkypePath key exists. If the HKCU key does not exist but the HKLM key is present, Skype has been installed from an administrator account but not been used from the current account.

Download free examples:

Skype API on Linux

The Skype API for Linux, version 1.4 uses the Skype protocol 7, with few limitations in comparison to protocol 7 implementation in our Windows version. The list of unavailable commands can be found at the bottom of this page.

Supported distributions

Skype for Linux runs on the following Linux distributions:

The client may also work with other distributions but has not been tested.

Transport

Use the Skype API for Linux, version 1.3, with either:


Note: X11 messaging is still under development. The final release of Skype for Linux API, version 1.3, will include examples of working with X11 and a description of the Skype action handler for X11.


X11 messaging

The X11 messaging framework is included in all Linux distributions.


More information: The Xlib programming manual provides a detailed description of programming for X11.


D-BUS messaging

Download the D-BUS libraries, version 0.23, from freedesktop.org. D-BUS behavior in this release is changed from earlier releases, as follows:


Important: The Skype for Linux API, version 1.3, beta uses D-BUS version .23. The next release will move to support for D-BUS version .61+.


If you use RPM Package Manager to install skype, the D-BUS files are automatically configured. If you do not use RPM for the installation, you must create a configuration file as follows:

  1. Create a text file named skype.conf

  2. Save this file to /etc/dbus-1/system.d/skype.conf

  3. Add the following information to the file:
    <!DOCTYPE busconfig PUBLIC "-//freedesktop// 
    DTD D-BUS Bus Configuration 1.0//EN"
    "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
    <busconfig>
    <policy context="default">
    <allow own="com.Skype.API"/>
    <allow send_destination="com.Skype.API"/>
    <allow receive_sender="com.Skype.API"/>
    <allow send_path="/com/Skype"/>
    </policy>
    </busconfig>

Using the Skype API for Linux

To access the Skype API from a client application:


Important: On Linux, if you use spaces in the application_name, the name is truncated to the space. For example, if the application name is Skype for Java, the message displayed is "Skype wants to talk . . .". Also, on Linux it is essential to pass the application name before exchanging protocols, otherwise the connection will not work.


The Skype protocol manages the subsequent session.


Note: The session is associated with the window ID of the Skype API client. If the window is closed for any reason, a new session must be established.


D-BUS usage

D-BUS uses the following:

D-BUS is disabled by default.

Protocol 7 commands currently missing from Linux version

Also most of the OPEN commands for various Skype UI windows have not been implemented yet.

Download examples

Skype API on Mac

The Skype API is available in Skype for Mac OS X starting from version 1.3 and has interfaces for Cocoa, Carbon, and AppleScript. The Cocoa and Carbon interfaces are implemented in Upload new attachment "example_macosx_290507.dmg". Skype recommends that you include the Skype framework in your application as an embedded framework. To do so, copy it into the application bundle and link it to the application.

Client applications send string commands to control Skype. The format of these strings commands is described in the Skype API reference. If you are using a Cocoa or Carbon interface, Skype will send information back to your application by calling asynchronous delegate functions/methods.

Below, you'll find the instructions specific to Cocoa, Carbon, and AppleScript.

Cocoa

SkypeAPI class

Class methods

+ (BOOL)isSkypeRunning;

This method returns YES, when Skype is running and NO otherwise.

+ (void)setSkypeDelegate:(NSObject<SkypeAPIDelegate>*)aDelegate;

You must design an object to be Skype delegate (see delegate methods below). Use this method to set your object as Skype delegate.

+ (NSObject<SkypeAPIDelegate>*)skypeDelegate;

Returns the object which is currently set as Skype delegate.

+ (void)removeSkypeDelegate;

Removes current Skype delegate.

+ (void)connect;

Call this method after you have set Skype delegate. It will try to connect your application to Skype. Delegate method skypeAttachResponse will let you know, whether your application was successfully connected or not.

+ (void)disconnect;

Disconnects your application from Skype.

In 2.5 and later:
+ (NSString*)sendSkypeCommand:(NSString*)aCommandString;

In 1.5:
+ (void)sendSkypeCommand:(NSString*)aCommandString; 

Use this method to control Skype or request information. aCommandString is a Skype API string as described in Skype API protocol documentation. Note, that if you are using Skype.framework 2.5 or later then you have to change your code a little bit compared to 1.5, because in 2.5 sendSkypeCommand returns strings (in 1.5 all information was returned in asynchronous callbacks).

Delegate methods

Required method

// delegate protocol
@protocol SkypeAPIDelegate
- (NSString*)clientApplicationName;
@end

This method should return the name of your application. This name will be shown to the user, when your application uses Skype. The name should not include any version information.

Optional methods

// delegate informal protocol
@interface NSObject (SkypeAPIDelegateInformalProtocol)
- (void)skypeNotificationReceived:(NSString*)aNotificationString;

This is the main delegate method Skype uses to send information to your application. aNotificationString is a Skype API string as described in Skype API protocol documentation.

- (void)skypeAttachResponse:(unsigned)aAttachResponseCode;

This method is called after Skype API client application has called connect. aAttachResponseCode is 0 on failure and 1 on success.

- (void)skypeBecameAvailable:(NSNotification*)aNotification;

This method is called after Skype has been launched.

- (void)skypeBecameUnavailable:(NSNotification*)aNotification;

This method is called after Skype has quit.

@end

Guidelines

Design an object in your application to be a Skype delegate. This object must implement the required delegate method clientApplicationName. In order to receive information from Skype, it is recommended that your delegate object also implements the optional delegate methods. The first method your application should call is setSkypeDelegate. In most implementations, that will probably be:

[SkypeAPI setSkypeDelegate:self];

Next, you should call connect. After you have received positive response with skypeAttachResponse, you can start sending commands to Skype by using sendSkypeCommand. For example:

[SkypeAPI sendSkypeCommand:@"CALL echo123"];

When your application quits or wants to disconnect from Skype, you should call disconnect.

Carbon

In order to use Skype API, you must create a single instance of struct SkypeDelegate. If you set callback functions for the members of this struct, then Skype will call these functions to send information to your application. The only required member of this struct is a string clientApplicationName.

Here is the definition of SkypeDelegate:

struct SkypeDelegate
{
    // Required member
    CFStringRef clientApplicationName;
    // Optional members, can be NULL
    void (*SkypeNotificationReceived)(CFStringRef aNotificationString);
    void (*SkypeAttachResponse)(unsigned int aAttachResponseCode);
    void (*SkypeBecameAvailable)(CFPropertyListRef aNotification);
    void (*SkypeBecameUnavailable)(CFPropertyListRef aNotification);
};

Description

CFStringRef clientApplicationName;

This string should be the name of your application. It will be shown to the user, when your application uses Skype. The name should not include any version information.

void (*SkypeNotificationReceived)(CFStringRef aNotificationString);

This is the main delegate function Skype uses to send information to your application. aNotificationString is a Skype API string as described in Skype API protocol documentation.

void (*SkypeAttachResponse)(unsigned int aAttachResponseCode);

This function is called after Skype API client application has called ConnectToSkype. aAttachResponseCode is 0 on failure and 1 on success.

void (*SkypeBecameAvailable)(CFPropertyListRef aNotification);

This function is called after Skype has been launched.

void (*SkypeBecameUnavailable)(CFPropertyListRef aNotification);

This function is called after Skype has quit.

You should define the functions like this:

void SkypeNotificationReceived(CFStringRef aNotificationString){}
void SkypeAttachResponse(unsigned int aAttachResponseCode){}
void SkypeBecameAvailable(CFPropertyListRef aNotification){}
void SkypeBecameUnavailable(CFPropertyListRef aNotification){} 

and you can set them as members of your SkypeDelegate struct like so:

SkypeDelegate mySkypeDelegate;
mySkypeDelegate.SkypeNotificationReceived = SkypeNotificationReceived;
mySkypeDelegate.SkypeAttachResponse = SkypeAttachResponse;
mySkypeDelegate.SkypeBecameAvailable = SkypeBecameAvailable;
mySkypeDelegate.SkypeBecameUnavailable = SkypeBecameUnavailable;
mySkypeDelegate.clientApplicationName = CFSTR("My Carbon App");

Skype API methods

Boolean IsSkypeRunning(void);

This function returns TRUE, when Skype is running and FALSE otherwise.

void SetSkypeDelegate(struct SkypeDelegate* aDelegate);

You must design a struct to be Skype delegate (see SkypeDelegate description above). Use this function to set your struct as Skype delegate.

struct SkypeDelegate* GetSkypeDelegate(void);

Returns the struct which is currently set as Skype delegate.

void RemoveSkypeDelegate(void);

Removes current Skype delegate.

void ConnectToSkype(void);

Call this function after you have set Skype delegate. It will try to connect your application to Skype. Delegate callback function skypeAttachResponse will let you know, whether your application was successfully connected or not.

void DisconnectFromSkype(void);

Disconnects your application from Skype.

CFStringRef SendSkypeCommand(CFStringRef aCommandString);

Use this function to control Skype or request information. aCommandString is a Skype API string as described in Skype API protocol documentation.

In Skype.framework 2.6.0.142 and later: CFStringRef SendSkypeCommand(CFStringRef aCommandString); Older versions: void SendSkypeCommand(CFStringRef aCommandString);

Note, that if you are using Skype.framework 2.6.0.142 or later then you have to change your code a little bit compared to older versions, because in 2.6.0.142 SendSkypeCommand returns strings (previously all information was returned in asynchronous callbacks). Skype versions 2.5 and higher know how to return info synchronously. So, if you want to support Skype version 1.5, then you still have to listen to asynchronous callbacks.

Guidelines

The first method your application should call is SetSkypeDelegate, where aDelegate is your SkypeDelegate struct. In most implementations, that will probably be:

SetSkypeDelegate(&amp;myCarbonDelegate);

Next, you should call ConnectToSkype. After you have received positive response with SkypeAttachResponse, you can start sending commands to Skype by using SendSkypeCommand. For example:

SendSkypeCommand(CFSTR("CALL echo123"));

When your application quits or wants to disconnect from Skype, you should call DisconnectFromSkype.

AppleScript

There is just one command for Skype API, but it is a very powerful command, because you can send any the command strings as specified in Skype API protocol documentation to control Skype or request information.

Examples

tell application "Skype"
  send command "MESSAGE echo123 check" script name "My Script"
end tell
tell application "Skype"
  send command "CALL echo123" script name "My Other Script"
end tell

Skype protocol

The Skype protocol is currently in its seventh version. Starting with protocol 1 (the first Skype protocol) a new version is created only when new commands become incompatible with existing commands. The protocol number does not increase when new commands are introduced but existing commands remain unchanged.

Protocol 8

Protocol 8 is the current version of the Skype protocol.

Protocol 7

TYPE = POSTEDCONTACTS|GAP_IN_CHAT|SETROLE|KICKED|SETOPTIONS| KICKBANNED|JOINEDASAPPLICANT|SETPICTURE|SETGUIDELINES

Protocol 6

Protocol 5

Protocol 5 is the current version of the Skype protocol and is used by the following versions of Skype:

This protocol introduced multiperson chat commands, one-to-one video calls, call forwarding, and contact grouping.

Protocol 4

Protocol 4 is used by the following versions of Skype:

This protocol introduced ISO code prefixes for language and country.

Protocol 3

Protocol 3 is used by the following version of Skype:

This protocol introduced a compatibility layer for previous versions of instant messaging.

Protocol 2

Protocol 2 is used by the following version of Skype:

This protocol implemented the following changes:

Protocol 1 and 2 compatibility

If the requested protocol is smaller than 3, all incoming commands are converted as follows:

The GET MESSAGE properties are also converted:

All API notification (including GET/SET MESSAGE ) replies are converted:

If the protocol is less than 3, SEARCH MESSAGES and SEARCH MISSEDMESSAGES commands return string MESSAGES 1, 2, 3.

Skype API reference

The Skype API reference is a guide for developers working with the public Skype API.

Terminology

The Skype API reference uses the following terms:

Commands

This section provides a reference to the commands used in Skype.

Command identifiers

A command identifier is useful to identify a response to a specific command. A command identifier is supported by most commands and is included in the response.

Syntax

Response

Parameters

Errors

Version

Notes

Examples

Making and managing voice calls

This section describes the commands for making and managing voice calls.

Refer to Making and managing video calls for a description of video call commands.
Refer to Call failure reasons for a list of all reasons for call failure.

Skype4Com samples:

CALL

Syntax

Response

Parameters

Errors

Version

Notes

Example

GET CALL

Syntax

Response

Parameters and response values

Errors

Version

Example

SET CALL INPROGRESS

This enables you to resume a call, for example after placing it on hold.

Syntax:

Parameters:

Errors

SET CALL FINISHED

Terminates the call.

Syntax:

Parameters:

Errors

SET CALL ONHOLD

Places a call on hold. You can later resume the call by setting the state to INPROGRESS.

Syntax:

Parameters:

Note that from Protocol 2 and up, SET CALL ONHOLD results in two possible status responses:

Errors

SET CALL JOIN CONFERENCE

Syntax

Response

Parameters

Errors

Note

Example

SET CALL DTMF

Sends DTMF specified in <value> parameter to the call target.

Syntax:

Parameters:

When sending DTMF codes manually, with the dialpad buttons on the Call Phones tab of the Skype UI, these DTMF codes are displayed on the address bar, below dialpad. This is not the case while sending DTMF codes with SET CALL DTMF command.

If you want your programmatically sent DTMF codes to be displayed on the address bar, you can use BTN_RELEASED command instead of SET CALL DTMF. When used during an active call, BTN_RELEASED with appropriate parameter {0..9,#,*} will cause equivalent DTMF code to be sent to the remote party of that call.

Note that this will only work if the Call Phones tab (dialpad) is active. On active Call tab, the DTMF codes will still be sent but the keys will not be displayed on the address bar. On Contacts tab, the keys will be added to the address bar but no DTMF codes will be sent. Therefore, if you want to use BTN_RELEASED for sending DTMF codes, you will need to make sure the Skype UI has Call Phones as active tab. This you can do with OPEN DIALPAD command.

Notes

Errors

SET CALL SEEN

Syntax

Response

Parameters

Errors

Example

ALTER CALL

The ALTER CALL command controls call status.

Syntax:

Refer to ALTER CALL TRANSFER command for more information on altering the TRANSFER property.

Command feedback for ALTER CALL always includes echoing back the original command, usually followed by status change notifications, specific to particular commands.

Example:

-> ALTER CALL 1719 HANGUP
<- ALTER CALL 1719 HANGUP
<- CALL 1719 STATUS FINISHED

Version

GET CALL CAN_TRANSFER

Returns TRUE or FALSE, depending on whether a call can be transferred.

Syntax:

Example:

-> GET CALL 1034 CAN_TRANSFER +3721234567
<- CALL 1034 CAN_TRANSFER +3721234567 FALSE

Version

ALTER CALL TRANSFER

Used for transferring an incoming call. Note that call transfers only work with incoming calls to SkypeIn numbers if you have Skype Pro subscription.

Syntax:

If multiple handles are passed in parameters, first one to answer the call will get the transfer.

To better describe the call transfer mechanism, let's assume there are three participants in a call: A, B and C.

The ALTER CALL TRANSFER command is issued by B, to create a call between A and C. To check whether it is possible to transfer the call from A, B can use GET CALL CAN_TRANSFER command. Note that it is caller B (transferring party) who has to determine, whether a call is transferable.

Relevant CALL object STATUS property values:

Relevant CALL object properties:

Example:

//-------------------------------------------------------------------------------------------
// In this example, user Test is calling user Test3. Test3 then transfers the call to Test2.
// Note that for better clarity, call heartbeat messages are removed.
// Following portion of log is from perspective of the first outgoing call from user Test.
-> CALL Test3
<- CALL 626 STATUS UNPLACED
<- CALL 626 STATUS ROUTING
<- CALL 626 STATUS RINGING
<- CALL 626 TRANSFER_ACTIVE TRUE
<- CALL 626 STATUS ROUTING
<- CALL 626 TRANSFERRED_TO Test2
<- CALL 626 STATUS RINGING
<- CALL 626 VAA_INPUT_STATUS FALSE
<- CALL 626 STATUS INPROGRESS
<- CALL 626 VIDEO_STATUS VIDEO_NONE
<- CALL 626 STATUS FINISHED
//-------------------------------------------------------------------------------------------
// This portion of the log is from perspective of Test3 (who will transfer it to Test2)
<- CALL 288 CONF_ID 0
<- CALL 288 STATUS RINGING
<- CONTACTS FOCUSED 
//-------------------------------------------------------------------------------------------
// Checking here if it is possible to transfer this call to Test2
-> GET CALL 288 CAN_TRANSFER Test2
<- CALL 288 CAN_TRANSFER test2 TRUE
//-------------------------------------------------------------------------------------------
// Transferring call to Test2
-> ALTER CALL 288 TRANSFER Test2
<- ALTER CALL 288 TRANSFER Test2
<- CALL 288 STATUS INPROGRESS
<- CALL 288 TRANSFERRED_TO Test2
<- CALL 288 TRANSFER_STATUS UNPLACED
<- CALL 288 TRANSFER_STATUS ROUTING
<- CALL 288 TRANSFER_STATUS RINGING
<- CALL 288 TRANSFER_STATUS INPROGRESS
<- CALL 288 STATUS FINISHED
<- CALL 288 VAA_INPUT_STATUS FALSE
//-------------------------------------------------------------------------------------------
// This portion of the log is from perspective of Test2 (receiver of the transferred call)
<- CALL 1218 CONF_ID 0
<- CALL 1218 STATUS RINGING
<- CONTACTS FOCUSED 
-> ALTER CALL 1218 ANSWER
<- ALTER CALL 1218 ANSWER
<- CALL 1218 STATUS INPROGRESS
<- CALL 1218 VIDEO_STATUS VIDEO_NONE
<- CALL 1218 VAA_INPUT_STATUS FALSE
//-------------------------------------------------------------------------------------------
// Checking up who it was that transferred this call..
-> GET CALL 1240 TRANSFERRED_BY
<- CALL 1240 TRANSFERRED_BY Test3
<- CALL 1218 STATUS FINISHED

Version

Call failure reasons

Code

Description

Possible reason

1

CALL 181 FAILUREREASON 1

Miscellaneous error

2

CALL 181 FAILUREREASON 2

User or phone number does not exist. Check that a prefix is entered for the phone number, either in the form 003725555555 or +3725555555; the form 3725555555 is incorrect.

3

CALL 181 FAILUREREASON 3

User is offline

4

CALL 181 FAILUREREASON 4

No proxy found

5

CALL 181 FAILUREREASON 5

Session terminated.

6

CALL 181 FAILUREREASON 6

No common codec found.

7

CALL 181 FAILUREREASON 7

Sound I/O error.

8

CALL 181 FAILUREREASON 8

Problem with remote sound device.

9

CALL 181 FAILUREREASON 9

Call blocked by recipient.

10

CALL 181 FAILUREREASON 10

Recipient not a friend.

11

CALL 181 FAILUREREASON 11

Current user not authorized by recipient.

12

CALL 181 FAILUREREASON 12

Sound recording error.

Sending and managing SMS messages

This section describes the commands for creating and managing SMS messages.

Refer to SMS object section for a list of SMS object properties.

Skype4Com samples:

CREATE SMS

This command creates an SMS object.

Syntax:

Where target is a valid PSTN number and type can be one of the following:

Refer to

Version

SET SMS BODY

This command sets or changes the text of an existing SMS object.

Syntax:

Where <id> is an SMS object ID returned from CREATE SMS command and text is the SMS message text.

Refer to

Version

ALTER SMS SEND

This command sends a composed SMS message to the server.

Syntax:

Where <id> is SMS object ID.

Refer to

Version

SET SMS SEEN

This command sets an SMS object as SEEN.

Syntax:

Where <id> is an SMS object ID.

Refer to

Version

Creating an SMS message

To create, compose and send an SMS message, use CREATE SMS, SET SMS and ALTER SMS commands.

Refer to SMS object section for a list of SMS object properties.

Example:

// ----------------------------------------------------------------
// Here we create a new SMS object instance 
-> CREATE SMS OUTGOING +0123456789
<- SMS 821 STATUS COMPOSING
<- SMS 821 PRICE 0
<- SMS 821 TIMESTAMP 0
<- SMS 821 PRICE_PRECISION 3
<- SMS 821 PRICE_CURRENCY EUR
<- SMS 821 STATUS COMPOSING
<- SMS 821 TARGET_NUMBERS +0123456789
<- SMS 821 PRICE -1
<- SMS 821 TARGET_STATUSES +0123456789=TARGET_ANALYZING
<- SMS 821 TARGET_STATUSES +0123456789=TARGET_ACCEPTABLE
<- SMS 821 PRICE 78
// ----------------------------------------------------------------
// This is how to set the message text property
// Note that you will get two identical lines in response
-> SET SMS 821 BODY "test 123 test 223 test 333"
<- SMS 821 BODY "test 123 test 223 test 333"
<- SMS 821 BODY "test 123 test 223 test 333"
// ----------------------------------------------------------------
// Now lets try to send the message
-> ALTER SMS 821 SEND
<- ALTER SMS 821 SEND
<- SMS 821 STATUS SENDING_TO_SERVER
<- SMS 821 TIMESTAMP 1174058095
<- SMS 821 TARGET_STATUSES +0123456789=TARGET_ACCEPTABLE
<- SMS 821 TARGET_STATUSES +0123456789=TARGET_DELIVERY_FAILED
<- SMS 821 FAILUREREASON INSUFFICIENT_FUNDS
<- SMS 821 STATUS FAILED
<- SMS 821 IS_FAILED_UNSEEN TRUE
// ----------------------------------------------------------------
// As sending the message failed (not enough Skype credit), 
// lets delete the message 
-> DELETE SMS 821
<- DELETE SMS 821

Version

SMS message text in chunks

The SMS object has special properties to break large messages into smaller chunks. Maximum size of a chunk is 160 characters. Note that some unusually clever-looking symbols ("", "", etc.) translate into more than one characters in stored text.

To query how many chunks is contained in an SMS message:

-> GET SMS <id> CHUNKING
<- SMS <id> CHUNKING <no. of chunks> <no. of characters in the final chunk>

To access text within a chunk:

-> GET SMS <id> CHUNK <#>
<- SMS <id> CHUNK <#> <text>

Searching SMS messages

Following two commands are available to search for SMS objects:

Version

Deleting SMS messages

All SMS messages that you have created in Skype remain stored in the system until they get deleted. To delete an SMS message, use DELETE SMS COMMAND:

Syntax:

Example:

-> SEARCH SMSS
<- SMSS 233
-> DELETE SMS 233
<- DELETE SMS 233

The list of deletable SMS messages can be queried with SEARCH SMSS command. Refer to SMS object section for a list of SMS object properties.

Version

SET SMS REPLY_TO_NUMBER

This command sets the reply-to property of an SMS object.

Syntax:

Version

SET SMS TARGET_NUMBERS

This command changes the destination(s) of an SMS message.

Syntax:

Where <id> is ID of a created SMS object and destination(s) are given as a comma-separated list of valid PSTN numbers.

Example:

//-------------------------------------------------------------------
// Note that at least one target number is mandatory for CREATE SMS
-> CREATE SMS OUTGOING +37259877305
<- SMS 1702 TYPE OUTGOING
<- SMS 1702 STATUS COMPOSING
<- SMS 1702 PRICE 0
<- SMS 1702 TIMESTAMP 0
<- SMS 1702 STATUS COMPOSING
<- SMS 1702 PRICE_PRECISION 3
<- SMS 1702 PRICE_CURRENCY EUR
<- SMS 1702 TARGET_NUMBERS +37259877305
<- SMS 1702 PRICE -1
<- SMS 1702 TARGET_STATUSES +37259877305=TARGET_ANALYZING
<- SMS 1702 TARGET_STATUSES +37259877305=TARGET_ACCEPTABLE
<- SMS 1702 PRICE 78
//-------------------------------------------------------------------
// Now let's add two more target numbers (in addition to original)
-> SET SMS 1702 TARGET_NUMBERS +37259877305, +37259877306, +37259877307
<- SMS 1702 TARGET_NUMBERS +37259877305, +37259877306, +37259877307
<- SMS 1702 TARGET_NUMBERS +37259877305, +37259877306, +37259877307
<- SMS 1702 PRICE -1
<- SMS 1702 TARGET_STATUSES +37259877305=TARGET_ACCEPTABLE, +37259877306=TARGET_ANALYZING, +37259877307=TARGET_ANALYZING
<- SMS 1702 TARGET_STATUSES +37259877305=TARGET_ACCEPTABLE, +37259877306=TARGET_ACCEPTABLE, +37259877307=TARGET_ACCEPTABLE
<- SMS 1702 TARGET_STATUSES +37259877305=TARGET_ACCEPTABLE, +37259877306=TARGET_ACCEPTABLE, +37259877307=TARGET_ACCEPTABLE
<- SMS 1702 PRICE 234

Version

Setting mobile phone number on reply-to field in outgoing SMS messages

An outgoing SMS message from Skype lists the reply-to number as the user's Skype ID. It is possible to change the reply-to number to a mobile phone number by registering the number in Skype client. Skype validates this number, and it then becomes the reply-to number for outgoing SMS messages. To register a mobile phone number in Skype client:

  1. Create and send an SMS message of type CONFIRMATION_CODE_REQUEST to your own mobile number.

  2. Skype sends an SMS message to your mobile, with message body containing a confirmation code.
  3. Create another SMS of type CONFIRMATION_CODE_SUBMIT to the same number and include the confirmation code in message body.

  4. Your mobile phone number is then validated as a reply-to number for outgoing SMS messages.

To create confirmation request and submit messages, use CONFIRMATION_CODE_REQUEST and CONFIRMATION_CODE_SUBMIT respectively as 2nd parameter in CREATE SMS command.

To retrieve the mobile number you have set as reply-to for outgoing SMS messages:

-> GET PROFILE SMS_VALIDATED_NUMBERS
<- PROFILE SMS_VALIDATED_NUMBERS <+ number >[, <+number>..]

Call cost information

Cost information is stored in RATE, RATE_CURRENCY and RATE_PRECISION properties of a CALL object.

Example of how to retrieve call cost data:

//------------------------------------------------
// First let's find a suitable call ID
-> SEARCH CALLS
<- CALLS 100, 101, 102
//------------------------------------------------
// Here we will retrieve cost data from call 100 
-> GET CALL 100 RATE 
<- CALL 100 RATE 1234
-> GET CALL 100 RATE_PRECISION 
<- CALL 100 RATE_PRECISION 2
-> GET CALL 100 RATE_CURRENCY 
<- CALL 100 RATE_CURRENCY EUR
//------------------------------------------------
// To determine the actual cost of the call,
// you will also need to know the call duration
-> GET CALL 100 DURATION
<- CALL 100 DURATION 60

Note that call DURATION is expressed in seconds while call RATE is expressed as cost per minute.

Skype4Com example:

Version

Making and managing video calls

This section contains the commands for making and managing video calls.

Skype4Com sample:

GET VIDEO_IN

The GET VIDEO_IN command retrieves the name of the video device to use for a call. If no value is returned, Skype sets the default value.

Syntax

Note

-> SET VIDEO_IN <devicename>

SET VIDEO_IN

This command enables you to change webcam settings.

Syntax:

If the <device_name> parameter is empty, webcam is set to "Default video device".

If device passed in <device_name> parameter cannot be found, following error is reported:

GET CALL VIDEO_STATUS

To check if a Skype client is video-enabled:

Syntax

Response

Parameters

Version

ALTER CALL VIDEO_SEND

Used to start or stop sending video during a call.

Syntax to start video:

Syntax to stop video:

Parameters:

Version

ALTER CALL VIDEO_RECEIVE

Used to start or stop receiving video during a call.

Syntax to start receiving video:

Syntax to stop receiving video:

Parameters:

Version

GET CALL VIDEO_SEND_STATUS

To check video send status:

Syntax

Response

Parameters

Version

GET CALL VIDEO_RECEIVE_STATUS

To check video receive status:

Syntax

Response

Parameters

Version

IS_VIDEO_CAPABLE

To check if a user is video-capable:

Syntax

Response

Version

OPEN VIDEOTEST

To open the Video Test window to test if video is working:

Syntax

Response

Version

OPEN OPTIONS VIDEO

To open the Video Options window:

Syntax:

Version

Leaving and manipulating voicemails

This section contains the commands to leave and manipulate voicemails.

Skype4Com samples:

VOICEMAIL

The VOICEMAIL command starts to deprecate in protocol 6 and is replaced by the CALLVOICEMAIL command.

CALLVOICEMAIL

Refer to VOICEMAIL object.

To leave a voicemail:

Syntax

When you start an outgoing voicemail, a call object and two voicemail objects are created. First one of the voicemail objects is incoming greeting message. Second voicemail object is the outgoing message.

Example

//------------------------------------------------------------------------------
// Starting voicemail call to testuser, the system will report back call 
// ID and status. The object IDs in this example are call (524), greeting (525) 
// and voicemail message (526)
-> CALLVOICEMAIL testuser
<- CALL 524 STATUS ROUTING
//------------------------------------------------------------------------------
// Then the system reports back the incoming greeting voicemail properties
<- VOICEMAIL 525 TYPE CUSTOM_GREETING
<- VOICEMAIL 525 PARTNER_HANDLE testuser
<- VOICEMAIL 525 PARTNER_DISPNAME Test User
<- VOICEMAIL 525 ALLOWED_DURATION 60
<- VOICEMAIL 525 SUBJECT 
<- VOICEMAIL 525 TIMESTAMP 1174384114
<- VOICEMAIL 525 DURATION 0
<- VOICEMAIL 525 STATUS NOTDOWNLOADED
<- VOICEMAIL 525 STATUS DOWNLOADING
//------------------------------------------------------------------------------
// Then the system reports back the outgoing voicemail properties
<- VOICEMAIL 526 TYPE OUTGOING
<- VOICEMAIL 526 PARTNER_HANDLE testuser
<- VOICEMAIL 526 PARTNER_DISPNAME Test User
<- VOICEMAIL 526 ALLOWED_DURATION 600
<- VOICEMAIL 526 SUBJECT 
<- VOICEMAIL 526 TIMESTAMP 1174384114
<- VOICEMAIL 526 DURATION 0
<- VOICEMAIL 526 STATUS BLANK
//------------------------------------------------------------------------------
// The status of the call object is set to INPROGRESS, incoming greeting 
// is being downloaded
<- CALL 524 STATUS INPROGRESS
<- CALL 524 VM_ALLOWED_DURATION 600
<- CALL 524 VM_DURATION 0
<- VOICEMAIL 525 STATUS PLAYING
<- VOICEMAIL 525 STATUS BUFFERING
<- CALL 524 STATUS INPROGRESS
<- VOICEMAIL 525 DURATION 8
//------------------------------------------------------------------------------
// Incoming greeting has been received and is played
<- VOICEMAIL 525 TIMESTAMP 1125749735
<- VOICEMAIL 525 STATUS PLAYING
<- VOICEMAIL 525 STATUS PLAYED
//------------------------------------------------------------------------------
// System starts recording the outgoing voicemail message
<- VOICEMAIL 526 TIMESTAMP 1174384125
<- VOICEMAIL 526 STATUS RECORDING
//------------------------------------------------------------------------------
// Heartbeat notifications continue at 1 second interval throughout recording
<- CALL 524 STATUS INPROGRESS
<- VOICEMAIL 526 DURATION 6
<- CALL 524 VM_DURATION 6
<- VOICEMAIL 526 DURATION 7
<- CALL 524 VM_DURATION 7
<- VOICEMAIL 526 DURATION 8
<- CALL 524 VM_DURATION 8
<- VOICEMAIL 526 DURATION 9
<- CALL 524 VM_DURATION 9
//------------------------------------------------------------------------------
// Recording stopped, uploading the recorded message
<- VOICEMAIL 526 STATUS UPLOADING
<- CALL 524 STATUS INPROGRESS
<- VOICEMAIL 526 STATUS UPLOADED
<- CALL 524 STATUS FINISHED
<- CALL 524 VAA_INPUT_STATUS FALSE

Version

Notes

OPEN VOICEMAIL

To open and start playing a voicemail:

Syntax

Response

Parameters

Errors

Notes

To get hold of voicemail IDs, refer to SEARCH VOICEMAILS and SEARCH MISSEDVOICEMAILS commands.

ALTER VOICEMAIL

The ALTER VOICEMAIL command allows finer control over the VOICEMAIL object.

Syntax:

Parameters: action - possible values:

In version 3.5.0.202 following ALTER commands were added to enable redirection of voice streams for voicemails:

Notes

Managing call forwarding

This section contains the commands to manage call forwarding.

Skype4Com example:

GET PROFILE CALL_APPLY_CF

Use the GET PROFILE CALL_APPLY_CF command to query if call forwarding is enabled for a call.

Syntax

Response

Version

SET PROFILE CALL_APPLY_CF

Use the SET PROFILE CALL_APPLY_CF to enable or disable call forwarding.

Syntax

Response

Version

GET PROFILE CALL_FORWARD_RULES

Use the GET PROFILE CALL_FORWARD_RULES to query the rules set for call forwarding. Note that the call forwarding process starts after number of seconds given in CALL_NOANSWER_TIMEOUT property of the PROFILE object.

Syntax:

Parameters:

Note

Version

SET PROFILE CALL_FORWARD_RULES

Use the SET PROFILE CALL_FORWARD_RULES to set the rules for call forwarding. Note that the call forwarding process starts after number of seconds given in CALL_NOANSWER_TIMEOUT property of the PROFILE object.

Syntax:

Parameters:

Version

GET PROFILE CALL_NOANSWER_TIMEOUT

Use the GET PROFILE CALL_NOANSWER_TIMEOUT to query the amount of seconds a forwarded call will ring before timing out.

Syntax

Response

Note

Version

SET PROFILE CALL_NOANSWER_TIMEOUT

Use the SET PROFILE CALL_NOANSWER_TIMEOUT to change the amount of seconds a forwarded call will ring before timing out.

Syntax

Response

Note

Version

GET PROFILE CALL_SEND_TO_VM

Use the GET PROFILE CALL_SEND_TO_VM to query if voicemail is enabled for forwarded calls.

Syntax

Response

Version

SET PROFILE CALL_SEND_TO_VM

Use the SET PROFILE CALL_SEND_TO_VM to enable (or disable) voicemail for forwarded calls.

Syntax

Response

Version

Creating chats and sending messages

This section contains the commands for creating chats and sending messages.

Skype4Com samples:

CHAT CREATE

This command creates a chat object.

Syntax

Response

Version

Parameters

Notes

Example:

//------------------------------------------------------------------
// Creating chat with one target
-> CHAT CREATE anappo5
<- CHAT #anappo/$anappo5;2e4e763a2fc121ed STATUS DIALOG
-> OPEN CHAT #anappo/$anappo5;2e4e763a2fc121ed
<- OPEN CHAT #anappo/$anappo5;2e4e763a2fc121ed
//------------------------------------------------------------------
// Creating chat with no target
-> CHAT CREATE
<- CHAT #anappo/$72cb4c9d0871e6dc NAME #anappo/$72cb4c9d0871e6dc
<- CHAT #anappo/$72cb4c9d0871e6dc ACTIVITY_TIMESTAMP 0
<- CHAT #anappo/$72cb4c9d0871e6dc STATUS MULTI_SUBSCRIBED
<- CHAT #anappo/$72cb4c9d0871e6dc TYPE MULTICHAT
<- CHAT #anappo/$72cb4c9d0871e6dc STATUS UNSUBSCRIBED
<- CHATMEMBER 570 ROLE USER
<- CHAT #anappo/$72cb4c9d0871e6dc MYROLE USER
<- CHAT #anappo/$72cb4c9d0871e6dc MEMBERS anappo
<- CHAT #anappo/$72cb4c9d0871e6dc ACTIVEMEMBERS anappo
<- CHAT #anappo/$72cb4c9d0871e6dc MYSTATUS SUBSCRIBED
<- CHAT #anappo/$72cb4c9d0871e6dc STATUS MULTI_SUBSCRIBED
<- CHAT #anappo/$72cb4c9d0871e6dc TIMESTAMP 1175089677
-> OPEN CHAT #anappo/$72cb4c9d0871e6dc
<- OPEN CHAT #anappo/$72cb4c9d0871e6dc
//------------------------------------------------------------------
// Creating chat with two targets
-> CHAT CREATE anappo3, anappo5
<- CHAT #anappo/$8c9e3bb94643d668 NAME #anappo/$8c9e3bb94643d668
<- CHAT #anappo/$8c9e3bb94643d668 ACTIVITY_TIMESTAMP 0
<- CHAT #anappo/$8c9e3bb94643d668 STATUS MULTI_SUBSCRIBED
<- CHAT #anappo/$8c9e3bb94643d668 TYPE MULTICHAT
<- CHAT #anappo/$8c9e3bb94643d668 STATUS UNSUBSCRIBED
<- CHATMEMBER 585 ROLE USER
<- CHAT #anappo/$8c9e3bb94643d668 MYROLE USER
<- CHAT #anappo/$8c9e3bb94643d668 MEMBERS anappo
<- CHAT #anappo/$8c9e3bb94643d668 ACTIVEMEMBERS anappo
<- CHAT #anappo/$8c9e3bb94643d668 MYSTATUS SUBSCRIBED
<- CHAT #anappo/$8c9e3bb94643d668 STATUS MULTI_SUBSCRIBED
<- CHAT #anappo/$8c9e3bb94643d668 TIMESTAMP 1175089858
<- CHAT #anappo/$8c9e3bb94643d668 MEMBERS anappo anappo3 anappo5
<- CHAT #anappo/$8c9e3bb94643d668 FRIENDLYNAME anappo3, anappo5
-> OPEN CHAT #anappo/$8c9e3bb94643d668
<- OPEN CHAT #anappo/$8c9e3bb94643d668

Error codes:

CHATMESSAGE

Syntax

Response

Parameters

Version

Errors

ALTER CHAT SETTOPIC

Changes chat topic.

Syntax:

See also ALTER CHAT SETTOPICXML command.

Version

Errors

ALTER CHAT SETTOPICXML

Enables you to set a chat topic that contains XML formatting elements. Note that the standard chat topic will be updated as well, stripped of XML tags.

Syntax:

Example (without feedback notifications):

-> ALTER CHAT #test/$b9275b3b334341f2 SETTOPICXML <BLINK>topic is blinking</BLINK>
-> ALTER CHAT #test/$b9275b3b334341f2 SETTOPICXML <B>topic in bold</B>
-> ALTER CHAT #test/$b9275b3b334341f2 SETTOPICXML <I>topic in italic</I>
-> ALTER CHAT #test/$b9275b3b334341f2 SETTOPICXML <U>topic with underline</U>
-> ALTER CHAT #test/$b9275b3b334341f2 SETTOPICXML Smiley: <SS type="smile">:-)</SS>
-> ALTER CHAT #test/$b9275b3b334341f2 SETTOPICXML <FONT COLOR="#FF0010">topic in red</FONT>

Version

ALTER CHAT ADDMEMBERS

This command adds new members to a chat.

Syntax:

Version

Errors

ALTER CHAT LEAVE

This command causes user to leave the chat.

Syntax:

Errors

ALTER CHAT BOOKMARKED

Adds chat to the list of bookmarked chats.

Syntax to bookmark a chat:

Syntax to remove a chat from list of bookmarked chats:

Refer to following SEARCH commands on how to obtain a chat ID
SEARCH CHATS
SEARCH ACTIVECHATS
SEARCH MISSEDCHATS
SEARCH RECENTCHATS
SEARCH BOOKMARKEDCHATS

Version

GET CHAT CHATMESSAGES

Returns IDs of chatmessage objects in a specified chat.

Syntax:

Version:

Errors

GET CHAT RECENTCHATMESSAGES

Syntax

Response

Version

Errors

SET CHATMESSAGE SEEN

Syntax

Response

Parameters

Version

Example

Errors

SET CHATMESSAGE BODY

This command enables you to change the text of a chat message.

Syntax:

Weather a chat message text is changeable can be determined by checking the IS_EDITABLE property of a CHATMESSAGE object.

The rules for allowing editing are:

Refer to CHAT ROLES section for the list of chat roles.

Example:

//----------------------------------------------------------------
// First lets send out a chat message
-> CHATMESSAGE #anappo/$a1044019f5dc8c48 Test chat message
<- CHATMESSAGE 864 STATUS SENDING
<- CHAT #anappo/$a1044019f5dc8c48 ACTIVITY_TIMESTAMP 1175093328
<- CHATMESSAGE 864 STATUS SENT
//----------------------------------------------------------------
// Then lets see if we can edit it..
-> GET CHATMESSAGE 864 IS_EDITABLE
<- CHATMESSAGE 864 IS_EDITABLE TRUE
//----------------------------------------------------------------
// Then see if we can change the message text
-> SET CHATMESSAGE 864 BODY Test message after being edited
<- CHATMESSAGE 864 BODY Test message after being edited
<- CHATMESSAGE 864 EDITED_TIMESTAMP 1175093385
<- CHATMESSAGE 864 EDITED_BY anappo
<- CHATMESSAGE 864 BODY Test message after being edited

Version

SET MESSAGE SEEN - obsolete

Mark message as seen by the user and remove it from the missed messages list. This command is obsolete and has been replaced by the SET CHATMESSAGE SEEN command.

Syntax

Response

Properties

Version

Example

Errors

MESSAGE - obsolete

The MESSAGE command is obsolete and has been replaced by the CHATMESSAGE command.

Syntax

Response

Parameters

Version

Errors

Notes

Example

GET CHAT MEMBEROBJECTS

This command provides list of CHATMEMBER object IDs that represent chat participants.

Syntax:

Refer to

Example:

-> GET CHAT #test/$test3;5f7cdbdd32dc731c MEMBEROBJECTS
<- CHAT #test/$3;5f7cdbdd32dc731c MEMBEROBJECTS 453, 454, 1465

Version

GET CHATMEMBER

This command provides read access to objects representing chat participants.

Syntax:

Refer to

Example:

-> GET CHAT #test/$test3;5f7cdbdd32dc731c MEMBEROBJECTS
<- CHAT #test/$3;5f7cdbdd32dc731c MEMBEROBJECTS 453, 454, 1465
-> GET CHATMEMBER 1465 IDENTITY
<- CHATMEMBER 1465 IDENTITY test_p
-> GET CHATMEMBER 1465 CHATNAME
<- CHATMEMBER 1465 CHATNAME #test/$test3;5f7cdbdd32dc731c
-> GET CHATMEMBER 1465 ROLE
<- CHATMEMBER 1465 ROLE USER
-> GET CHATMEMBER 1465 IS_ACTIVE
<- CHATMEMBER 1465 IS_ACTIVE TRUE

Version

ALTER CHAT JOIN

This command enables you to re-join a Public chat that you have previously left. This command assumes a CHAT object is already present in the local system.

Note that this command does work with non-public multichats.

Syntax:

Example:

//----------------------------------------------------------------------------
// Leaving public chat #anappo/$a1044019f5dc8c48
-> ALTER CHAT #anappo/$a1044019f5dc8c48 LEAVE
<- ALTER CHAT LEAVE
<- MESSAGE 392 STATUS SENDING
<- CHAT #anappo/$a1044019f5dc8c48 MEMBERS anappo2 anappo3 
<- CHAT #anappo/$a1044019f5dc8c48 ACTIVEMEMBERS anappo2 anappo3 
<- CHAT #anappo/$a1044019f5dc8c48 MYSTATUS UNSUBSCRIBED
<- CHAT #anappo/$a1044019f5dc8c48 STATUS UNSUBSCRIBED
<- CHAT #anappo/$a1044019f5dc8c48 BOOKMARKED FALSE
<- MESSAGE 392 STATUS SENT
//----------------------------------------------------------------------------
// Re-joining the chat
-> ALTER CHAT #anappo/$a1044019f5dc8c48 JOIN
<- CHAT #anappo/$a1044019f5dc8c48 MYSTATUS CONNECTING
<- CHAT #anappo/$a1044019f5dc8c48 STATUS UNSUBSCRIBED
<- ALTER CHAT JOIN
<- CHAT #anappo/$a1044019f5dc8c48 MEMBERS anappo2 anappo3
<- CHAT #anappo/$a1044019f5dc8c48 ACTIVEMEMBERS anappo2 anappo3
<- CHAT #anappo/$a1044019f5dc8c48 BOOKMARKED TRUE
<- CHAT #anappo/$a1044019f5dc8c48 MEMBERS anappo2 anappo3 
<- CHAT #anappo/$a1044019f5dc8c48 ACTIVEMEMBERS anappo2 anappo3 
<- CHAT #anappo/$a1044019f5dc8c48 MYSTATUS WAITING_REMOTE_ACCEPT
<- CHAT #anappo/$a1044019f5dc8c48 STATUS UNSUBSCRIBED
<- CHATMEMBER 75 IS_ACTIVE FALSE
<- CHATMEMBER 396 IS_ACTIVE FALSE
<- CHAT #anappo/$a1044019f5dc8c48 MEMBERS anappo anappo2 anappo3 
<- CHAT #anappo/$a1044019f5dc8c48 ACTIVEMEMBERS anappo anappo3
<- CHAT #anappo/$a1044019f5dc8c48 MYSTATUS SUBSCRIBED
<- CHAT #anappo/$a1044019f5dc8c48 STATUS MULTI_SUBSCRIBED
<- CHATMEMBER 75 IS_ACTIVE TRUE
<- CHATMEMBER 396 IS_ACTIVE TRUE
<- CHAT #anappo/$a1044019f5dc8c48 ACTIVEMEMBERS anappo anappo2 anappo3 
<- MESSAGE 398 STATUS READ

Errors

Version

ALTER CHAT CLEARRECENTMESSAGES

This command clears recent chat messages in a given chat. Note that this command does not actually update user interface when a Skype client chat window for that chat is open. To see the effect, close the chat window and re-open it.

Syntax:

Example:

-> ALTER CHAT #anappo/$test_p;297fcefb07ffc4b2 CLEARRECENTMESSAGES
<- ALTER CHAT CLEARRECENTMESSAGES

Version

ALTER CHAT SETALERTSTRING

This command enables you to set up a chat alert string. Normally, a small notification window will pop up at system tray when someone posts a message in a chat while the chat window is closed. When an alert string is set, the notification window will only appear when the message contains value set in SETALERTSTRING property.

Note that when setting this value from API, first symbol of the alert string is assumed to be "=" and gets stripped. To prevent first symbol of your alert string from being stripped, add "=" in front of it.

Syntax:

Example:

-> ALTER CHAT #anappo/$a1044019f5dc8c48 SETALERTSTRING "=test"
<- ALTER CHAT SETALERTSTRING

Version

ALTER CHAT ACCEPTADD

This command is used for accepting invitations to shared contact groups. In other chat contexts, invitations are either accepted or declined automatically, depending on user's privacy settings.

Syntax:

Version

ALTER CHAT DISBAND

This command removes all chat participants from the chat and closes it.

Syntax:

Example:

-> ALTER CHAT #anappo/$a1044019f5dc8c48 DISBAND
<- ALTER CHAT DISBAND
<- CHAT #anappo/$a1044019f5dc8c48 MYSTATUS CHAT_DISBANDED
<- CHAT #anappo/$a1044019f5dc8c48 STATUS UNSUBSCRIBED

Version

Public Chats

Public Chats were introduced in API version 3.0 Public Chats are an extension of existing multichat functionality.

From API point of view, public chats differ from multichats in that:

Public chats have a user hierarchy with different privilege levels and a set of tools for chat administration (similar to administration of IRC channels). These administration tools are actually available for standard multichats as well (API commands such as KICK work in multichats, altho the Skype user interface for setting privileges is not available for multichats).

More or less everything listed under Creating chats and sending messages section is also applicable to public chats. The list of sections below is specific to public chats.

CHAT ROLES and PRIVILEGES

Refer to

ALTER CHAT SETPASSWORD

This command enables you to set password protection to a chat channel.

Syntax:

Example:

-> ALTER CHAT #anappo/$a1044019f5dc8c48 SETPASSWORD test2 password is test2
<- ALTER CHAT SETPASSWORD
<- CHAT #anappo/$a1044019f5dc8c48 PASSWORDHINT password is test2

Note that the password must be one word - without any whitespaces in it. All subsequent words in command parameters will be considered as password hint. Password hint will be displayed to users when they join the chat.

Version

ALTER CHAT ENTERPASSWORD

This command enables you to enter passwords from within your own code, when joining password-protected chat channels.

Syntax:

Example:

//---------------------------------------------------------------------------
// While trying to connect to a public password-protected channel, 
// we get following messages:
<- CHAT #test_l/$4ea116d4c216baef PASSWORDHINT "password is test"
<- CHAT #test_l/$4ea116d4c216baef MYSTATUS PASSWORD_REQUIRED
<- CHAT #test_l/$4ea116d4c216baef STATUS UNSUBSCRIBED
//---------------------------------------------------------------------------
// Lets supply a wrong password first and see what happens..
-> ALTER CHAT #test_l/$4ea116d4c216baef ENTERPASSWORD test2
<- ALTER CHAT ENTERPASSWORD
<- CHAT #test_l/$4ea116d4c216baef MYSTATUS CONNECTING
<- CHAT #test_l/$4ea116d4c216baef STATUS UNSUBSCRIBED
<- CHAT #test_l/$4ea116d4c216baef MYSTATUS PASSWORD_REQUIRED
<- CHAT #test_l/$4ea116d4c216baef STATUS UNSUBSCRIBED
//---------------------------------------------------------------------------
// Now lets supply correct password:
-> ALTER CHAT #test_l/$4ea116d4c216baef ENTERPASSWORD test
<- ALTER CHAT ENTERPASSWORD
<- CHAT #test_l/$4ea116d4c216baef MYSTATUS CONNECTING
<- CHAT #test_l/$4ea116d4c216baef STATUS UNSUBSCRIBED
<- CHAT #test_l/$4ea116d4c216baef MYSTATUS WAITING_REMOTE_ACCEPT
<- CHAT #test_l/$4ea116d4c216baef STATUS UNSUBSCRIBED
<- CHAT #test_l/$4ea116d4c216baef MYROLE USER
<- CHAT #test_l/$4ea116d4c216baef MEMBERS anappo test_l
<- CHAT #test_l/$4ea116d4c216baef ACTIVEMEMBERS anappo test_l
<- CHAT #test_l/$4ea116d4c216baef TIMESTAMP 1174906897
<- CHAT #test_l/$4ea116d4c216baef ADDER test_l
<- CHAT #test_l/$4ea116d4c216baef GUIDELINES test guidelines
<- MESSAGE 557 STATUS RECEIVED
<- CHAT #test_l/$4ea116d4c216baef TOPIC TestingPublicChats2
<- CHAT #test_l/$4ea116d4c216baef OPTIONS 1
<- CHATMEMBER 556 ROLE LISTENER
<- CHAT #test_l/$4ea116d4c216baef MYROLE LISTENER
<- CHATMEMBER 547 ROLE CREATOR
<- CHAT #test_l/$4ea116d4c216baef MYSTATUS SUBSCRIBED
<- CHAT #test_l/$4ea116d4c216baef STATUS MULTI_SUBSCRIBED
<- CHAT #test_l/$4ea116d4c216baef FRIENDLYNAME TestingPublicChats2
<- MESSAGE 558 STATUS RECEIVED

Version

ALTER CHAT SETOPTIONS

This command enables you to change chat options.

Syntax:

Chat options bits:

Example:

//-----------------------------------------------------------------------------
// Setting flags: JOINING_ENABLED, JOINERS_BECOME_LISTENERS, HISTORY_DISCLOSED
// Adding up the bits: 1 + 4 + 8 = 13
-> ALTER CHAT #anappo/$a1044019f5dc8c48 SETOPTIONS 13
<- MESSAGE 678 STATUS SENDING
<- ALTER CHAT SETOPTIONS
<- CHAT #anappo/$a1044019f5dc8c48 OPTIONS 13
<- MESSAGE 678 STATUS SENT

Version

ALTER CHATMEMBER SETROLETO

This command enables chat administrators (chat CREATORS AND MASTERS) to set privilege levels (roles) for other chat members.

Syntax:

Refer to

Example:

-> GET CHAT #anappo/$anappo3;5f7cdbdd32dc731c MEMBEROBJECTS
<- CHAT #anappo/$anappo3;5f7cdbdd32dc731c MEMBEROBJECTS 1846, 2227, 2495
-> GET CHATMEMBER 2495 IDENTITY
<- CHATMEMBER 2495 IDENTITY anappo2
-> GET CHATMEMBER 2495 ROLE
<- CHATMEMBER 2495 ROLE HELPER
-> ALTER CHATMEMBER 2495 SETROLETO USER
<- ALTER CHATMEMBER SETROLETO
<- MESSAGE 2620 STATUS SENDING
<- CHATMEMBER 2495 ROLE USER

Version

ALTER CHATMEMBER CANSETROLETO

This command can be used to determine weather current user is able to change the privilege level of another chat member.

Syntax:

Note that unlike other ALTER commands, this one doesn't actually change object properties.

Refer to

Example:

-> GET CHAT #test/$test3;5f7cdbdd32dc731c MEMBEROBJECTS
<- CHAT #test/$test3;5f7cdbdd32dc731c MEMBEROBJECTS 1846, 2227, 2495
-> GET CHATMEMBER 2495 IDENTITY
<- CHATMEMBER 2495 IDENTITY testuser
-> ALTER CHATMEMBER 2495 CANSETROLETO HELPER
<- ALTER CHATMEMBER CANSETROLETO TRUE
-> ALTER CHATMEMBER 2495 SETROLETO HELPER
<- ALTER CHATMEMBER SETROLETO
<- MESSAGE 3166 STATUS SENDING
<- CHATMEMBER 2495 ROLE HELPER

Version

ALTER CHAT KICK

With this command, chat member with sufficient privilege level (master or creator) can remove another member from chat.

Note that after being kicked from the channel, the kicked member can re-join the chat. For more permanent removal, see ALTER CHAT KICKBAN command.

Syntax:

Example:

-> ALTER CHAT  #test/$a1044019f5dc8c48 KICK test2
<- ALTER CHAT KICK

Version

ALTER CHAT KICKBAN

With this command, chat member with sufficient privilege level (master or creator) can permanently remove another member from chat. Note that kickban only prevents the user from re-joining the chat. Banned users can be added back to the chat by administrators from within the chat.

Syntax:

Example:

-> ALTER CHAT  #test/$a1044019f5dc8c48 KICKBAN test2
<- ALTER CHAT KICKBAN

Version

ALTER CHAT FINDUSINGBLOB

This command searches for existing CHAT object with given BLOB property value and returns chat ID and status. Refer to CHAT object for more information.

Syntax:

Example:

-> CHAT FINDUSINGBLOB LsgqqqCTpxWYjt9PL1hSvGDOiPhqUuQAHxI7w7Qu7gJ3VZv_q_99ZJO4lF9Dfaw
<- CHAT #anappo2/$d936403094338dbb STATUS MULTI_SUBSCRIBED

Version

ALTER CHAT CREATEUSINGBLOB

This command creates a chat object, based on public chat blob. This enables you to join public chats from within your own code, assuming that you have somehow obtained the chat blob.

Syntax:

Example:

//------------------------------------------------------------------------------
// What we start is a blob of a public chat we parsed out of a 
// public chat URL or, for example, got sent via another chat.
// that blob is: 6aM81Z5mZRyricRDcjkdy5bf3Y6TsCbVvaxNVVCcYSVsQxRGhlAVmTgpYexh
// First we create a CHAT object.
-> CHAT CREATEUSINGBLOB 6aM81Z5mZRyricRDcjkdy5bf3Y6TsCbVvaxNVVCcYSVsQxRGhlAVmTgpYexh
<- CHAT #anappo/$b9275b3b334341f2 NAME #anappo/$b9275b3b334341f2
<- CHAT #anappo/$b9275b3b334341f2 ACTIVITY_TIMESTAMP 0
<- CHAT #anappo/$b9275b3b334341f2 STATUS UNSUBSCRIBED
<- CHAT #anappo/$b9275b3b334341f2 TYPE MULTICHAT
<- CHAT #anappo/$b9275b3b334341f2 MYSTATUS UNSUBSCRIBED
<- CHAT #anappo/$b9275b3b334341f2 STATUS UNSUBSCRIBED
//------------------------------------------------------------------------------
// Now that we have chat object and it's ID, we can join the chat
-> ALTER CHAT #anappo/$b9275b3b334341f2 JOIN
<- CHAT #anappo/$b9275b3b334341f2 MYSTATUS CONNECTING
<- CHAT #anappo/$b9275b3b334341f2 STATUS UNSUBSCRIBED
<- ALTER CHAT JOIN
//------------------------------------------------------------------------------
// Note that this is our privilege level (role) in this chat
<- CHATMEMBER 293 ROLE USER
<- CHAT #anappo/$b9275b3b334341f2 MEMBERS anappo
<- CHAT #anappo/$b9275b3b334341f2 FRIENDLYNAME Avo Nappo
<- CHAT #anappo/$b9275b3b334341f2 ACTIVEMEMBERS anappo
<- CHAT #anappo/$b9275b3b334341f2 ACTIVITY_TIMESTAMP 1175004600
<- CHAT #anappo/$b9275b3b334341f2 BOOKMARKED TRUE
<- CHAT #anappo/$b9275b3b334341f2 MEMBERS anappo anappo4
<- CHAT #anappo/$b9275b3b334341f2 FRIENDLYNAME Avo Nappo, anappo4
<- CHAT #anappo/$b9275b3b334341f2 ACTIVEMEMBERS anappo anappo4
<- CHAT #anappo/$b9275b3b334341f2 MYSTATUS WAITING_REMOTE_ACCEPT
<- CHAT #anappo/$b9275b3b334341f2 STATUS UNSUBSCRIBED
<- CHATMEMBER 294 IS_ACTIVE FALSE
<- CHAT #anappo/$b9275b3b334341f2 MYROLE USER
<- CHAT #anappo/$b9275b3b334341f2 MEMBERS anappo anappo4 test_p
<- MESSAGE 298 STATUS RECEIVED
<- CHAT #anappo/$b9275b3b334341f2 ACTIVEMEMBERS anappo test_p
<- CHAT #anappo/$b9275b3b334341f2 TIMESTAMP 1175003077
<- CHAT #anappo/$b9275b3b334341f2 ADDER anappo
<- CHAT #anappo/$b9275b3b334341f2 TOPIC TestingPublicChat3
<- CHAT #anappo/$b9275b3b334341f2 OPTIONS 1
//------------------------------------------------------------------------------
// Following notification tells us chatmember ID of the chat owner (creator)
<- CHATMEMBER 293 ROLE CREATOR
<- CHAT #anappo/$b9275b3b334341f2 MYSTATUS SUBSCRIBED
<- CHAT #anappo/$b9275b3b334341f2 STATUS MULTI_SUBSCRIBED
<- CHAT #anappo/$b9275b3b334341f2 FRIENDLYNAME TestingPublicChat3
<- MESSAGE 299 STATUS RECEIVED
<- CHATMEMBER 294 IS_ACTIVE TRUE
<- CHAT #anappo/$b9275b3b334341f2 ACTIVEMEMBERS anappo anappo4 test_p
//------------------------------------------------------------------------------
// We can use GET CHATMEMBER 293 IDENTITY to get creator's Skypename
-> GET CHATMEMBER 293 IDENTITY
<- CHATMEMBER 293 IDENTITY anappo
//------------------------------------------------------------------------------
// Opening chat window in UI
-> OPEN CHAT #anappo/$b9275b3b334341f2
<- OPEN CHAT #anappo/$b9275b3b334341f2

Version

ALTER CHAT SETGUIDELINES

This command enables you to set the Guidelines message for public chats. The guideline message is displayed at the top of the chat window.

Syntax:

Example:

-> ALTER CHAT #anappo/$a1044019f5dc8c48 SETGUIDELINES these here are test guidelines
<- MESSAGE 744 STATUS SENDING
<- ALTER CHAT SETGUIDELINES
<- CHAT #anappo/$a1044019f5dc8c48 GUIDELINES these here are test guidelines
<- MESSAGE 744 STATUS SENT

Version

Managing contacts and groups

Users can group contacts, for example, creating separate groups for friends, family, and work. To add a user to a group, the user must be in the contact list. Contacts can be in multiple groups at the same time. Refer to the GROUP object for a description of the object properties.

This section contains commands used for grouping the contacts.

Skype4Com samples:

GET GROUP USERS

The GET GROUP USERS command queries the members of a group.

Syntax

Response

Refer to SEARCH GROUPS on how to get the group ID list.

Version

GET GROUP VISIBLE

The GET GROUP VISIBLE command queries if a group is visible to the user.

Syntax

Response

Refer to SEARCH GROUPS on how to get the group ID list.

Version

GET GROUP EXPANDED

The GET GROUP EXPANDED command queries whether a group is expanded in the Skype window.

Syntax

Response

Refer to SEARCH GROUPS on how to get the group ID list.

Version

GET GROUP DISPLAYNAME

The GET GROUP DISPLAYNAME gets the displayname for a group.

Syntax

Response

Refer to SEARCH GROUPS on how to get the group ID list.

Version

SET GROUP DISPLAYNAME

The SET GROUP DISPLAYNAME command changes the displayname for a group.

Syntax

Response

Refer to SEARCH GROUPS on how to get the group ID list.

Version

GET GROUP TYPE

The GET GROUP TYPE command queries the group type.

Syntax

Response


Refer to the SEARCH GROUPS command on how to get the group ID list.
Refer to the GROUP object for a list and description of group types.

Version

CREATE GROUP

The CREATE GROUP command creates a contact group, for example a group named Family.

Syntax

Response

The command triggers a number of GROUP properties events:

The command triggers the following notification:

Version

DELETE GROUP

The DELETE GROUP removes a contact group.

Syntax

Response

Refer to SEARCH GROUPS on how to get the group ID list.

The command triggers the following notifications:

ALTER GROUP ADDUSER

The ALTER GROUP ADDUSER command adds contacts to a group.

Syntax

Response

Parameters

This command triggers the following notification:

Note:

Refer to SEARCH GROUPS on how to get the group ID list.

Version

ALTER GROUP REMOVEUSER

The ALTER GROUP REMOVEUSER command removes contacts from a group.

Syntax:

Parameters:

Example:

-> ALTER GROUP 49 REMOVEUSER anappo5
// notification - new size of group 49 is 6 contacts
<- GROUP 49 NROFUSERS 6
//  Removed user was placed in system group "Ungrouped" (group 52 in this case)
<- GROUP 52 NROFUSERS 1
<- ALTER GROUP 49 REMOVEUSER anappo5

Refer to SEARCH GROUPS on how to get the group ID list.

Version:

Sharing contact groups

Shared contact groups differ from Send Contacts functionality in that adding users to shared groups will automatically cause cross-authorization attempts between users.

To change an existing contact group into shared contact group:
-> ALTER GROUP <id> SHARE [<text>]

Where <id> is the contact group ID and text is invitation message displayed to the invited user.

To accept invitation to a shared group:

To decline invitation to a shared group:

Refer to SEARCH GROUPS on how to get the list of group IDs.

Version

SET USER DISPLAYNAME

The SET USER DISPLAYNAME command changes the display name of a contact.

By default this USER object property is empty. If a value is assigned to this property with SET <skypename> DISPLAYNAME <value> then that value will be displayed in Skype UI instead of user's FULLNAME.

Syntax:

Version

Search commands

The search command requests specific information about objects. If no target is specified, all results for specified objects are returned.

Syntax:

Notes

This section contains the search commands.

Skype4Com sample:

SEARCH FRIENDS

Syntax

Response

Version

Example

SEARCH USERS

Syntax

Parameters

Response

Errors

Notes

Version

Example:

SEARCH CALLS

Syntax

Parameters

Response

Errors

Version

Example

SEARCH ACTIVECALLS

Lists all calls visible on calltabs, including members of conference calls if the user is hosting a conference.

Syntax

Response

Errors

Version

Example

SEARCH MISSEDCALLS

Syntax

Response

Errors

Version

Example

SEARCH SMSS

All SMS messages that you have created in Skype remain stored in the system until they get removed with DELETE SMS <ID> command.

The list of these SMS messages can be queried with SEARCH SMSS command:

Syntax:

Example:

-> SEARCH SMSS
<- SMSS 233

Refer to SMS object section for a list of SMS object properties.

Version

SEARCH MISSEDSMSS

Returns a list of IDs of received but unread SMS objects.

Syntax:

Example:

-> SEARCH SMSS
<- SMSS 233

Refer to SMS object section for a list of SMS object properties.

Version

SEARCH VOICEMAILS

Returns a list of voicemail IDs.

Syntax:

Errors

Version

Example:

SEARCH MISSEDVOICEMAILS

Returns a list of IDs of missed voicemails.

Syntax:

Errors

Version

Example:

SEARCH MESSAGES

Syntax

Parameters

Response

Errors

Version

Notes

Example

SEARCH MISSEDMESSAGES

Syntax

Response

Errors

Version

Notes

Example

SEARCH CHATS

Syntax

Response

Errors

Version

Example

SEARCH ACTIVECHATS

Syntax

Response

Errors

Version

Example

SEARCH MISSEDCHATS

Syntax

Response

Errors

Version

Example

SEARCH RECENTCHATS

Syntax

Response

Errors

Version

Example

SEARCH BOOKMARKEDCHATS

Syntax

Response

Errors

Version

Example

SEARCH CHATMESSAGES

Syntax

Parameters

Response

Errors

Version

Example

SEARCH MISSEDCHATMESSAGES

Syntax

Response

Errors

Version

Example

SEARCH USERSWAITINGMYAUTHORIZATION

List of users who are waiting for contact authorization.

Syntax:

Errors

Version

Example:

SEARCH GROUPS

The SEARCH GROUPS command returns comma-separated list of IDs of user's contact groups.

Syntax:

Example:

//----------------------------------------------------
// Getting a list of custom (user-made) groups
-> SEARCH GROUPS CUSTOM
<- GROUPS 3238, 3239, 3240, 3241, 3242, 3372
//----------------------------------------------------
// Getting group names from IDs goes like this:
-> GET GROUP 3240 DISPLAYNAME
<- GROUP 3240 DISPLAYNAME test

Version

Errors

ERROR 561 - SEARCH GROUPS: invalid target
ERROR 562 - Invalid group id
ERROR 563 - Invalid group object
ERROR 564 - Invalid group property given

SEARCH FILETRANSFERS

Returns a list of all file transfer IDs. Refer to FILETRANSFER object for more details.

Syntax

Response

Example:

-> SEARCH FILETRANSFERS
<- FILETRANSFERS 1343, 1314, 1263, 1249, 1241, 982, 544, 1086

Skype4Com sample:

Version

SEARCH ACTIVEFILETRANSFERS

Returns a list of currently active (ones that are nor COMPLETED, CANCELLED or FAILED) file transfer IDs. Refer to FILETRANSFER object for more details.

Note that it is not necessary for remote users to accept the file transfer for it to become listed in ACTIVEFILETRANSFERS for both parties.

Syntax

Response

Example:

-> SEARCH ACTIVEFILETRANSFERS
<- FILETRANSFERS 1411
-> GET FILETRANSFER 1411 STATUS
<- FILETRANSFER 1411 STATUS WAITING_FOR_ACCEPT

Skype4Com sample:

Version

Managing history

These commands are available to clear chat, voicemail, and call history.

Skype4Com example:

CLEAR CHATHISTORY

This command clears chat history. NB! This command does not remove chat entries from the Skype history tab. Instead, it clears chatmessage histories within chats.

Syntax

CLEAR VOICEMAILHISTORY

Clears voicemail entries from the history tab in Skype UI.

Syntax:

Example:

-> CLEAR VOICEMAILHISTORY
<- CLEAR VOICEMAILHISTORY
<- VOICEMAIL 3398 STATUS DELETING

CLEAR CALLHISTORY

Clears call entries from the history tab in Skype UI.

Syntax:

Example:

//-------------------------------------------------------------
// Removes incoming calls from user test2 from Skype history tab
-> CLEAR CALLHISTORY INCOMING test2
<- CLEAR CALLHISTORY INCOMING test2

Controlling Skype user interface

This section lists the commands used to control the Skype user interface.

Skype4Com sample:

FOCUS

The FOCUS brings the Skype window into focus on screen (on top).

Syntax:

See also SET WINDOWSTATE command for more recent and universal version of the same functionality.

Note also that from version 3.6 the FOCUS command produces additional window state notification message in following format:

Version

MINIMIZE

This command minimizes the main Skype window into the system tray.

Syntax:

See also SET WINDOWSTATE command for more recent and universal version of the same functionality.

Note also that from version 3.6 the MINIMIZE command produces additional window state notification message in following format:

Version

Notes

GET WINDOWSTATE

Returns the current state of the Skype main window. The WINDOWSTATE property is read-write, so you can cause the Skype main window to minimize to system tray, maximize, etc. with corresponding SET WINDOWSTATE command.

Syntax:

Example:

-> #1 GET WINDOWSTATE
<- #1 WINDOWSTATE NORMAL
-> #2 SET WINDOWSTATE MINIMIZED
<- #2 WINDOWSTATE MINIMIZED
<- WINDOWSTATE MINIMIZED
-> #3 SET WINDOWSTATE MAXIMIZED
<- #3 WINDOWSTATE MAXIMIZED
<- WINDOWSTATE MAXIMIZED
<- WINDOWSTATE MINIMIZED
-> #4 SET WINDOWSTATE NORMAL
<- #4 WINDOWSTATE NORMAL
<- WINDOWSTATE NORMAL

Note that you also get these WINDOWSTATE notification messages when the window state was altered via UI, i.e. when a user clicks on minimize button in the Skype window, corresponding API notification event is generated.

This is also the reason SET WINDOWSTATE command receives two reply notifications. One is sent as direct reply to the actual API command, the second one is generated by the change in Skype window state.

NB! As seen in the example above, of those two notification events, in response to SET WINDOWSTATE only one comes with command identifier.

Version:

SET WINDOWSTATE

This command causes the Skype Main window to change state. Note that this command only applies to Skype main window. Other Skype windows, such as chat windows or file trasfer windows are unaffected by this command.

Syntax:

Note this command generates two reply notifications. If you are using this command together with command identifiers, then it might be important to know that only the first one of those notifications comes back with command ID (see example below).

Parameters:

Example:

-> #1 GET WINDOWSTATE
<- #1 WINDOWSTATE NORMAL
-> #2 SET WINDOWSTATE MINIMIZED
<- #2 WINDOWSTATE MINIMIZED
<- WINDOWSTATE MINIMIZED
-> #3 SET WINDOWSTATE MAXIMIZED
<- #3 WINDOWSTATE MAXIMIZED
<- WINDOWSTATE MAXIMIZED
<- WINDOWSTATE MINIMIZED
-> #4 SET WINDOWSTATE NORMAL
<- #4 WINDOWSTATE NORMAL
<- WINDOWSTATE NORMAL

Version:

OPEN ADDAFRIEND

This command opens the Add a Contact window. NB! Don't miss that "A" between "ADD" and "FRIEND".

Syntax:

Parameters

Errors

Version

OPEN IM

This command opens the chat window with prefilled message.

Syntax:

Response:

Parameters

Errors

Notes

Example:

-> OPEN IM echo123 this is a prefilled chatmessage
<- CHAT #anappo/$echo123;ebe5311cdd203657 NAME #anappo/$echo123;ebe5311cdd203657
<- CHAT #anappo/$echo123;ebe5311cdd203657 ACTIVITY_TIMESTAMP 0
<- MESSAGE 1259 STATUS SENDING
<- CHAT #anappo/$echo123;ebe5311cdd203657 TYPE DIALOG
<- CHATMEMBER 1257 ROLE USER
<- CHAT #anappo/$echo123;ebe5311cdd203657 MYROLE USER
<- CHAT #anappo/$echo123;ebe5311cdd203657 ACTIVEMEMBERS anappo
<- CHAT #anappo/$echo123;ebe5311cdd203657 MYSTATUS SUBSCRIBED
<- CHAT #anappo/$echo123;ebe5311cdd203657 STATUS DIALOG
<- CHAT #anappo/$echo123;ebe5311cdd203657 TIMESTAMP 1178793154
<- CHAT #anappo/$echo123;ebe5311cdd203657 DIALOG_PARTNER echo123
<- CHAT #anappo/$echo123;ebe5311cdd203657 MEMBERS anappo echo123
<- CHAT #anappo/$echo123;ebe5311cdd203657 FRIENDLYNAME Echo / Sound Test Service
<- OPEN IM echo123 this is a prefilled chatmessage

Version

OPEN CHAT

Opens chat window for existing CHAT object.

Syntax:

Parameters

Errors

Version

Example:

-> OPEN CHAT #test/$echo123;52c2750d8686c10c
<- OPEN CHAT #test/$echo123;52c2750d8686c10c

NB! From version 3.6 and later, opening chat windows (both from API and manually via UI) generate additional chat window open and close notfication messages. Refer to the Chat notifications section for more information.

OPEN FILETRANSFER

Syntax:

Parameters

Errors

Example:

Version

OPEN LIVETAB

Opens Live tab in Skype UI.

Syntax:

Version

OPEN VIDEOTEST

This command opens the Video test window to test if video is working. See OPEN VIDEOTEST command reference for details.

OPEN VOICEMAIL

This command brings the callhistory tab into focus and starts playing a voicemail. See OPEN VOICEMAIL command reference for details.

OPEN PROFILE

This command opens the profile window for the current user.

Syntax:

Errors

Version

OPEN USERINFO

This command opens the profile window for a named Skype contact. Note that when the contact given in the <skypename> parameter does not exist, a profile window is still opened, with an option to add <skypename> to user's contact list. Therefore, you cannot rely on feedback of this command to determine whether <skypename> is present in your contact list.

Syntax:

Parameters

Errors

Version

OPEN CONFERENCE

This command opens the create conference window. Note that this command does not allow parameters.

Syntax:

Errors

Version

OPEN SEARCH

This command opens the Skype user search window. Note that this command does not allow parameters.

Syntax:

Errors

Version

OPEN OPTIONS

This command opens the options configuration window.

Syntax:

Parameters

Note that no error feedback is generated that when an erroneous page name is passed in the <page> parameter - the command will still be echoed back, it simply does nothing.

Errors

Version

OPEN CALLHISTORY

This command opens and sets the focus to the call history tab in the main Skype window.

Syntax:

Errors

Version

OPEN CONTACTS

This command opens and sets the focus to the contacts tab in the main Skype window.

Syntax:

Errors

Version

OPEN DIALPAD

This command opens and sets the focus to the dialpad tab in the main Skype window.

Syntax:

Errors

Version

OPEN SENDCONTACTS

This command opens the send contacts window.

Syntax:

Parameters

Errors

Version

OPEN BLOCKEDUSERS

This command opens the blocked users tab of the Options window.

Syntax:

Errors

Version

OPEN IMPORTCONTACTS

This command opens the import contacts wizard.

Syntax:

Errors

Version

OPEN GETTINGSTARTED

This command opens the getting started wizard.

Syntax:

Errors

Version

OPEN AUTHORIZATION

This command opens the authorization request window for a given user.

Syntax:

Parameters

Errors

Version

BTN_PRESSED and BTN_RELEASED

BTN_PRESSED command does not actually do anything useful. BTN_RELEASED command can be used to simulate keyboard events in Skype UI.

Syntax:

Parameters:
Parameter <key> can have one the of following values:
{0...9 | A...Z | # | * | + | UP | DOWN | YES | NO | SKYPE | PAGEUP | PAGEDOWN}

Note that during an active call, when either Call or Call Phone tabs are focused, BTN_RELEASED command with parameter that is a valid DTMF code, will cause that DTMF code to be sent to the remote party of the call.

Version

GET CONTACTS FOCUSED

This command returns the skypename of a contact currently focused in Skype UI. Note that when more than one contacts are selected in SKype UI, this command only returns only one contact (the last one focused).

Syntax:

Note that the <- CONTACTS FOCUSED response has the same syntax as automatic focus notifications.

Version

GET/SET UI_LANGUAGE

Following two commands are available to change and retrieve current interface language settings:

Example:

-> GET UI_LANGUAGE
<- UI_LANGUAGE en
-> SET UI_LANGUAGE en
<- UI_LANGUAGE en
<- UI_LANGUAGE en
<- UI_LANGUAGE en

Note that the <- UI_LANGUAGE <iso2> notification message is also generated by Skype when language settings get changed manually from the user interface.

NB! When the UI language is set via custom language file, GET UI_LANGUAGE will return "xx" (used to return "en" in versions prior to 3.5).

Version

GET/SET WALLPAPERS

Following two commands are available to change and retrieve current interface wallpapers:

Note that the filename parameter must contain full path as well as file extension of the wallpaper file. The filename parameter must not be enclosed in quotes.

When SET WALLPAPER command is given without a parameter, it will remove current wallpaper.

Supported picture formats are PNG, JPG, and BMP

Example:

//----------------------------------------------------------
// Setting user interface background
-> SET WALLPAPER C:\Stuff\test.bmp
<- WALLPAPER C:\Stuff\test.bmp
<- WALLPAPER C:\Stuff\test.bmp
//----------------------------------------------------------
// Trying non-existing file..
-> SET WALLPAPER c:\Stuff\wrongfile.bmp
<- ERROR 111 SET File not found
//----------------------------------------------------------
// Retrieving background filename
-> GET WALLPAPER C:\Stuff\test.bmp
<- WALLPAPER C:\Stuff\test.bmp
//----------------------------------------------------------
// Clearing background filename
-> SET WALLPAPER
<- WALLPAPER 
<- WALLPAPER

Note that the <- WALLPAPER <filename> notification message is also generated by Skype when the wallpaper is changed manually from the user interface.

Version

SILENT_MODE

While in silent mode, the Skype client will no longer send out any visual notifications of calls, chat messages or other Skype events, although you will still hear ringtone when someone is calling you.

Syntax:

Example:

-> SET SILENT_MODE ON
<- SILENT_MODE ON
-> SET SILENT_MODE OFF
<- SILENT_MODE OFF

Silent mode can also be turned off by doubleclicking on the Skype icon in the System Tray. NB! Using 'Open Skype' command from the System Tray local menu will not turn Silent Mode off. Only double-click on the icon does.

Note that when a user manually turns off silent mode from System Tray, SILENT_MODE OFF notification is sent out by Skype.

Note that switching silent mode ON will cause the Skype Client to pop a confirmation message, displaying the name of the application from which the silent mode request originated. This confirmation message will re-pop every time a third party application tries to enter silent mode.

Version

Custom Menus and Events

In API version 3.0, it is possible to add your own menu items under DoMore sections of Skype UI menus. When such menu items get clicked on by a user, notification events are sent back to application from which the menu was created. A companion functionality to this are Skype Alert Events - clickable notification event entries in Skype UI that you can add and remove from your own code.

Skype4Com samples:

Custom Menu Items

The custom menu interface provides commands, notifications and events required to create and manage custom menu entries in the Skype client. Custom menu items are automatically removed when the API client that created them is disconnected.

When a custom menu item is clicked by the user, notification event to the API client is fired. Each API client has its own specific menu items and each client only receives notifications from menu items it creates.

The menu items can appear in Do More sections of various menus across the Skype user interface. Which particular Do More menu receives the menu item is controlled by the CONTEXT parameter of the CREATE MENU_ITEM command.

Note that custom menus are currently only supported by Windows client.

Version

CREATE MENU_ITEM

Creates a custom menu item in one of the Do More menus of the Skype interface.

Syntax:

Example:

-> CREATE MENU_ITEM test01 CONTEXT contact CAPTION "TEST 01" ENABLED true
<- MENU_ITEM test01 CREATED
//---------------------------------------------------------------
// Following menu item will only be enabled for SkypeOut contacts
-> CREATE MENU_ITEM test02 CONTEXT contact CAPTION "TEST FOR SKYPEOUT" CONTACT_TYPE_FILTER skypeout
<- MENU_ITEM test02 CREATED

Parameters of the CREATE MENU_ITEM command:

Version

DELETE MENU_ITEM

Removes a custom menu item. Note that custom menu items are removed automatically when the client application that created them is disconnected.

Syntax:

Example:

-> CREATE MENU_ITEM test01 CONTEXT contact CAPTION "TEST 01" ENABLED true
<- MENU_ITEM test01 CREATED
-> DELETE MENU_ITEM test01
<- DELETE MENU_ITEM test01

Version

SET MENU_ITEM

Syntax:

This command enables you to change following properties of a custom menu item:

Example:

-> CREATE MENU_ITEM test01 CONTEXT contact CAPTION "TEST 01" ENABLED true
<- MENU_ITEM test01 CREATED
-> SET MENU_ITEM test01 CAPTION "changed caption"
<- MENU_ITEM test01 CAPTION "changed caption"

Note that you can only change MENU_ITEM properties one at a time. To change both CAPTION and ENABLED properties of a MENU_ITEM, you will need two SET MENU_ITEM commands.

Version

MENU_ITEM click event

MENU_ITEM events are generated when a user clicks on a custom menu item. Note that each API client receives MENU_ITEM events only for menu items created from within their own code.

The message format is as follows:

<- MENU_ITEM <menu_id> CLICKED [<user_id>] CONTEXT <context> [CONTEXT_ID <context_id>]

Example:

//------------------------------------------------------------------------------
// Context = MYSELF
-> CREATE MENU_ITEM test05 CONTEXT MYSELF CAPTION "TEST" ENABLED true
// -- clicking --
<- MENU_ITEM test05 CLICKED CONTEXT myself
//------------------------------------------------------------------------------
// Context = TOOLS
-> CREATE MENU_ITEM test06 CONTEXT TOOLS CAPTION "TEST" ENABLED true
// -- clicking --
<- MENU_ITEM test06 CLICKED CONTEXT tools
//------------------------------------------------------------------------------
// Context = CONTACT
-> CREATE MENU_ITEM test07 CONTEXT CONTACT CAPTION "TEST" ENABLED true
// -- clicking --
<- MENU_ITEM test07 CLICKED echo123 CONTEXT contact
//------------------------------------------------------------------------------
// Context = CALL
-> CREATE MENU_ITEM test03 CONTEXT CALL CAPTION "TEST" ENABLED true
// -- clicking --
<- MENU_ITEM test03 CLICKED echo123 CONTEXT call CONTEXT_ID 879
//------------------------------------------------------------------------------
// Context = CHAT
-> CREATE MENU_ITEM test04 CONTEXT CHAT CAPTION "TEST" ENABLED true
// -- clicking --
<- MENU_ITEM test04 CLICKED echo123 CONTEXT chat CONTEXT_ID #tester/$echo123;559a71c0ef9d758b

Version

Skype Alert Events

Events, when created, appear in Skype UI on the right side of the mood message / profile panel as well as System Tray when Skype is in minimized state. Custom events can be created with the following API command:

Parameters:

Custom events will be displayed on events tab as "Plugin messages". The CAPTION of the event will be displayed as a clickable link. Clicking on such link will generate a notification message in following format:

Note that only the API client who created that particular event will receive such message.

The text given in HINT parameter will be displayed as hint, on mouse hover on the link.

Events remain in plugin message list as long as the API client that created them gets disconnected or are deleted from within API client code.

To delete events:

Example:

//--------------------------------------------------------------------
// Let there be a new event:
-> CREATE EVENT test1 CAPTION "Test message" HINT "Test message hint"
<- EVENT test1 CREATED
//--------------------------------------------------------------------
// At this point a red flag icon and "1 new event message" should appear 
// on the mood message panel. Click on it, then click on "Test message".
// Following event is sent to your API client:
<- EVENT test1 CLICKED
//--------------------------------------------------------------------
// Clearing up the mess from event list
-> delete event test1
<- DELETE EVENT test1

Version

Application to application commands

The AP2AP feature in Skype allows two API clients to exchange information without the communication being visible on the client. Application to application communication has the following characteristics:

Note: When connected to another user using application to application messaging, a user cannot install anything on the remote user's client without the express permission of the remote user.

Note on AP2AP streams: With Skype4Com library versions prior to 1.0.28, re-entrant event handlers caused stream packets to be retrieved from receiving side in incorrect order. If you experience problems with packet order (and you are using Skype4Com library), make sure you upgrade it to version 1.0.28.

Another note on Skype4Com library: Binary data transfers via ap2ap functionality of Skype4Com library can sometimes lead to data getting partially scrambled. To make sure your binary data is transmitted properly, we strongly suggest that you use base64 encoding to convert your data to strings before passing those strings to Skype4Com IApplication.SendDatagram and IApplicationStream.Write methods.

The reason for this phenomenon is that due to how string parameters are handled when communicating with ActiveX objects, all Skype API commands that are passed to or retrieved from the Skype client by Skype4Com library are passed through UTF-8 encoding routine. This includes commands dealing with application to application datagrams and stream writes/reads. Those UTF-8 encoding routines occasionally produce different results, depending on additional language packs a user has installed in Windows.

For code example on base64 encoding/decoding algorithms, refer to A2AStreams.pas example linked below.

Read an application to application example to get you started.

Skype4Com example:

AP2AP CREATE

This command registers a new application object with Skype. Application name cannot contain whitespaces.

Syntax:

Response

Parameters:

Errors

Version

AP2AP CONNECT

This command creates a stream from the application to another Skype user's instance of the same application.

Syntax:

Response:

Example 1: no matching application on the other side

-> #ID1 alter application test connect testuser
<- #ID1 ALTER APPLICATION test CONNECT testuser
<- APPLICATION test CONNECTING testuser
<- APPLICATION test CONNECTING

Note that only the initial feedback notification is echoed back with command ID.

Example 2: Matching application on remote was found

//--------------------------------------------------------- 
// From initiator perspective
-> #ID1 alter application test connect anappo2
<- #ID1 ALTER APPLICATION test CONNECT anappo2
<- APPLICATION test CONNECTING anappo2
<- APPLICATION test CONNECTING 
<- APPLICATION test STREAMS anappo2:1
//---------------------------------------------------------
// From remote perspective
<- APPLICATION test STREAMS anappo:1

Parameters:

Errors:

Version:

Note:

AP2AP WRITE

This command writes text into the application stream identified by the destination user's Skypename and stream ID.

Syntax

Response

Parameters

Errors

Version

Example

AP2AP DATAGRAM

This command sends a datagram to the application stream.

Syntax:

Parameters

Example:

//--------------------------------------------------------
// Creating and connecting application 
// (from sender perspective)
-> CREATE APPLICATION test
<- CREATE APPLICATION test
-> ALTER APPLICATION test CONNECT anappo
<- ALTER APPLICATION test CONNECT anappo
<- APPLICATION test CONNECTING anappo
//--------------------------------------------------------
// Note that a STREAMS event notification is 
// generated automatically upon connect.
<- APPLICATION test STREAMS anappo:1
//--------------------------------------------------------
// Sending datagram
-> ALTER APPLICATION test DATAGRAM anappo:1 BBBBBBBBBBBBBB
<- ALTER APPLICATION test DATAGRAM anappo:1
//--------------------------------------------------------
// Following notification contains the number of 
// characters in datagram
<- APPLICATION test SENDING anappo:1=14
<- APPLICATION test SENDING

//--------------------------------------------------------
// Same thing from receiver perspective
-> CREATE APPLICATION test
<- CREATE APPLICATION test
<- APPLICATION test STREAMS anappo2:1
//--------------------------------------------------------
// Note that receiver does not get a separate notification
// with size of received datagram.
<- APPLICATION test DATAGRAM anappo2:1 BBBBBBBBBBBBBB

Errors

Version

AP2AP READ

This command reads data from an application stream.

Syntax

Response

Parameters

Example:

//--------------------------------------------------------
// Sender
-> CREATE APPLICATION test
<- CREATE APPLICATION test
-> ALTER APPLICATION test CONNECT anappo
<- ALTER APPLICATION test CONNECT anappo
<- APPLICATION test CONNECTING anappo
<- APPLICATION test CONNECTING 
<- APPLICATION test STREAMS anappo:1
-> ALTER APPLICATION test WRITE anappo:1 AAAAAA
<- ALTER APPLICATION test WRITE anappo:1
<- APPLICATION test SENDING anappo:1=8
<- APPLICATION test SENDING

//--------------------------------------------------------
// Receiver
-> CREATE APPLICATION test
<- CREATE APPLICATION test
//--------------------------------------------------------
// Streams notification we received on remote connect
<- APPLICATION test STREAMS anappo2:1
//--------------------------------------------------------
// Packet notification message including packet size
<- APPLICATION test RECEIVED anappo2:1=6
//--------------------------------------------------------
// Reading the packet
-> ALTER APPLICATION test READ anappo2:1
<- ALTER APPLICATION test READ anappo2:1 AAAAAA
<- APPLICATION test RECEIVED

Errors:

Version

AP2AP DISCONNECT

This command disconnects a user stream from an application.

Syntax

Response

Parameters

Example:

//--------------------------------------------------------- 
// From initiator perspective
-> #ID2 alter application test disconnect anappo2:1
<- #ID2 ALTER APPLICATION test DISCONNECT anappo2:1
<- APPLICATION test STREAMS
//---------------------------------------------------------
// From remote perspective
<- APPLICATION test STREAMS

Note that if you use re-connect to the same remote user after disconnecting, the <id> part of the streams notification will increment itself.

-> ALTER APPLICATION test CONNECT anappo2
<- ALTER APPLICATION test CONNECT anappo2
<- APPLICATION test CONNECTING anappo2
<- APPLICATION test CONNECTING 
<- APPLICATION test STREAMS anappo2:2

Errors:

Version

AP2AP DELETE

This command deletes an application and drops all connections to it.

Syntax

Response

Parameters

Errors:

Version

Application to application example

Jim and Joe are two users who installed "toru" application.

// register application on both sides
[JIM] => CREATE APPLICATION toru
[JIM] <= CREATE APPLICATION toru
[JOE] => CREATE APPLICATION toru
[JOE] <= CREATE APPLICATION toru
// JIM initiates communication to JOE
[JIM] => ALTER APPLICATION toru CONNECT joe
[JIM] <= ALTER APPLICATION toru CONNECT joe
// connection establishing ...
[JIM] <= APPLICATION toru CONNECTING joe
// .. and is successful
[JIM] <= APPLICATION toru CONNECTING
// .. and creates one stream
[JIM] <= APPLICATION toru STREAMS joe:1
// and JOE is notified by new stream
[JOE] <= APPLICATION toru STREAMS jim:1
// JIM sends data over stream to JOE
[JIM] => ALTER APPLICATION toru WRITE joe:1 Hello world!
[JIM] <= ALTER APPLICATION toru WRITE joe:1
// stay tuned while data is transmitted...
[JIM] <= APPLICATION toru SENDING joe:1
// .. and you are notified on delivery success
[JIM] <= APPLICATION toru SENDING
// JOE receives notification about the incoming message
[JOE] <= APPLICATION toru RECEIVED jim:1
// .. and reads data from stream
[JOE] => ALTER APPLICATION toru READ jim:1
[JOE] <= ALTER APPLICATION toru READ jim:1 Hello world!
// ... and is notified that stream is empty
[JOE] <= APPLICATION toru RECEIVED
// JOE sends back acknowledgement of message
// A datagram is used because it is not so important to acknowledge
[JOE] => ALTER APPLICATION toru DATAGRAM jim:1 Hello back!
[JOE] <= ALTER APPLICATION toru DATAGRAM jim:1
// Now data is transmitted...
[JOE] <= APPLICATION toru SENDING jim:1=11
// .. and notificed when it was sent (but delivery not assured)
[JOE] <= APPLICATION toru SENDING
// JIM receives datagram notifcation
[JIM] <= APPLICATION toru DATAGRAM joe:1 Hello back!
// JIM decides to end the communication
[JIM] => ALTER APPLICATION toru DISCONNECT joe:1
[JIM] <= ALTER APPLICATION toru DISCONNECT joe:1
// .. and when stream is closed it is notified
[JIM] <= APPLICATION toru STREAMS
// Also JOE receives notification that stream was closed
[JOE] <= APPLICATION toru STREAMS
// JIM unregisters applicaton
[JIM] => DELETE APPLICATION toru
[JIM] <= DELETE APPLICATION toru
// JOE unregisters applicaton
[JOE] => DELETE APPLICATION toru
[JOE] <= DELETE APPLICATION toru

Voice Streams

Refer to CALL object for properties relevant to manipulating voice streams.

To change voice stream properties of a CALL object, there are three extensions of the ALTER CALL command:

ALTER CALL <id> SET_INPUT SOUNDCARD="default" | PORT="port_no" | FILE="FILE_LOCATION"

This enables you to set a port or a wav file as a source of your voice, instead of a microphone.

ALTER CALL <id> SET_OUTPUT SOUNDCARD="default" | PORT="port_no" | FILE="FILE_LOCATION"

Redirects incoming transmission to a port or a wav file.

ALTER CALL <id> SET_CAPTURE_MIC PORT="port_no" | FILE="FILE_LOCATION"

Captures your own voice from microphone to a port or a wav file.

Note that as of version 3.5.0.202 redirecting of voice streams is also available for voicemails. Look for corresponding ALTER commands at the end of this section.

Example 1 - capturing incoming transmission

//---------------------------------------------------------------
// In this example we will call Skype call testing service
// and play around with redirecting inputs and outputs.
// First, lets try capturing incoming transmission into a file.
-> call echo123
<- CALL 808 STATUS UNPLACED
<- CALL 808 STATUS ROUTING
<- CALL 808 STATUS RINGING
<- CONTACTS FOCUSED 
<- CALL 808 VAA_INPUT_STATUS FALSE
<- CALL 808 STATUS INPROGRESS
//---------------------------------------------------------------
// Ok, the call is now in progress and the helpful lady robot
// on the other side is talking. We can capture her voice to 
// a wav file by issuing the following command:
-> ALTER CALL 808 SET_OUTPUT file="c:\test.wav"
<- ALTER CALL 808 SET_OUTPUT file="c:\test.wav"
<- CALL 808 STATUS FINISHED
//---------------------------------------------------------------
// We now have a c:\test.wav file, containing the incoming transmission.

Example 2 - altering the source of the outgoing transmission

//---------------------------------------------------------------
// Let's call the helpful robot again and play a little trick on her.
// By altering sound input source, we can send her back her own voice
// that we recorded in our previous example.
-> call echo123
<- CALL 846 STATUS UNPLACED
<- CALL 846 STATUS ROUTING
<- CALL 846 STATUS RINGING
<- CALL 846 VAA_INPUT_STATUS FALSE
<- CALL 846 STATUS INPROGRESS
//---------------------------------------------------------------
// Wait until the lady robot asks for you to speak, then set 
// call input to a file instead of microphone.
-> ALTER CALL 846 SET_INPUT file="c:\test.wav"
<- ALTER CALL 846 SET_INPUT file="c:\test.wav"
<- CALL 846 VAA_INPUT_STATUS TRUE
<- CALL 846 VAA_INPUT_STATUS FALSE
//---------------------------------------------------------------
// If the sound from fail was sent correctly, you should hear
// the robot's voice in the playback phase of the call test.
<- CALL 846 STATUS FINISHED

Example 3 - capturing voice from the microphone

//---------------------------------------------------------------
// In this example, we will capture our own voice. 
-> call echo123
<- CALL 889 STATUS UNPLACED
<- CALL 889 STATUS ROUTING
<- CALL 889 STATUS RINGING
<- CONTACTS FOCUSED 
<- CALL 889 VAA_INPUT_STATUS FALSE
<- CALL 889 STATUS INPROGRESS
//---------------------------------------------------------------
// Wait until the lady robot asks you to speak, then switch on 
// sound capture to a file and talk.
-> ALTER CALL 889 SET_CAPTURE_MIC file="c:\test.wav"
<- ALTER CALL 889 SET_CAPTURE_MIC file="c:\test.wav"
<- CALL 889 STATUS FINISHED
//---------------------------------------------------------------
// The test.wav file should now contain your own voice.

The relevant properties of a CALL object can be accessed in a following manner:

-> GET CALL 748 INPUT
<- CALL 748 INPUT SOUNDCARD="default"
-> GET CALL 748 OUTPUT
<- CALL 748 OUTPUT SOUNDCARD="default"
-> GET CALL 748 VAA_INPUT_STATUS
<- CALL 748 VAA_INPUT_STATUS FALSE

Audio format

Note:

Skype4Com example:

Version

ALTER CALL SET_INPUT

This enables you to set a port or a wav file as a source of your voice, instead of a microphone.

Syntax:

Note that for now, the SOUNDCARD parameter only accepts one value - "default". If this parameter is omitted or differs from "default", the soundcard input is muted.

Example:

-> ALTER CALL 846 SET_INPUT file="c:\test.wav"
<- ALTER CALL 846 SET_INPUT file="c:\test.wav"

Version

ALTER CALL SET_OUTPUT

This command redirects incoming transmission to a port or a wav file.

Syntax:

Note that for now, the SOUNDCARD parameter only accepts one value - "default". If this parameter is omitted or differs from "default", the soundcard output is muted.

Example:

-> ALTER CALL 808 SET_OUTPUT file="c:\test.wav"
<- ALTER CALL 808 SET_OUTPUT file="c:\test.wav"

Version

ALTER CALL SET_CAPTURE_MIC

This command captures your own voice from microphone to a port or a wav file.

Syntax:

Example:

-> ALTER CALL 889 SET_CAPTURE_MIC file="c:\test.wav"
<- ALTER CALL 889 SET_CAPTURE_MIC file="c:\test.wav"

Version

ALTER VOICEMAIL SET_INPUT

This enables you to set a port or a wav file as a source of voicemail's input instead of a microphone.

Syntax:

Note that for now, the SOUNDCARD parameter only accepts one value - "default". If this parameter is omitted or differs from "default", the soundcard input is muted.

Example:

-> ALTER VOICEMAIL 146 SET_INPUT file="c:\test.wav"
<- ALTER VOICEMAIL 146 SET_INPUT file="c:\test.wav"

Version

ALTER VOICEMAIL SET_OUTPUT

This command redirects voicemail output to a port or a wav file.

Syntax:

Note that for now, the SOUNDCARD parameter only accepts one value - "default". If this parameter is omitted or differs from "default", the soundcard output is muted.

Example:

-> ALTER VOICEMAIL 108 SET_OUTPUT file="c:\test.wav"
<- ALTER VOICEMAIL 108 SET_OUTPUT file="c:\test.wav"

Version

ALTER VOICEMAIL SET_CAPTURE_MIC

This command captures your own voice from microphone to a port or a wav file.

Syntax:

Example:

-> ALTER VOICEMAIL 189 SET_CAPTURE_MIC file="c:\test.wav"
<- ALTER VOICEMAIL 189 SET_CAPTURE_MIC file="c:\test.wav"

Version Skype API version 3.5.0.202 (protocol 8)

Testing connections

This command can be used to test whether connection between your application and Skype is still alive. This command is not meant to query online status of remote users.

Syntax

Response

Version

Objects

This section contains the Skype objects.

USER object

NB! When you retrieve USER object records with SEARCH USERS command, the user profile data is guaranteed to be accessible with GET USER <user_id> <property_name> commands only until another SEARCH command is executed. The reason for this is that big SEARCH commands can and often trigger Skype's internal garbage collection routine that can clear out the data retreived by previous searches.

The user object has the following properties:

Most user properties are read-only. The following properties are read-write and can be modified with the SET command:

PROFILE object

Use the GET PROFILE command to retrieve profile information. The PROFILE object has the following properties:

CALL object

The CALL object has the following properties:

Notes

Most call properties are read-only. The following properties are read-write and can be modified with the SET command:

MESSAGE object

Version

Properties

Most message properties are read-only. The following property is read-write and can be modified with the SET command:

CHAT object

Version

Properties

Following properties were added to CHAT object in protocol 7 (API version 3.0):

CHATMEMBER object

Version

Properties:

Refer to GET CHATMEMBER command on how to access CHATMEMBER properties.

CHATMESSAGE object

Version

Properties

Most chatmessage properties are read-only. The following property is read-write and can be modified with the SET command:

VOICEMAIL object

Version

Properties

SMS object

Version

Refer to Sending and managing SMS messages section for additional info.

Properties

APPLICATION object

Properties

Version

GROUP object

The GROUP object enables users to group contacts. There are two types of GROUP ; custom groups and hardwired groups. The GROUP object has the following properties:

Following is a description of all group types defined by Skype:

HARDWIRED GROUPS are described in the following table.

Contact group type

Description

ALL_USERS

This group contains all users I know about, including users in my contactlist, users I recently contacted and blocked users.

ALL_FRIENDS

This group contains all contacts in my contactlist (also known as friends)

SKYPE_FRIENDS

This group contains Skype contacts in my contactlist.

SkypeOut_FRIENDS

This group contains SkypeOut contacts in my contactlist.

ONLINE_FRIENDS

This group contains Skype contacts in my contactlist who are online.

UNKNOWN_OR_PENDINGAUTH_FRIENDS

This group contains contacts in my contactlist who have not yet authorized me.

RECENTLY_CONTACTED_USERS

This group contains contacts I have conversed with recently, including non-friends.

USERS_WAITING_MY_AUTHORIZATION

This group contains contacts who are awating my response to an authorisation request, including non-friends.

USERS_AUTHORIZED_BY_ME

This group contains all contacts I have authorised, including non-friends.

USERS_BLOCKED_BY_ME

This group contains all contacts I have blocked, including non-friends.

UNGROUPED_FRIENDS

This group contains all contacts in my contactlist that do not belong to any custom group.

CUSTOM_GROUP

This group type is reserved for user-defined groups.

FILETRANSFER object

File transfer objects are for monitoring purposes only. No alters/actions via API are currently allowed with these objects. File transfers cannot be initiated nor accepted via API commands.

Values of all the properties can be accessed with GET FILETRANSFER <id> <property_name> commands.

Refer to SEARCH FILETRANSFERS and SEARCH ACTIVEFILETRANSFERS for getting lists of FILETRANSFER objects in the system.

Skype4Com sample:

Properties:

Example:

//----------------------------------------------------------------------------------
// Sender initiates file transfer from UI
// Note that the file name in notification message is not enclosed in quotes.
<- FILETRANSFER 982 TYPE OUTGOING
<- FILETRANSFER 982 PARTNER_HANDLE Test2
<- FILETRANSFER 982 PARTNER_DISPNAME Test2
<- FILETRANSFER 982 FILEPATH C:\Stuff\This is test file.mp3
<- FILETRANSFER 982 FILENAME This is test file.mp3
<- FILETRANSFER 982 STATUS NEW
<- FILETRANSFER 982 FILESIZE 0
<- FILETRANSFER 982 STARTTIME 1174558044
<- FILETRANSFER 982 FINISHTIME 0
<- FILETRANSFER 982 BYTESPERSECOND 0
<- FILETRANSFER 982 BYTESTRANSFERRED 0
<- FILETRANSFER 982 FILESIZE 2193720
<- FILETRANSFER 982 STATUS WAITING_FOR_ACCEPT
//----------------------------------------------------------------------------------
// Remote user receives incoming file notification
<- FILETRANSFER 1250 TYPE INCOMING
<- FILETRANSFER 1250 PARTNER_HANDLE Test
<- FILETRANSFER 1250 PARTNER_DISPNAME Test
<- FILETRANSFER 1250 FILENAME This is test file.mp3
<- FILETRANSFER 1250 STATUS NEW
<- FILETRANSFER 1250 STARTTIME 1174644373
<- FILETRANSFER 1250 FINISHTIME 0
<- FILETRANSFER 1250 BYTESPERSECOND 0
<- FILETRANSFER 1250 BYTESTRANSFERRED 0
//----------------------------------------------------------------------------------
// Remote user accepts the file from UI and starts receiving
<- FILETRANSFER 1250 FILEPATH C:\test\This is test file.mp3
<- FILETRANSFER 1250 STATUS CONNECTING
<- FILETRANSFER 1250 STATUS TRANSFERRING
<- FILETRANSFER 1250 BYTESTRANSFERRED 262454
<- FILETRANSFER 1250 BYTESPERSECOND 307806
<- FILETRANSFER 1250 BYTESTRANSFERRED 580110
<- FILETRANSFER 1250 FINISHTIME 1174644526
<- FILETRANSFER 1250 BYTESPERSECOND 526959
<- FILETRANSFER 1250 BYTESTRANSFERRED 1316372
<- FILETRANSFER 1250 FINISHTIME 1174644523
<- FILETRANSFER 1250 BYTESPERSECOND 613776
<- FILETRANSFER 1250 BYTESTRANSFERRED 2103782
<- FILETRANSFER 1250 BYTESPERSECOND 0
<- FILETRANSFER 1250 BYTESTRANSFERRED 2193720
<- FILETRANSFER 1250 STATUS COMPLETED
//----------------------------------------------------------------------------------
// Sender receives notification that the file has been accepted and starts sending
<- FILETRANSFER 982 STATUS CONNECTING
<- FILETRANSFER 982 STATUS TRANSFERRING
<- FILETRANSFER 982 BYTESTRANSFERRED 262454
<- FILETRANSFER 982 BYTESPERSECOND 308104
<- FILETRANSFER 982 BYTESTRANSFERRED 580110
<- FILETRANSFER 982 FINISHTIME 1174558198
<- FILETRANSFER 982 BYTESPERSECOND 510987
<- FILETRANSFER 982 BYTESTRANSFERRED 1296182
<- FILETRANSFER 982 FINISHTIME 1174558195
<- FILETRANSFER 982 BYTESPERSECOND 606237
<- FILETRANSFER 982 BYTESTRANSFERRED 2083592
<- FILETRANSFER 982 BYTESPERSECOND 0
<- FILETRANSFER 982 FINISHTIME 0
<- FILETRANSFER 982 STATUS CONNECTING
<- FILETRANSFER 982 BYTESTRANSFERRED 2193720
<- FILETRANSFER 982 FINISHTIME 1174558195
<- FILETRANSFER 982 STATUS COMPLETED

Version

Managing object properties

Three commands are available for retrieving and modifing object properties and general parameters:

General syntax

See the corresponding object information for available properties and property values:

This section contains the commands for managing object properties. Note that:

GET USER

This command returns property values for a specified user.

Syntax

Response

Parameters

Version

Errors

Example

SET USER

Syntax

GET CALL

This command returns property values for a specified call. See GET CALL command reference for more details.

GET CHAT

This command returns property values for a specified chat.

Syntax

Response

Parameters

Version

Errors

Example

GET CHATMESSAGE

This command returns property values for a specified chat message.

Syntax

Response

Parameters

Version

Example

Errors

GET MESSAGE

This command returns property values for a specified message. This command is deprecated since protocol 3, and was replaced by the GET CHATMESSAGE command.

Syntax

Parameters

Version

Errors

Example

GET APPLICATION

For information about the GET APPLICATION command, refer to the APPLICATION object information.

Managing general parameters

Use GET and SET commands to manage the general variables.

Skype4Com sample:

GET SKYPEVERSION

Syntax

Response

Version

Example

GET CURRENT USER

This command gets the username for the currently logged in user.

Syntax

Response

Version

GET USERSTATUS

This command queries or modifies user visiblity for the current user.

Syntax

Response

Parameters

Version

Errors

Example

GET PRIVILEGE

Syntax

Response

Parameters

Errors

Version

Example

GET PROFILE

This command queries the current user's profile information.

Syntax:

Refer to PROFILE object for possible values of <profile_property> parameter.

Example:

Version

GET PREDICTIVE DIALER COUNTRY

This command returns the country code that is currently being used for inventing correct country prefixes for PSTN numbers (predictive dialing). The country code is returned in ISO2 format.

Syntax:

Example:

-> GET PREDICTIVE_DIALER_COUNTRY
<- PREDICTIVE_DIALER_COUNTRY ee

Version

SET PROFILE MOOD_TEXT

The SET PROFILE MOOD TEXT command changes the mood text for a user.

Syntax

Version

SET PROFILE RICH_MOOD_TEXT

This is a "with bells and whistles" version of the SET PROFILE MOOD_TEXT command.

Syntax:

Note that when this property is changed, it is also propagated into the old MOOD_TEXT, with XML tags stripped. Corresponding properties of the USER object are updated as well.

When MOOD_TEXT property is set, the RICH_MOOD_TEXT property is automatically cleared.

Example:

//------------------------------------------------------------------
// For purpose of bit conservation we omit feedback notifications
SET PROFILE RICH_MOOD_TEXT Smiley: <SS type="smile">:-)</SS>
SET PROFILE RICH_MOOD_TEXT <FONT COLOR="#FF0010">Red text</FONT>
SET PROFILE RICH_MOOD_TEXT <BLINK>Blinking text</BLINK>
SET PROFILE RICH_MOOD_TEXT <B>Bold text</B>
SET PROFILE RICH_MOOD_TEXT <I>Italics</I>
SET PROFILE RICH_MOOD_TEXT <U>Underlined</U>
SET PROFILE RICH_MOOD_TEXT First line<br/>Second line<br/>Third line

<SS type="smile"></SS> also accepts following smileys:

You can also get ideas for cute mood messages by looking at what others have done with theirs. To retrieve rich mood messages of other people, use GET USER RICH MOOD TEXT command.

Version

GET USER RICH_MOOD_TEXT

Retrieves RICH_MOOD_TEXT of a remote user.

Syntax:

Version

GET CONNSTATUS (connection)

This command returns the current network connection status.

Syntax

Response

Parameters

Version

Example

AUDIO_IN

The GET command returns the current audio input device for Skype.
The SET command assigns a new audio input device for Skype.

Syntax

Response

Version

Note

Example

AUDIO_OUT

The GET command returns the current audio output device for Skype.
The SET command assigns a new audio output device for Skype.

Syntax

Response

Version

Note

Example

RINGER

The GET command returns the current ringing device for Skype. The SET command assigns a new ringing device for Skype.

Syntax

Response

Version

Note

Example

MUTE

This command gets or sets the mute status.

Syntax

Response

Version

Notes

Example

SET AVATAR

This command changes the avatar picture for the user profile.

Syntax

Response

Parameters

Version

Errors

Example

GET AVATAR

This command saves user's current avatar picture in a file.

Refer to

Syntax:

The file path given in the <filename> parameter must exist. An existing file with the same name will only be overwritten if it's empty (file size = 0).

Example:

-> GET AVATAR 1 c:\stuff\test2.jpg
<- AVATAR 1 c:\stuff\test2.jpg

Version

GET USER AVATAR

This command retrieves remote user's avatar picture from the picture cache and saves it into a file. Refer to SET AVATAR command on how to set your own avatar to a picture from a file.

Syntax:

The file path given in the <filename> parameter must exist. An existing file with the same name will only be overwritten if it's empty (file size = 0).

Example:

-> GET USER anappo2 AVATAR 1 c:\stuff\userpic.jpg
<- USER anappo2 AVATAR 1 c:\stuff\userpic.jpg

Version

RINGTONE

The GET command returns the current ringtone file for Skype.
The SET command assigns a new ringtone for Skype.

Syntax

Response

Parameters

Version

Errors

Notes

Example

GET RINGTONE STATUS

This command queries if ringtones are enabled.

Syntax

Note that the <id> parameter is there for possible future use and must for now be always set to 1.

SET RINGTONE STATUS

This command enables you to switch ringtone ON/OFF.

Syntax:

Example:

-> SET RINGTONE 1 STATUS OFF
<- RINGTONE 1 OFF
-> GET RINGTONE 1 STATUS
<- RINGTONE 1 OFF
-> SET RINGTONE 1 STATUS ON
<- RINGTONE 1 ON
-> GET RINGTONE 1 STATUS
<- RINGTONE 1 ON

Note that the <id> parameter is there for possible future use and must for now be always set to 1.

Version

GET VIDEO_IN

This command queries or sets the device to be used in video calls. See GET VIDEO_IN command reference for more details.

SET PCSPEAKER

If no speakers are connected to a PC, it is possible to hear incoming Skype calls only when wearing a headset. Use the SET PCSPEAKER command to switch the PC speaker on or off.

Syntax

Response

SET AGC and SET AEC

NB! As of version 3.6 these commands no longer actually function. The API commands are still valid, for backward compatibility reasons, but turning echo cancellation or microphone gain off programmatically is disabled in the library.

Skype uses automatic gain control (AGC) to adjust microphone level to the volume the user speaks at. Skype uses automatic echo cancellation (AEC) to eliminate the echo that occurs if a microphone "hears" the other user's voice on the loudspeaker.

Important: Disabling these functions can impair call quality and is not recommended in standard implementations. However, some audio devices have in-built AGC/AEC mechanisms and, in these circumstances, it can be necessary to deactivate AGC and AEC on Skype. If you disable AGC/AEC on Skype, ensure that the client defaults to enabled if the audio device is removed.

To query whether AGC and AEC are on:

Syntax

Response

To set AGC and AEC on and off:

Syntax

Response

Error codes

Version

RESETIDLETIMER

This command resets the idle timer (the one that turns user's online status to "Away").

Note that there is currently no way of retrieving actual "Show my away when inactive for X minutes" setting from user profile. If you want to ensure the user status stays permanently online, it is sufficient to send RESETIDLETIMER every 59 seconds as it is impossible to set the auto-idle timer below 1 minute.

Syntax:

Version:

GET AUTOAWAY

Returns the current state of automatic online status switcher.

Syntax:

SET AUTOAWAY

Sets the state of automatic online status switcher.

Syntax:

Example:

-> SET AUTOAWAY ON
<- AUTOAWAY ON
-> SET AUTOAWAY OFF
<- AUTOAWAY OFF
-> SET AUTOAWAY BANANA
<- ERROR 53 SET AUTOAWAY invalid value

Notifications

Notifications are sent by Skype if an object changes or if the value of a property is requested with a GET command. Also, if a property value is changed by a SET command, the change is confirmed with a notification. Notifications occur in the same manner, whether the related change is initiatied by the Skype UI or by an API client. There are two main types of notification:

Object notifications

This section contains the Skype object notifications.

Call notifications

Call notifications are sent on incoming calls or when an active calls changes. Clients can monitor call events to detect incoming calls and act on them (for example, to answer automatically).

Syntax

Parameters

User notifications

User notifications are the most frequent notifications and include last-seen timestamps and user property information.

Syntax

Parameters

Note

Chat notifications

Chat notification is sent when a chat is created, chat properties or members change, or a new message is posted into chat. A new message also triggers a chatmessage notification.

Syntax:

Parameters

In version 3.6 additional notification messages were added on chat window open and close events.

Syntax:

Example:

<- CHAT #anappo2/$anappo;87ba791d4025455c CLOSED
<- CHAT #anappo2/$anappo;87ba791d4025455c OPENED

Chatmessage notifications

Chatmessage notification is sent when a new message arrives. The client can monitor these messages to display received messages.

Syntax

Parameters

Notes

Voicemail notifications

Voicemail notification is sent when a new voicemail is received or recorded.

Syntax

Parameters

Application notifications

Application notifications are sent when a new application requests to connect, or when data is sent or received.

Syntax

Parameters

Status notifications

This section contains the Skype status notifications.

Callhistory change notification

This notification occurs when call history changes and needs to be reloaded. This change occurs when the call history or a selection of it has been deleted.

Syntax

Instant message history change

This notification occurs when instant message history changes and needs to be reloaded. It occurs only when all IM history is deleted.

Syntax

Contactlist change notification

This notification occurs if a user is added to or deleted from contacts or has authorized the current user as a contact.

Syntax

Parameters

Example

Contact group change notification

This notification is sent when GROUP USERS changes - when a user comes online or goes offline.

Syntax:

Example:

<- GROUP 56 NROFUSERS 19
<- USER test ONLINESTATUS OFFLINE

Version

User status notification

Syntax

Parameters

Connection status

Syntax

Parameters

Current user handle

Syntax

Example

Contact list focus nofication

This notification occurs when contactlist focus changes:

Syntax

Error codes

Skype sends an error response when it encounters an issue such as incorrect commands or internal inconsistencies. The error code is a number that uniquely identifies the error condition and the DESC is an optional brief description of the issue.

Currently the following error codes are defined:

Code

Description

Possible reasons

1

General syntax error

Command missing (e.g. " " sent as command)

2

Unknown command

Command spelled incorrect (e.g. "GRT" send instead of "GET")

3

Search: unknown WHAT

Search target is missing or misspelled

4

Empty target not allowed

&nspb;

5

Search CALLS: invalid target

An unpermitted character (e.g. "!", "#", "$" etc.) was used in the target username.

6

SEARCH MISSEDCALLS: target not allowed

e.g. "SEARCH MISSEDCALLS echo123"

7

GET: invalid WHAT

Object/property name missing or misspelled

8

Invalid user handle

USERNAME missing or includes a not permitted character (e.g. "GET USER ! HANDLE")

9

Unknown user

10

Invalid PROP

Property name and/or ID missing or misspelled

11

Invalid call id

Call ID missing or misspelled (must be a numeric value)

12

Unknown call

Nonexistant call ID used

13

Invalid PROP

Returned to command GET CALL id PARTNER_DISPLAYNAME. Property name missing or misspelled

14

Invalid message id

GET - Message ID missing or misspelled (must be a numeric value)

15

Unknown message

Nonexistant message ID used in GET command

16

Invalid PROP

Returned to command GET MESSAGE id PARTNER_DISPLAYNAME. Property name missing or misspelled

17

(Not in use)

18

SET: invalid WHAT

Property name missing or misspelled

19

Invalid call id

Call ID missing or misspelled (must be a numeric value)

20

Unknown call

Nonexistant call ID used

21

Unknown/disallowed call prop

SET CALL value incorrect or misspelled (e.g. "SET CALL 15 STATUS ONHOL")

22

Cannot hold this call at the moment

Trying to hold a call that is not in progress.

23

Cannot resume this call at the moment

Trying to resume/answer a call that is not in progress.

24

Cannot hangup inactive call

Trying to hang up a call that is not in progress.

25

Unknown WHAT

Property name missing or misspelled (e.g. "SET CALL 15 STATU ONHOLD")

26

Invalid user handle

Target username missing or includes not permitted symbols (e.g. "MESSAGE ")

27

Invalid version number

Invalid protocol number (e.g. "PROTOCOL -12,9")

28

Unknown userstatus

Unknown or misspelled value for user status (e.g. "SET USERSTATUS RICH")

29

SEARCH what: target not allowed

Target is not permitted; e.g. "SEARCH MISSEDMESSAGES echo123"

30

Invalid message id

SET - Message ID missing or misspelled (must be a numeric value)

31

Unknown message id

Nonexistant message ID used in SET command

32

Invalid WHAT

Property missing or misspelled

33

invalid parameter

Unknown or misspelled value for mute (e.g. "SET MUTE O")

34

invalid user handle

Target username/number missing (e.g. "CALL ")

35

Not connected

36

Not online

37

Not connected

38

Not online

39

user blocked

Destination user is blocked by caller. Also given, if trying to call to a blocked user

40

Unknown privilege

Privilege is either misspelled or does not exist (e.g. "GET PRIVILEGE SkypeOut").

41

Call not active

Trying to send DTMF, when call is not active.

42

Invalid DTMF code

Invalid DTMF code is sent. Valid symbols for DTMF codes are {0..9,#,*}

43

cannot send empty message

Empty message is tried to sent, e.g. "MESSAGE echo123".

50

cannot set device

An error occurred when changing audio device

51

invalid parameter

Parameter to READY command is not YES or NO

52

invalid parameter

Parameter to HOOK command is not ON or OFF. NB! HOOK command is no longer supported or relevant.

53

invalid value

Parameter to SET AUTOAWAY is not ON or OFF

66

Not connected

Skype is not connected i.e. user status is "LOGGEDOUT"

67

Target not allowed with SEARCH FRIENDS

SEARCH FRIENDS had a parameter

68

Access denied

69

Invalid open what

OPEN command had missing or misspelled TARGET e.g. "OPEN IN"

70

Invalid handle

OPEN IM parameter USERNAME is missing or contains not permitted symbols

71

Invalid conference participant NO

Conference participant's number is either too large or invalid.

72

Cannot create conference

73

too many participants

Conference is initiated to more than 4 people.

74

Invalid key

Key name in BTN_PRESSED or BTN_RELEASED command is invalid

91

call error

Cannot call an emergency number

92

call error

The called number is not a valid PSTN number

93

call error

Invalid Skype Name

94

call error

Cannot call yourself

95

Internal error

Destination user is blocked by caller right after call initialization

96

Internal error

An outgoing call exists in ROUTING/RINGING/EARLYMEDIA state

97

Internal error

Internal error

98

Internal error

Internal error

99

Internal error

Internal error

100

Internal error

Internal error

101

Internal error

A call to the destination user is already ongoing

103

Cannot hold

Internal error

104

Cannot resume

Internal error

105

Invalid chat name

Chat name missing or misspelled

106

Invalid PROP

Property name missing or misspelled for CHAT or CHATMESSAGE

107

Target not allowed with CHATS

No parameters allowed to SEARCH CHATS

108

User not contact

TRANSFER can only be initiated to contacts

109

directory doesn't exist

Directory given as a parameter to TRANSFER command does not exist

110

No voicemail capability

User given as a parameter to VOICEMAIL command doesn't have voicemail capability

111

File not found

File given as argument to SET AVATAR or SET RINGTONE command doesn't exist

112

Too many targets

Number of target users for OPEN FILETRANSFER command exceeds simultaneous filetransfer limit

113

Close: invalid WHAT

Invalid argument to CLOSE command

114

Invalid avatar

GET or SET AVATAR avatar index invalid

115

Invalid ringtone

GET or SET RINGTONE ringtone index invalid

500

CHAT: Invalid chat name given

501

CHAT: No chat found for given chat

502

CHAT: No action name given

503

CHAT: Invalid or unknown action

504

CHAT: action failed

505

CHAT: LEAVE does not take arguments

506

CHAT: ADDMEMBERS: invalid/missing user handle(s) as arguments

507

CHAT: CREATE: invalid/missing user handle(s) as argument

508

CHAT: CREATE: opening a dialog to the given user failed

509

No chat name given

510

Invalid/uknown chat name given

511

Sending a message to chat failes

512

Invalid voicemail id

513

Invalid voicemail object

514

No voicemail property given

515

Assigning speeddial property failed

516

Invalid value given to ISAUTHORIZED/ISBLOCKED

517

Changing ISAUTHORIZED/ISBLOCKED failed

518

Invalid status given for BUDDYSTATUS

519

Updating BUDDYSTATUS failed

520

CLEAR needs a target

521

Invalid/unknown CLEAR target

522

CLEAR CHATHISTORY takes no arguments

523

CLEAR VOICEMAILHISTORY takes no arguments

524

CLEAR CALLHISTORY: missing target argument

525

CLEAR CALLHISTORY: invalid handle argument

526

ALTER: no object type given

527

ALTER: unknown object type given

528

VOICEMAIL: No proper voicemail ID given

529

VOICEMAIL: Invalid voicemail ID given

530

VOICEMAIL: No action given

531

VOICEMAIL: Action failed

532

VOICEMAIL: Unknown action

534

SEARCH GREETING: invalid handle

535

SEARCH GREETING: unable to get greeting

536

CREATE: no object type given

537

CREATE : Unknown object type given.

538

DELETE : no object type given.

539

DELETE : unknown object type given.

540

CREATE APPLICATION : missing of invalid name.

541

APPLICATION : Operation Failed.

542

DELETE APPLICATION : missing or invalid application name.

543

GET APPLICATION : missing or invalid application name.

544

GET APPLICATION : missing or invalid property name.

545

ALTER APPLICATION : missing or invalid action.

546

ALTER APPLICATION : Missing or invalid action

547

ALTER APPLICATION CONNECT: Invalid user handle

548

ALTER APPLICATION DISCONNECT: Invalid stream identifier

549

ALTER APPLICATION WRITE : Missing or invalid stream identifier

550

ALTER APPLICATION READ : Missing or invalid stream identifier

551

ALTER APPLICATION DATAGRAM : Missing or invalid stream identifier

552

SET PROFILE : invalid property profile given

553

SET PROFILE CALL_SEND_TO_VM : no voicemail privledge, can't forward to voicemail.

555

CALL: No proper call ID given

556

CALL: Invalid call ID given"

557

CALL: No action given

558

CALL: Missing or invalid arguments

559

CALL: Action failed

560

CALL: Unknown action

561

SEARCH GROUPS: invalid target"

562

SEARCH GROUPS: Invalid group id

563

SEARCH GROUPS: Invalid group object

564

SEARCH GROUPS: Invalid group property given

569

GET AEC: target not allowed"

570

SET AEC: invalid value"

571

GET AGC: target not allowed"

572

SET AGC: invalid value"

9901

Internal error

Skype URI handler

Although not part of the Skype public API, Skype 1.4 and later include a set of useful commands which can be initiated using the skype URI handler.

General syntax

Skype for Windows 1.4 version handles the following

Examples

Notice that there is no "//" in skype: URI - skype://echo123 does not work.

Release Notes

This section contains all release notes for earlier versions of Skype.

Refer to Developer Notes for updates on previous beta releases.

Skype 4.0 GOLD Release Notes

Date: 2009-01-22

While the Windows 4.0 client release does not bring any new features to the Public API, it does present a major UI overhaul. As a result, some parts of the Public API that had dependencies in the UI are no longer functional - the corresponding UI parts having been removed or not yet implemented. We have tried to keep the list of nonfunctional Public API commands down to minimum. Also note that the commands do not fail with error messages - they just have no effect in the UI.

Here is the list:

Skype Alert Events
The entire custom events system is currently unavailable.

Skype Custom Menus
In 3.x the create menu command had four different contexts, where the custom menu Items could be created in: CALL, MYSELF, TOOLS, CONTACT. Currently only TOOLS context remains functional.

Send Contacts

Skype 3.6. Release Notes

Date: 2007-10-03

New notification messages:

New commands:

Varia:
As of ths version various commands no longer accept "", "" or "" symbols in their parameters. Instead, ERROR 8 Invalid user handle error message is generated in response. Following commands are affected:

Skype 3.5.0.202 Release Notes

Date: 2007-08-07

New VOICEMAIL object properties:

VOICEMAIL audio stream access commands:

Skype 3.5 Release Notes

Date: 2007-07-02

New protocol version: 8

Skype 3.2 Release Notes

Date: 2007-04-30

New commands:

New USER object property:

Skype 3.1 Release Notes

Date: 2007-04-05

New commands:

New CALL property - TARGET_IDENTITY.
New CHAT property - TOPICXML.

Error reporting changed for SET VIDEO_IN command.

Skype 3.0 Release Notes

New protocol version: 7

Support for custom menus

Refer to Custom Menu Items section for more information.

Support for custom events

Refer to Skype Alert Events for more information.

Call transfer API

New commands and object properties to support call transfers:

New CALL statuses:

New call transfer related CALL properties:

File transfer object
Refer to FILETRANSFER object section for more information.

Notification changes

Richtext mood messages

New property RICH_MOOD_TEXT was added to PROFILE and USER objects.

New moodmessage related commands are:

Wallpapers
New GET WALLPAPER and SET WALLPAPER commands. Refer to GET/SET WALLPAPERS section.

Public chats

New CHATMEMBER object.

New CHAT object properties:

New CHATMESSAGE properties:

Modified CHATMESSAGE property TYPE enumerations for PROTOCOL 7:

The BODY property of a CHATMESSAGE object is now read-write. Refer to SET CHATMESSAGE BODY command for more information.

New CHATMEMBER related commands are:

New CHAT commands:

CHAT CREATE no longer requires usernames, if you provide no usernames a general multichat is created.

Change in text value parsing: all texts which include whitespace must be quoted.

Skype 2.6 Release notes

Voice API
New CALL object properties:

New Voice API related commands:

Refer to Voice Streams section for more information.

SMS API

New object: SMS

New SMS related commands:

Shared contact groups
New GROUP object types, (protocol 6):

New commands related to shared groups:

Refer to ALTER GROUP SHARE command for more information.

Call cost information

New CALL object properties

Refer to Call cost information section for more information.

Chat Bookmarks
New CHAT object property: BOOKMARKED

New commands related to shared groups:

Refer to ALTER CHAT BOOKMARKED section for more information.

Various new object properties:

Various new commands:

GET_CONFERENCE_PARTICIPANT_COUNT now reports the number of conference call participants more correctly.

VOICEMAIL command enters the deprecation process and is replaced by new command: CALLVOICEMAIL

PONG reply to PING is now asynchronous.

Skype 1.4 Release Notes

Date: 2005-09-16
Changes and fixes:

Skype 1.3.0.42 release notes

Date: 2005-06-11
Changes and fixes:

Skype 1.2.0.11 release notes

Date: 2005-03-04
Changes and fixes:

Skype 1.1.0.61 release notes

Date: 2005-01-12
Changes and fixes:

Skype 1.0.0.94 release notes

Date: 2004-10-21
Changes and fixes:

Release of Skype public API.