Open Collaboration Services v1.6

Frank Karlitschek ?MailTo(karlitschek AT kde.org)

OCS Mailinglist

Changelog

Differences between 1.5 and 1.6 PERSON:

  • man -> male extended-attributes: add lastmodified CONTENT:

  • voting. support for votes from 0 to 100 gpgfingerprint to content add,edit,download,get gpgsignature to content add,edit,download,get support packagenamer/repository in add,edit,download add a summary field add a feedbackurl list add support for search for distributions or licenses add support for icons to list and get support for video files support to fetch recommendations. COMMENTS:

  • voting PRIVATEDATA:

  • new module FORUM:

  • new module BUILDSERVICE:

  • new module

Purpose

integration of web communities and web bases services into desktop and mobile applications. free, secure, privacy protected, vendor independent.

Examples

  • show all my friends on my desktop and make it possible to contact them via email, messaging, instant messaging, screensharing or other.
  • find online support information and show them directly in the application
  • show other people with similar interests or from the same city and enable filesharing and collaboration
  • show the activities of my friends on my desktop
  • show related free software events in my region in my calendar.
  • make it possible for a person to become a "friend" of a developer and a fan of an application
  • find other people to work together on one document. (collaboration)
  • find other people with the same hardware to get help and exchange tips.
  • show kde related and personalized news directly on the desktop

Naming

  • client - the desktop or mobile application, web frontend or proxy who access the services.
  • service provider - web bases application, webservices or online communities who provide open collaboration services.
  • provider file - a xml configuration file which maps clients to service providers

Requirements

Performance / Scalability

the services should be usable by millions of people at the same time. because of that it is important to build the architecture in a scalable way. every component of the architecture must be cluster enabled. this means that it must be possible to implement every service or component in a server cluster.

Security

the data transfer should be encrypted if possible.

Privacy

it is essential to respect the privacy requirements of the people. every person must have full control over the personal information.

Vendor Independent

it is important for an application to be independent of a specific websites or services because of that we use independent provider files who map the clients to the service providers. For example the KDE project has provider files hosted on the KDE.org server who contains a list of providers who are providing a specific service. So the application maintainer has full control over which content and services are accessed by the application (client)

Architecture

REST

We use REST for the webservices calls. Unlike, for example SOAP, REST is very, lightweight, easy to learn and implement and cachable. REST is very widespread in the internet and is used by other popular webservices. REST support is integrated into various web or desktop frameworks and it is platform and technology independent The data exchange format is XML. If you add the format=json parameter you can also get the data in JSON format.

SSL

we suggest to use ssl to encrypt the data transfer between client and service providers. unencrypted data transfer is also possible when a SSL it too expensive or slow.

Authentication

most services require a authenticated user. this is important for legal reasons. and to prevent DOS attacks. At the moment we support autentification via login/password or an API key. You have to get the API key from the service provider We will support OpenID in a later version of the specification.

example login/password

https://frank:password@api.opendesktop.org/v1/activity?page=3

example api key

https://API5142830791365744186814934@api.opendesktop.org/v1/activity?page=3

Proxy

it is possible to implement proxy service provider to integrate other proprietary webservices.

Date Format

All date and time data is in ISO 8601 format.

Services

the applications or websites do not have to support every service. We suggest to implement only the services into the clients or service providers which are usefull for the users at this point.

At the moment there are the following services:

  • CONFIG
  • PERSON
  • FRIEND
  • MESSAGE
  • ACTIVITY
  • CONTENT
  • FAN
  • KNOWLEDGEBASE
  • EVENT
  • COMMENTS
  • PRIVATE DATA
  • FORUM
  • ...more to come later

Error Reporting

every response xml contains a "status", "statuscode" and a "message" tag. the status tag has only two possible values. "ok" or "failed". If the status is "failed" you can get a human readable errortext from the "message" tag. Examples of errormessages are: "data is private" or "person not found". You get a machine readable status in the "statuscode" tag. Statuscode 100 means "request sucessful", 999 means "unknown request". All other codes are specific to the called method and described below.

Versioning

we support versioning of the service specifications. so if we break the api in an incompatible way we can use a new version number and still keep the old API for legacy applications(client) please note that the api is currently in draft state. so it will change in the future

Provider files

it is important to decouple the applications from the services. so we suggest to use provider files to control the mapping of applications to service providers. if an application wants to access a services it first gets the provider file to get the list of available providers. than it can access the different providers and merge the results. An example provider file:

<providers>

<provider>
 <id>opendesktop</id>
 <location>https://api.opendesktop.org/v1/</location>
 <name>openDesktop.org</name>
 <icon></icon>
 <termsofuse>https://opendesktop.org/terms/</termsofuse>
 <register>https://opendesktop.org/usermanager/new.php</register>
 <services>
   <person ocsversion="1.3" />
   <friend ocsversion="1.3" />
   <message ocsversion="1.3" />
   <activity ocsversion="1.3" />
   <content ocsversion="1.3" />
   <fan ocsversion="1.3" />
   <knowledgebase ocsversion="1.3" />
   <event ocsversion="1.3" />
 </services>
</provider>

<provider>
 <id>testy</id>
 <location>http://api.foo.org</location>
 <name>Foo provider</name>
 <icon></icon>
 <termsofuse>https://foo.org/terms/</termsofuse>
 <register>https://foo.org/register.php</register>
 <services>
   <person ocsversion="1.5" />
   <friend ocsversion="1.3" />
   <message ocsversion="1.3" />
   <knowledgebase ocsversion="1.2" />
   <event ocsversion="1.1" />
 </services>
</provider>

</providers>

The KDE provider file is here: http://download.kde.org/ocs/providers.xml

Service Specifications

CONFIG

config

get some basic API configuration information

  • Syntax: /v1/config
  • Method: GET
  • Statuscodes:

    ok 100 1.4 openDesktop.org api.openDesktop.org frank@openDesktop.org true

PERSON

The PERSON service is handling the access to user data. you can search people and access personal data of other people of the person made the information public. The personids are stored and shown case sensitive. But if you want to reference a person the personid is case insensitive.

check

Check if the given login and password or the API key is valid. It returns the associated username.

  • Syntax: /v1/person/check
  • Method: POST
  • POST Arguments: login - The login or the API key
  • POST Arguments: password - The password
  • Mandatory fields: "login"
  • Statuscodes:

    • 100 - successfull / valid account
    • 101 - please specify all mandatory fields
    • 102 - login not valid Example: POST http://api.opendesktop.org/v1/person/check postdata: login="frank" password="123456" Checks if frank,123456 is a valid account. Example:

    ok 100 frank

add

Registers a new user account on the server. The users still have to approve the account by clicking on a link in a confirmation email to activate the account. Only alphanumeric characters are allowed and the password has to be 8 characters or longer.

  • Syntax: /v1/person/add
  • Method: POST
  • POST Arguments: login - The login or the API key
  • POST Arguments: password - The password
  • POST Arguments: firstname - The firstname of the user
  • POST Arguments: lastname - The lastname of the user
  • POST Arguments: email - the email address. the address must be valid, because the user gets a confirmation email to this address.
  • Mandatory fields: "login", "password", "firstname", "lastname" and "email"
  • Statuscodes:

    • 100 - successfull / valid account
    • 101 - please specify all mandatory fields
    • 102 - please specify a valid password
    • 103 - please specify a valid login
    • 104 - login already exists
    • 105 - email already taken
    • 106 - email invalid Example: POST http://api.opendesktop.org/v1/person/add postdata: login="frank" password="123456" firstname="Frank" lastname="Karlitschek" email="karlitschek@kde.org" registers a new user account. Example:

    ok 100

find a specific list of persons. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header. It is not possible to get a list of more than 1000 people because of privacy issues.

  • Syntax: /v1/person/data
  • HTTP method: GET
  • url arguments: name - A part of the name or personid you want to search for.
  • url arguments: country - The country id of the country you want to search in.
  • url arguments: city - The name of the city as a string.
  • url arguments: description - A string you want to search for in the description and other fields of the person.
  • url arguments: pc - A string you want to search for in the pc/hardware field of the person.
  • url arguments: software - A string you want to search for in the software field of the person.
  • url arguments: longitude - The longitude of the position where you want to find people.
  • url arguments: latitude - The latitude of the position where you want to find people.
  • url arguments: distance - The maximum distance of the person to you longitude/latitude position. if you specify the latitude and longitude but no distance the resultset will be ordered by distance. The unit of the distance parameter is degrees.
  • url arguments: attributeapp - The applicationname or namespace of the attribute.
  • url arguments: attributekey - The key of the attribute.
  • url arguments: attributevalue - The value of the attribute.
  • url arguments: page - The content page. You can control the size of a page with the pagesize parameter. The first page is 0, the second is 1, ...
  • url arguments: pagesize - The amount of entries your get per page.
  • Statuscodes:
    • 100 - successfull
    • 102 - more than 1000 people found. it is not allowed to fetch such a big resultset. please specify more search conditions
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Result: personlist xml Example: GET http://frank:password@api.opendesktop.org/v1/person/data?name=eter&city=don&description=development&latitude=11.2&longitude=22&distance=0.5&page=2&pagesize=10 Gets the third page of the search result list from the search for person where "eter" is in the nickname, firstname or lastname and "don" is in the city and who is interested in "development" and who lived near latitude:11.2 and longitude:22.0 witch a tolerance of 0.5

Example:

<ocs>
 <meta>
  <status>ok</status>
  <statuscode>100</statuscode>
  <message></message>
  <totalitems>2</totalitems>
  <itemsperpage>10</itemsperpage>
 </meta>
 <data>
  <person details="summary">
   <personid>Testy</personid>
   <privacy>0</privacy>
   <privacytext>public</privacytext>
   <firstname>Peter</firstname>
   <lastname>-</lastname>
   <company></company>
   <gender></gender>
   <communityrole></communityrole>
   <city>London</city>
   <country></country>
  </person>
  <person details="summary">
   <personid>peter</personid>
   <privacy>0</privacy>
   <privacytext>public</privacytext>
   <firstname>Frank</firstname>
   <lastname>Test</lastname>
   <company>company</company>
   <gender>male</gender>
   <communityrole></communityrole>
   <city>London</city>
   <country></country>
  </person>
 </data>
</ocs>

get

get the data from one specific person. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/person/data/"personid"/
  • HTTP method: GET
  • Arguments: personid - Id of a person. for example "frank"
  • Result: person xml
  • Statuscodes:
    • 100 - successfull
    • 101 - person not found
    • 102 - data is private
  • Example: GET http://frank:password@api.opendesktop.org/v1/person/data/frank Example:

    ok 100 Frank 1 visible only for registered users Frank Test male developer openDesktop.org www.facebook.com/foo Facebook http://openDesktop.org/img/socialicons/emblem-facebook.png opendesktop.org http://www.KDE-Look.org/CONTENT/user-pics/0/Frank.jpg 1 http://www.KDE-Look.org/CONTENT/user-bigpics/0/Frank.jpg 1 1973-07-25 working Stuttgart Germany karli kde-dev, plasma irc://irc.freenode.org/kde-dev irc://irc.freenode.org/plasma lot of stuff nothing travel english php, c++ nin fightclub ut3 http://www.KDE-Look.org/usermanager/search.php?username=Frank

get self

get the data from yourself. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/person/self
  • HTTP method: GET
  • Result: person xml
  • Statuscodes:
    • 100 - successfull
  • Example: GET http://frank:password@api.opendesktop.org/v1/person/self Example:

    ok 100 Frank 1 visible only for registered users Frank Test male developer opendesktop.org opendesktop.org http://www.KDE-Look.org/CONTENT/user-pics/0/Frank.jpg 1 http://www.KDE-Look.org/CONTENT/user-bigpics/0/Frank.jpg 1 1973-07-25 working Stuttgart Germany karli kde-dev, plasma irc://irc.freenode.org/kde-dev irc://irc.freenode.org/plasma lot of stuff nothing travel english php, c++ nin fightclub ut3 http://www.KDE-Look.org/usermanager/search.php?username=Frank

edit

Update the latitude, longitude, city and country of myself. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/person/self
  • Method: POST
  • POST Arguments: latitude - The latitude of myself
  • POST Arguments: longitude - The longitude of myself
  • POST Arguments: city - Your city
  • POST Arguments: country - The 2 letter ISO country code
  • Statuscodes:

    ok 100

balance

Get the account balance of a user.

get attributes

Gets the list of extended attributes of a person. You can store several attributes to you person record which are publicly readable for everybody. The attributes are key/value pairs with an "app" parameter as namespace. Store data which is only interesting for your application with your application name as a app namespace. If the data is of general interest use "global" as app parameter. The parameter "app" and "key" are optional in the url. So you access all the attributes from the person or only the attributes from a specific application or the only the value of one specific key. You can search for users which have specific attributes with the search method. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/person/attributes/"personid"/"app"/"key"
  • HTTP method: GET
  • Arguments: personid - The person from which you want to get the attributes.
  • Arguments: app - The application from which you want to get the attributes. This parameter is optional.
  • Arguments: key - The key of the attribute you want to get. This parameter is optional.
  • Statuscodes:

    ok 100 1 parley language english, german 2007-11-01T22:45:20+01:00

set attribute

Set a attribute of a person. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/person/setattribute/"app"/"key"
  • HTTP method: POST
  • Arguments: app - The application where you want to store this attribute at.
  • Arguments: key - The key of the attribute.
  • POST arguments: value - The value of the attribute.
  • Statuscodes:

    ok 100

delete attribute

Delete a attribute of a person. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

FRIEND

The FRIEND service is for handling friendship relations between people. you can get the friends of a specific person or from yourself. You can invite other persons as a friend and manage the invitations.

get

Gets the list of friends from a person. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/friend/data/"personid"
  • HTTP method: GET
  • Arguments: personid - The person from which you want to get the friendslist.
  • URL Arguments: page - The page of the friendslist. The size of a page is controlled by the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Statuscodes:

    ok 100 3 10 cornelius dave fen

receivedinvitations

Gets the list of friendship invitations. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/friend/receivedinvitations
  • HTTP method: GET
  • URL Arguments: page - The page of the list. The size of a page is controlled by the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Statuscodes:

    ok 100 1 10 testy

sentinvitations

Gets the list of sent friendship invitations. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/friend/sentinvitations
  • HTTP method: GET
  • URL Arguments: page - The page of the list. The size of a page is controlled by the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Statuscodes:

    ok 100 1 10 testy

invite

Invite a person to become a friend. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/friend/invite/"personid"
  • Method: POST
  • Arguments: personid - The person you want to invite as a friend.
  • POST arguments: message - The message you want to send to the person together with your invitation.
  • Statuscodes:

    ok

approve

Approve a friendship request. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

decline

Decline a friendship request. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

cancel

Cancel a friendship with a user. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

MESSAGE

The MESSAGE services can be used to send and receive messages. this is always possible even if you don't know the real email address of the other person. The messages are stored in different folders. if you want to access a special folder like for example the inbox you should search in the folders list for a folder with the type "inbox" to get the right folder id.

folders

Gets a list of the availabe message folders. You need the ids if you want to access the folders via messagelist. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

list

Gets the list of messages from a specific folder. the messages are sorted in chronological order. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/message/"folder"
  • HTTP method: GET
  • Arguments: folder - The ID of the folder you want to get. Use the folders method to get the list of folders.
  • URL Arguments: status - Show only messages with the specified status. Possible values are: 0-unread, 1-read, 2-replyed
  • URL Arguments: page - The content page. The amount of entries can be controlled by the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: messagelist xml
    • Status: 0 - unread
    • Status: 1 - read
    • Status: 2 - answered
  • Statuscodes:

    ok 100 2 10 8490 testy Frank Karlitschek http://www.opendesktop.org/usermanager/search.php?username=Frank Frank 2008-08-10T16:03:59+02:00 1 test message Sorry for bothering but did you ... 8491 testy1 Testy TTT http://www.opendesktop.org/usermanager/search.php?username=testy1 Frank1 2008-08-12T16:03:59+02:00 1 test message Testy 2 ...

get

Get a message. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header. the message will be marked as "read" if you access it with this method.

  • Syntax: /v1/message/"folderid"/"messageid"
  • HTTP method: GET
  • Arguments: folderid - The ID of the folder. Use the folders method to get the list of folders.
  • Arguments: messageid - The ID of the message you want to get.
  • Result: message xml
    • Status: 0 - unread
    • Status: 1 - read
    • Status: 2 - answered
  • Statuscodes:

    ok 100 8490 testy Test TTT http://www.opendesktop.org/usermanager/search.php?username=testy Frank 2008-08-10T16:03:59+02:00 1 test message Sorry for bothering but did you ...

send

Send a message. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/message/"sendfolder"
  • HTTP method: POST
  • POST Arguments: to - The receiver of the message.
  • POST Arguments: subject - The subject of the message.
  • POST Arguments: message - The text you want to send.
  • Result: status xml
  • Statuscodes:
    • 100 - successfull
    • 101 - user not found
    • 102 - subject or message not found
    • 103 - you can not send a message to yourself.
  • Example: POST http://frank:password@api.opendesktop.org/v1/message/2 postdata message="coding is fun" subject="hello" to=frank
  • Send a message to "frank" with the subject "hello" and a messagebody "coding is fun" Example:

    ok

ACTIVITY

You can use the ACTIVITY services to see what is going on in your friends network. For example who visited you homepage, wo has send you a message and who uploaded a new content to the website. You can also post a microblogging message which is vivible on you profile page and in the activities of your friends. The entries are sorted by timestamp.

get

Gets the list of activities. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/activity
  • HTTP method: GET
  • URL Arguments: page - The activities page. The amount of entris per page is controlled by the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: activities xml
  • type categories:
    • 1 - status message
    • 2 - new friend
    • 3 - new content upload
    • 4 - profile update
    • 5 - profile photo update
    • 6 - content edit
    • 7 - new message
    • 8 - homepage visit
    • 9 - become fan
    • 10 - no longer fan
    • 11 - group created
    • 12 - group joined
    • 13 - group left
    • 14 - event created
    • 15 - attending the event
    • 16 - no longer attending the event
    • 17 - created the job offer
    • 18 - edited the job offer
    • 19 - has registered (new user)
  • Statuscodes:
    • 100 - successfull
  • Example: GET http://frank:password@api.opendesktop.org/v1/activity?page=3&pagesize=10
  • Gets the third page of the activities of person "frank" Example:

    ok 100 2 10 42 testy2 Test Te /usermanager/search.php?username=testy2 http://www.opendesktop.org/usermanager/nopic.png 2008-08-01T20:30:19+02:00 6 testy2 has updated: "Extract And Compress" http://www.KDE-Look.org/content/show.php?content=84206 43 foobar2 Foo Bar /usermanager/search.php?username=foobar2 http://www.opendesktop.org/usermanager/nopic.png 2008-08-02T19:38:10+02:00 6 foobar2 has updated: "Arezzo" http://www.KDE-Look.org/content/show.php?content=84403

put

Updates your activities. This is microblogging like Twitter. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • POST: /v1/activity
  • POST Arguments: message - The text you want to post.
  • Result: status xml
  • Example: POST http://frank:password@api.opendesktop.org/v1/activity postdata message="coding is fun"
  • Posts the text "coding is fun" to franks hompage and the activities of franks friends.
  • Statuscodes:

    • 100 - successful
    • 101 - empty message
    • 102 - user not found Example:

    ok

CONTENT

categories

Get a list of all available content categories.

  • Syntax: /v1/content/categories
  • HTTP Method: GET
  • Result: categories xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: GET http://frank:password@api.opendesktop.org/v1/content/categories Example:

    ok 100 4 1 KDE Wallpaper 640x480 2 KDE Wallpaper 800x600 3 KDE Wallpaper 1024x768 4 KDE Wallpaper 1280x1024

licenses

Get a list of all possible licenses. The IDs can be alphanumeric. The IDs should follow "liblicense" if possible.

  • Syntax: /v1/content/licenses
  • HTTP Method: GET
  • Result: categories xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: GET http://frank:password@api.opendesktop.org/v1/content/licenses Example:

    ok 100 17 1000 3 Artistic 2.0 http://dev.perl.org/perl6/rfc/346.html 6 BSD http://www.opensource.org/licenses/bsd-license.php

distributions

Get a list of all possible distributions. The IDs can be alphanumeric.

  • Syntax: /v1/content/distributions
  • HTTP Method: GET
  • Result: categories xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: GET http://frank:password@api.opendesktop.org/v1/content/distributions Example:

    ok 100 23 0 2200 Arch 2000 Ark 1100 Debian

dependencies

Get a list of all possible dependencies.

  • Syntax: /v1/content/dependencies
  • HTTP Method: GET
  • Result: categories xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: GET http://frank:password@api.opendesktop.org/v1/content/dependencies Example:

    ok 100 36 0 30 GNOME 1.x 31 GNOME 2.x 20 GTK 1.x

homepagetypes

Get a list of all possible homepagetypes.

  • Syntax: /v1/content/homepages
  • HTTP Method: GET
  • Result: categories xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: GET http://frank:password@api.opendesktop.org/v1/content/homepages Example:

    ok 100 14 0 &nbsp; 10 Blog 20 Facebook

list

Gets a list of a specific set of contents.

  • Syntax: /v1/content/data/
  • HTTP Method: GET
  • URL Arguments: categories - Ids of the requested category ids seperated by "x".
  • URL Arguments: search - the part of the name of the item you want to find.
  • URL Arguments: user - show only contents from one specific user.
  • URL Arguments: external - if set external=off only contents which are hosted on the same server are shown
  • URL Arguments: distribution - show only content which is supported by this distributions. the parameter is a comma seperated list of ids as returned by the "distribution" method
  • URL Arguments: license - show only content which is available under a specific license. the parameter is a comma seperated list of ids as returned by the "license" method
  • URL Arguments: sortmode - The sortmode of the list. Possible values are: "new" - newest first , "alpha" - alphabetical, "high" - highest rated, "down" - most downloads
  • URL Arguments: page - The content page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: content xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: http://frank:password@api.opendesktop.org/v1/content/data?categories=1x2x3x4&search=foo&sortmode=new&page=1 Gets the second page of the list of the newest contents from categories 1,2,3 and 4 with the string foo in the name. Example:

    ok 100 2 10 1420 name 11122 2007-11-24T22:41:08+01:00 2007-11-01T22:28:24+01:00 6 KDE Wallpaper (other) Frank http://www.opendesktop.org/usermanager/search.php?username=Frank 5 50 0 http://www.KDE-Look.org/content/preview.php?preview=1&id=1420&file1=1420-1.png&file2=1420-2.png&file3=&name=nameeee http://www.KDE-Look.org/CONTENT/content-pre1/1420-1.png 1422 testy2 11

    this is a short summary 2007-11-01T22:45:20+01:00 2007-11-01T22:43:21+01:00 7 KDE Wallpaper (SVG) Frank 8 50 0 http://www.KDE-Look.org/content/preview.php?preview=1&id=1422&file1=1422-1.jpg&file2=1422-2.png&file3=1422-3.png&name=vdfdds222 http://www.KDE-Look.org/CONTENT/content-pre1/1422-1.jpg http://www.KDE-Look.org/img/icon1.png http://www.KDE-Look.org/img/icon2.png http://www.KDE-Look.org/img/icon2.png http://www.KDE-Look.org/CONTENT/content-m1/m1421-1.png 1 Fedora 2.99 http://www.opendesktop.org/content/buy.php?content=1422&id=1 pay item 1 2 Ubuntu 0 http://www.opendesktop.org/content/download.php?content=1422&id=2 free download SUSE 0 http://www.opendesktop.org/content/download.php?content=1422&id=3 free item http://www.KDE-Look.org/content/show.php?content=100

get

Read content data of one specific content.

  • Syntax: /v1/content/data/"contentid"/
  • HTTP Method: GET
  • Arguments: contentid - Id of a content
  • Result: content xml
  • Statuscodes:
    • 100 - successfull
    • 101 - content not found
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: http://frank:password@api.opendesktop.org/v1/content/data/12345 Example:

    ok 100 100 GradE8 10 Theme/Style for KDE 2.1 Hans 2001-09-28T18:45:40+02:00 2001-09-28T18:45:40+02:00 2 67 his is my first KDE 2.0 theme. It isn't the final version, I must add some icons etc...

    this is a short summary http://openDesktop.org/feedback http://en.wikipedia.org/foo111 Wikipedia http://myhomepage.com Blog http://www.opendesktop.org/content/donation.php?content=123 0 http://www.opendesktop.org/content/show.php?content=100 22 http://www.opendesktop.org/content/show.php?action=fan&content=100 7 http://www.opendesktop.org/content/show.php?action=knowledgebase&content=100 http://www.KDE-Look.org/content/preview.php?preview=1&id=100&file1=100-1.jpg&file2=&file3=&name=GradE8 http://www.KDE-Look.org/CONTENT/content-pre1/100-1.jpg http://www.KDE-Look.org/CONTENT/content-m1/m100-1.png http://www.KDE-Look.org/img/icon1.png http://www.KDE-Look.org/img/icon2.png http://www.KDE-Look.org/img/icon2.png http://www.KDE-Look.org/content/show.php?content=100 1 Fedora 0 http://www.opendesktop.org/content/download.php?content=1423&id=2 gdfgd22 2 6AD9 150F D8CC 941B 4541 2DCC 68B7 AB89 5754 8D2D iEYEABECAAYFAkxT52oACgkQMNASEGDVgdegPAbDSMHn/xDQCfSplogMr9x0G0ZNqMUAn3WLVmXADVzWdEToTJ8B5wpdm3zb=A6Dy packname repo Fedora 2.99 http://www.opendesktop.org/content/buy.php?content=1423&id=1 gdgg22 6AD9 150F D8CC 941B 4541 2DCC 68B7 AB89 5754 8D2D iEYEABECAAYFAkxT52oACgkQMNASEGDVgdegPAbDSMHn/xDQCfSplogMr9x0G0ZNqMUAn3WLVmXADVzWdEToTJ8B5wpdm3zb=A6Dy packname repo

download

Download or buy one specific content item. links to the package and links to repositories are supported. You get the dowloadlink or the packagename/packagerepository comination in the XML.

  • Syntax: /v1/content/download/"contentid"/"itemid"
  • HTTP Method: GET
  • Arguments: contentid - Id of a content
  • Arguments: itemid - Id of a content
  • Result: status xml
  • Statuscodes:
    • 100 - successfull
    • 101 - content not found
    • 102 - payment failed
    • 103 - content item not found
    • 104 - please login to buy this content
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: http://api.opendesktop.org/v1/content/download/12345/2 Example:

    ok 100 0 http://www......tar.gz image/jpeg glibc-2.10.1-10.4.i686.rpm http://download.opensuse.org/distribution/11.2/repo/oss/ 6AD9 150F D8CC 941B 4541 2DCC 68B7 AB89 5754 8D2D iEYEABECAAYFAkxT52oACgkQMNASEGDVgdegPAbDSMHn/xDQCfSplogMr9x0G0ZNqMUAn3WLVmXADVzWdEToTJ8B5wpdm3zb=A6Dy

vote

Vote for one specific content.

  • Syntax: /v1/content/vote/"contentid"
  • HTTP Method: POST
  • Arguments: contentid - Id of a content
  • POST Arguments: vote - The vote. "good" or "bad" (deprecated) or an integer between 0 to 100. 0 equals bad and 100 equals good
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - content not found
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: http://api.opendesktop.org/v1/content/vote/12345 with the POST variable vote=good Example:

    ok

add

Add a new content entry:

  • Syntax: v1/content/add
  • HTTP Method: POST
  • POST Arguments: name - the name of the entry
  • POST Arguments: type - the type or category of the entry. call the categories method to get a list of all categories.
  • POST Arguments: depend - the dependency of this entry. get the possible values by calling /v1/content/dependencies
  • POST Arguments: downloadtyp1 - the type of the first download. possible values are: 0 - use the uploaded file, 1 - use the downloadlink1, 2 - use downloadpackagename and downloadrepository
  • POST Arguments: downloadname1 - the name of the 1. downloadlink
  • POST Arguments: downloadlink1 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype1 - the type of the distribution for the download. call /v1/content/distributions for a list of possible options
  • POST Arguments: downloadbuy1 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason1 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice1 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint1 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature1 - the gpg signature of this download
  • POST Arguments: downloadpackagename1 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository1 - the repository where the package is located
  • POST Arguments: downloadname2 - the name of the downloadlink
  • POST Arguments: downloadlink2 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype2 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy2 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason2 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice2 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint2 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature2 - the gpg signature of this download
  • POST Arguments: downloadpackagename2 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository2 - the repository where the package is located
  • POST Arguments: downloadname3 - the name of the downloadlink
  • POST Arguments: downloadlink3 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype3 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy3 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason3 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice3 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint3 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature3 - the gpg signature of this download
  • POST Arguments: downloadpackagename3 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository3 - the repository where the package is located
  • POST Arguments: downloadname4 - the name of the downloadlink
  • POST Arguments: downloadlink4 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype4 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy4 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason4 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice4 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint4 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature4 - the gpg signature of this download
  • POST Arguments: downloadpackagename4 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository4 - the repository where the package is located
  • POST Arguments: downloadname5 - the name of the downloadlink
  • POST Arguments: downloadlink5 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype5 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy5 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason5 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice5 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint5 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature5 - the gpg signature of this download
  • POST Arguments: downloadpackagename5 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository5 - the repository where the package is located
  • POST Arguments: downloadname6 - the name of the downloadlink
  • POST Arguments: downloadlink6 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype6 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy6 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason6 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice6 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint6 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature5 - the gpg signature of this download
  • POST Arguments: downloadpackagename6 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository6 - the repository where the package is located
  • POST Arguments: downloadname7 - the name of the downloadlink
  • POST Arguments: downloadlink7 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype7 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy7 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason7 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice7 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint7 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature7 - the gpg signature of this download
  • POST Arguments: downloadpackagename7 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository7 - the repository where the package is located
  • POST Arguments: downloadname8 - the name of the downloadlink
  • POST Arguments: downloadlink8 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype8 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy8 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason8 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice8 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint8 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature8 - the gpg signature of this download
  • POST Arguments: downloadpackagename8 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository8 - the repository where the package is located
  • POST Arguments: downloadname9 - the name of the downloadlink
  • POST Arguments: downloadlink9 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype9 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy9 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason9 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice9 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint9 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature9 - the gpg signature of this download
  • POST Arguments: downloadpackagename9 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository9 - the repository where the package is located
  • POST Arguments: downloadname10 - the name of the downloadlink
  • POST Arguments: downloadlink10 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype10 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy10 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason10 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice10 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint10 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature10 - the gpg signature of this download
  • POST Arguments: downloadpackagename10 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository10 - the repository where the package is located
  • POST Arguments: downloadname11 - the name of the downloadlink
  • POST Arguments: downloadlink11 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype11 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy11 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason11 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice11 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint11 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature11 - the gpg signature of this download
  • POST Arguments: downloadpackagename11 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository11 - the repository where the package is located
  • POST Arguments: downloadname12 - the name of the downloadlink
  • POST Arguments: downloadlink12 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype12 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy12 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason12 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice12 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint12 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature12 - the gpg signature of this download
  • POST Arguments: downloadpackagename12 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository12 - the repository where the package is located
  • POST Arguments: description - a description text of the entry
  • POST Arguments: summary - a short summary of the entry
  • POST Arguments: licensetype - the license this content is under. get the possible values by calling /v1/content/licenses
  • POST Arguments: license - the license text
  • POST Arguments: feedbackurl - a link to the page where users can post feedback
  • POST Arguments: homepage - a link to the homepage of the entry
  • POST Arguments: homepagetype - the type of the link. get the possible values by calling /v1/content/homepages
  • POST Arguments: homepage2 - a link to the homepage of the entry
  • POST Arguments: homepagetype2 - the type of the link.
  • POST Arguments: homepage3 - a link to the homepage of the entry
  • POST Arguments: homepagetype3 - the type of the link.
  • POST Arguments: homepage4 - a link to the homepage of the entry
  • POST Arguments: homepagetype4 - the type of the link.
  • POST Arguments: homepage5 - a link to the homepage of the entry
  • POST Arguments: homepagetype5 - the type of the link.
  • POST Arguments: homepage6 - a link to the homepage of the entry
  • POST Arguments: homepagetype6 - the type of the link.
  • POST Arguments: homepage7 - a link to the homepage of the entry
  • POST Arguments: homepagetype7 - the type of the link.
  • POST Arguments: homepage8 - a link to the homepage of the entry
  • POST Arguments: homepagetype8 - the type of the link.
  • POST Arguments: homepage9 - a link to the homepage of the entry
  • POST Arguments: homepagetype9 - the type of the link.
  • POST Arguments: homepage10 - a link to the homepage of the entry
  • POST Arguments: homepagetype10 - the type of the link.
  • POST Arguments: video1 - a link to the video file
  • POST Arguments: video2 - a link to the video file
  • POST Arguments: video3 - a link to the video file
  • POST Arguments: version - the version of this entry
  • POST Arguments: changelog - the changelog of this entry
  • POST Arguments: donation - do you want donation for this entry? possible values are "yes" or "" for no donation.
  • POST Arguments: donationreason - a reason we you want a donation
  • POST Arguments: osbsproject - the opensuse build service project id
  • POST Arguments: osbspackage - the opensuse build service package id
  • Result: status xml
  • Mandatory fields: "name" and "type" are mandatory fields
  • Statuscodes:
    • 100 - successful
    • 101 - please specify all mandatory fields
    • 102 - no permission to change content
  • Example: http://api.opendesktop.org/v1/content/add Example:

    ok 100 1234567

edit

Edit a content entry:

  • Syntax: v1/content/edit/"12345"
  • HTTP Method: POST
  • POST Arguments: name - the name of the entry
  • POST Arguments: type - the type or category of the entry. call the categories method to get a list of all categories.
  • POST Arguments: depend - the dependency of this entry. get the possible dependencies by calling /v1/content/dependencies
  • POST Arguments: downloadtyp1 - the type of the first download. possible values are: 0 - use the uploaded file, 1 - use the downloadlink1, 2 - use the downloadpackagename and downloadrepository
  • POST Arguments: downloadname1 - the name of the 1. downloadlink
  • POST Arguments: downloadlink1 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype1 - the type of the distribution for the download. get the possible distributions by calling /v1/content/distributions
  • POST Arguments: downloadbuy1 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason1 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice1 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint1 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature1 - the gpg signature of this download
  • POST Arguments: downloadpackagename1 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository1 - the repository where the package is located
  • POST Arguments: downloadname2 - the name of the downloadlink
  • POST Arguments: downloadlink2 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype2 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy2 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason2 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice2 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint2 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature2 - the gpg signature of this download
  • POST Arguments: downloadpackagename2 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository2 - the repository where the package is located
  • POST Arguments: downloadname3 - the name of the downloadlink
  • POST Arguments: downloadlink3 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype3 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy3 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason3 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice3 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint3 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature3 - the gpg signature of this download
  • POST Arguments: downloadpackagename3 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository3 - the repository where the package is located
  • POST Arguments: downloadname4 - the name of the downloadlink
  • POST Arguments: downloadlink4 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype4 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy4 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason4 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice4 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint4 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature4 - the gpg signature of this download
  • POST Arguments: downloadpackagename4 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository4 - the repository where the package is located
  • POST Arguments: downloadname5 - the name of the downloadlink
  • POST Arguments: downloadlink5 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype5 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy5 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason5 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice5 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint5 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature5 - the gpg signature of this download
  • POST Arguments: downloadpackagename5 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository5 - the repository where the package is located
  • POST Arguments: downloadname6 - the name of the downloadlink
  • POST Arguments: downloadlink6 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype6 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy6 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason6 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice6 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint6 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature6 - the gpg signature of this download
  • POST Arguments: downloadpackagename6 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository6 - the repository where the package is located
  • POST Arguments: downloadname7 - the name of the downloadlink
  • POST Arguments: downloadlink7 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype7 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy7 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason7 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice7 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint7 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature7 - the gpg signature of this download
  • POST Arguments: downloadpackagename7 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository7 - the repository where the package is located
  • POST Arguments: downloadname8 - the name of the downloadlink
  • POST Arguments: downloadlink8 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype8 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy8 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason8 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice8 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint8 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature8 - the gpg signature of this download
  • POST Arguments: downloadpackagename8 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository8 - the repository where the package is located
  • POST Arguments: downloadname9 - the name of the downloadlink
  • POST Arguments: downloadlink9 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype9 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy9 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason9 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice9 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint9 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature9 - the gpg signature of this download
  • POST Arguments: downloadpackagename9 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository9 - the repository where the package is located
  • POST Arguments: downloadname10 - the name of the downloadlink
  • POST Arguments: downloadlink10 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype10 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy10 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason10 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice10 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint10 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature10 - the gpg signature of this download
  • POST Arguments: downloadpackagename10 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository10 - the repository where the package is located
  • POST Arguments: downloadname11 - the name of the downloadlink
  • POST Arguments: downloadlink11 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype11 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy11 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason11 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice11 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint11 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature11 - the gpg signature of this download
  • POST Arguments: downloadpackagename11 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository11 - the repository where the package is located
  • POST Arguments: downloadname12 - the name of the downloadlink
  • POST Arguments: downloadlink12 - the url of the downloadlink
  • POST Arguments: downloaddistributiontype12 - the type of the distribution for the download. the types are described at downloaddistributiontype1.
  • POST Arguments: downloadbuy12 - is this download free or paid. 0 - free, 1 - paid.
  • POST Arguments: downloadbuyreason12 - the description why is content is not for free.
  • POST Arguments: downloadbuyprice12 - the price of this content in USD.
  • POST Arguments: downloadgpgfingerprint12 - the gpg fingerprint of this download
  • POST Arguments: downloadgpgsignature12 - the gpg signature of this download
  • POST Arguments: downloadpackagename12 - the name of the package in the repository
  • POST Arguments: downloadpackagerepository12 - the repository where the package is located
  • POST Arguments: description - a description text of the entry
  • POST Arguments: summary - a short summary of the entry
  • POST Arguments: licensetype - the license this content is under. get the possible values by calling /v1/content/licenses
  • POST Arguments: license - the license text
  • POST Arguments: feedbackurl - a link to the page where users can post feedback
  • POST Arguments: homepage - a link to the homepage of the entry
  • POST Arguments: homepagetype - the type of the link. get the possible values by calling /v1/content/homepages
  • POST Arguments: homepage2 - a link to the homepage of the entry
  • POST Arguments: homepagetype2 - the type of the link.
  • POST Arguments: homepage3 - a link to the homepage of the entry
  • POST Arguments: homepagetype3 - the type of the link.
  • POST Arguments: homepage4 - a link to the homepage of the entry
  • POST Arguments: homepagetype4 - the type of the link.
  • POST Arguments: homepage5 - a link to the homepage of the entry
  • POST Arguments: homepagetype5 - the type of the link.
  • POST Arguments: homepage6 - a link to the homepage of the entry
  • POST Arguments: homepagetype6 - the type of the link.
  • POST Arguments: homepage7 - a link to the homepage of the entry
  • POST Arguments: homepagetype7 - the type of the link.
  • POST Arguments: homepage8 - a link to the homepage of the entry
  • POST Arguments: homepagetype8 - the type of the link.
  • POST Arguments: homepage9 - a link to the homepage of the entry
  • POST Arguments: homepagetype9 - the type of the link.
  • POST Arguments: homepage10 - a link to the homepage of the entry
  • POST Arguments: homepagetype10 - the type of the link.
  • POST Arguments: video1 - a link to the video file
  • POST Arguments: video2 - a link to the video file
  • POST Arguments: video3 - a link to the video file
  • POST Arguments: version - the version of this entry
  • POST Arguments: changelog - the changelog of this entry
  • POST Arguments: donation - do you want donation for this entry? possible values are "yes" or "" for no donation.
  • POST Arguments: donationreason - a reason we you want a donation
  • POST Arguments: osbsproject - the opensuse build service project id
  • POST Arguments: osbspackage - the opensuse build service package id
  • POST Arguments: announceupdate - announce this edit on the frontpage. possible values are 1 - announce, 0 - not announce, the default is 1
  • Result: status xml
  • Mandatory fields: "name" and "type" are mandatory fields
  • Statuscodes:
    • 100 - successful
    • 101 - please specify all mandatory fields
    • 102 - no permission to change content
  • Example: http://api.opendesktop.org/v1/content/edit/12345 Example:

    ok

delete content entry

Delete a content entry:

  • Syntax: v1/content/delete/"contentid"
  • HTTP Method: POST
  • Arguments: contentid - Id of a content
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - no permission to change content
  • Example: http://api.opendesktop.org/v1/content/delete/12345 Example:

    ok

upload new download file

Upload a new download file to a content:

  • Syntax: v1/content/uploaddownload/"contentid"
  • HTTP Method: POST
  • Arguments: contentid - Id of a content
  • POST Arguments: localfile - The file to upload
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - upload error
    • 102 - localfile not found
    • 103 - no permission to change content
  • Example: http://api.opendesktop.org/v1/content/uploaddownload/12345 Example:

    ok

delete download file

Delete the download file from a content:

upload preview image

Upload a new preview image for a content:

  • Syntax: v1/content/uploadpreview/"contentid"/"previewid"
  • HTTP Method: POST
  • Arguments: contentid - Id of a content
  • Arguments: previewid - Id of the preview image. (1,2 or 3)
  • POST Arguments: localfile - The imagefile to upload
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - localfile not found
    • 102 - no permission to change content
    • 103 - preview must be 1, 2 or 3
  • Example: http://api.opendesktop.org/v1/content/uploadpreview/12345/1 Example:

    ok

delete preview image

Delete a preview image from a content:

  • Syntax: v1/content/deletepreview/"contentid"/"previewid"
  • HTTP Method: POST
  • Arguments: contentid - Id of a content
  • Arguments: previewid - Id of the preview image. (1,2 or 3)
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - no permission to change content
    • 102 - preview not found
  • Example: http://api.opendesktop.org/v1/content/deletepreview/12345/1 Example:

    ok

getrecommendation

Gets a list of cross selling for a contentid

  • Syntax: /v1/content/recommendations/"contentid"
  • HTTP Method: GET
  • URL Arguments: contentid - ID of an entry where you want to get similar or other recommended entries for.
  • URL Arguments: page - The content page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: content xml
  • Statuscodes:
    • 100 - successful
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: http://frank:password@api.opendesktop.org/v1/content/recommendations/123/?categories=1x2x3x4&page=1 Gets the second page of the list of recommendations for the content 123 from categories 1,2,3 and 4. Example:

    ok 100 2 10 1422 1223344

FAN

get

Gets a list of fans of a specific content entries. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/fan/data/"contentid"
  • HTTP Method: GET
  • URL Arguments: contentid - Id of the content entry where you want to get the fans is from.
  • URL Arguments: page - The list page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: fan xml
  • Statuscodes:
    • 100 - successful
  • Example: http://frank:password@api.opendesktop.org/v1/fan/data/123&page=1&pagesize=10 Gets the second page of the list of fans of the content with the id 123. The pagesize is 10 Example:

    ok 100 2 10 Frank 2009-08-18T10:40:09+02:00 Test 2009-07-18T11:41:15+02:00

isfan

Check if the current user is fan of a specific content. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/fan/status/"contentid"
  • HTTP Method: GET
  • URL Arguments: contentid - Id of the content entry where you want to get the fan status from.
  • Result: fan xml Possible stati are "fan" or "notfan"
  • Statuscodes:
    • 100 - successful
  • Example: http://frank:password@api.opendesktop.org/v1/fan/status/123 Checks if the user frank is a fan of the content 123 Example:

    ok 100 fan

add

Become a fan of a specific content. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

remove

Remove the user from the fans list of a specific content. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

KNOWLEDGEBASE

list

Gets a list of a specific set of knowledgebase entries. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/knowledgebase/data/
  • HTTP Method: GET
  • URL Arguments: content - Id of the content entry if you want to get knowledgebase entries from a specific content entry.
  • URL Arguments: type - Id of the category type.
  • URL Arguments: search - a keyword you want find in the name, description or answer of a knowledgebase entry.
  • URL Arguments: sortmode - The sortmode of the list. Possible values are: "new" - newest first or "alpha" - alphabetical
  • URL Arguments: page - The list page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: knowledgebase xml
  • Statuscodes:
    • 100 - successful
  • Example: http://frank:password@api.opendesktop.org/v1/knowledgebase/data?content=123&search=foo&sortmode=new&page=1 Gets the second page of the list of the newest knowledgebase entries from content 123 with the string foo in the name, description or answer. Example:

    ok 100 2 10 1 not answered 12345 Application testy 2009-02-07T23:14:11+01:00 app question How can I ........ testy2 0 http://www.opendesktop.org/content/show.php?action=knowledgebase&content=11&kbid=12345 > 2 answered 12345 other testy 2009-02-03T21:11:01+01:00 app question 22 How can I 22........ testy2 0 http://www.opendesktop.org/content/show.php?action=knowledgebase&content=11&kbid=12

get

Read one specific knowledgebase entry. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/knowledgebase/data/"contentid"/
  • HTTP Method: GET
  • Arguments: knowledgebaseid - Id of a knowledgebase entry
  • Result: knowledgebase xml
  • Statuscodes:
    • 100 - successful
    • 101 - entry not found
  • Example: http://frank:password@api.opendesktop.org/v1/knowledgebase/data/12345 Example:

    ok 100 1 not answered 12345 Application testy 2009-02-07T23:14:11+01:00 app question How can I ........ testy2 0 http://www.opendesktop.org/content/show.php?action=knowledgebase&content=11&kbid=12345

add

Add one specific knowledgebase entry. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/knowledgebase/data/
  • HTTP Method: POST
  • POST Argument: subject - Subject of the new knowledgebase item
  • POST Argument: message - Content of the new knowledgebase item
  • POST Argument: content - id of the content entry to be added to if available
  • POST Argument: category - Id of the category to be added to if available.
  • Result: knowledgebase xml
  • Statuscodes:
    • 100 - successful
    • 101 - please specify all mandatory fields
  • Example: http://frank:password@api.opendesktop.org/v1/knowledgebase/data Example:

    ok 100

EVENT

list

Gets a list of a specific set of events. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/event/data/
  • HTTP Method: GET
  • URL Arguments: type - Id of the event type.
  • URL Arguments: country - ISO code of the country.
  • URL Arguments: startat - Earliest possible start date of the events.
  • URL Arguments: search - a keyword you want find in the name or description of a event entry.
  • URL Arguments: sortmode - The sortmode of the list. Possible values are: "new" - newest upcoming events first or "alpha" - alphabetical
  • URL Arguments: page - The list page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • type 10: Party
  • type 15: User Group
  • type 20: Conference
  • type 25: Developer Meeting
  • type 50: Install Party
  • type 1000: otherParty
  • Result: event xml
  • Statuscodes:
    • 100 - successful
  • Example: http://frank:password@api.opendesktop.org/v1/event/data?country=us&startat=01-01-2009&type=10&search=foo&sortmode=new&page=1 Gets the second page of the list of the newest events of 2009 from type party in the US with the string foo in the name or description. Example:

    ok 100 2 10 4 Test Party Party 2010-08-02T00:00:00+02:00 2011-10-03T00:00:00+02:00 Frank Stuttgart Germany 9.183 48.767 2009-05-18T14:03:55+02:00 2 2 http://www.opendesktop.org/events/?id=4 3 Another Party Party 1979-01-01T01:00:01+01:00 1979-01-01T01:00:01+01:00 Frank Stuttgart Germany 1.2 1.1 2009-05-16T00:25:31+02:00 0 1 http://www.opendesktop.org/events/?id=3

get

Read one specific event entry. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/event/data/"eventid"/
  • HTTP Method: GET
  • Arguments: eventid - Id of a event entry
  • Result: event xml
  • Statuscodes:
    • 100 - successful
    • 101 - entry not found
  • Example: http://frank:password@api.opendesktop.org/v1/event/data/12345 Example:

    ok 100 6 bbb here is the description text Party 1970-01-01T00:00:00+01:00 1970-01-01T00:00:00+01:00 Frank Germany 0 0 2009-05-18T18:49:15+02:00 1 2 http://www.opendesktop.org/events/?id=6 http://www.opendesktop.org/CONTENT/event-badge/0/6.png

add

Add a new event entry. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: v1/event/add
  • HTTP Method: POST
  • POST Arguments: name - the name of the entry
  • POST Arguments: category - the category of the event. possible values are:
  • 10 - Party
  • 15 - User Group
  • 20 - Conference
  • 25 - Developer Meeting
  • 50 - Install Party
  • 1000 - other
  • POST Arguments: description - the description text of the event.
  • POST Arguments: startdate - the startdate of the event.
  • POST Arguments: enddate - the enddate of the event
  • POST Arguments: organizer - the organizer of the event.
  • POST Arguments: location - the location where the event takes place.
  • POST Arguments: city - the city.
  • POST Arguments: country - the 2 letter iso code of the country.
  • POST Arguments: longitude - the longitude of the event.
  • POST Arguments: latitude - the latitude of the event.
  • POST Arguments: homepage - the homepage of the event.
  • POST Arguments: tel - the telefon number.
  • POST Arguments: fax - the fax number.
  • POST Arguments: email - a contact email address.
  • Result: status xml
  • Mandatory fields: "name" and "category" are mandatory fields
  • Statuscodes:
    • 100 - successful
    • 101 - please specify all mandatory fields
    • 102 - no permission to add event
  • Example: http://api.opendesktop.org/v1/event/add Example:

    ok 100 1234567

edit

Edit a event entry. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: v1/event/edit/"12345"
  • HTTP Method: POST
  • POST Arguments: name - the name of the entry
  • POST Arguments: category - the category of the event. possible values are:
  • 10 - Party
  • 15 - User Group
  • 20 - Conference
  • 25 - Developer Meeting
  • 50 - Install Party
  • 1000 - other
  • POST Arguments: description - the description text of the event.
  • POST Arguments: startdate - the startdate of the event.
  • POST Arguments: enddate - the enddate of the event
  • POST Arguments: organizer - the organizer of the event.
  • POST Arguments: location - the location where the event takes place.
  • POST Arguments: city - the city.
  • POST Arguments: country - the 2 letter iso code of the country.
  • POST Arguments: longitude - the longitude of the event.
  • POST Arguments: latitude - the latitude of the event.
  • POST Arguments: homepage - the homepage of the event.
  • POST Arguments: tel - the telefon number.
  • POST Arguments: fax - the fax number.
  • POST Arguments: email - a contact email address.
  • Result: status xml
  • Mandatory fields: "name" and "category" are mandatory fields
  • Statuscodes:
    • 100 - successful
    • 101 - please specify all mandatory fields
    • 102 - no permission to change event
  • Example: http://api.opendesktop.org/v1/event/edit/12345 Example:

    ok

delete event entry

Delete a event entry. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: v1/event/delete/"contentid"
  • HTTP Method: POST
  • Arguments: eventid - Id of a event
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - no permission to change event
  • Example: http://api.opendesktop.org/v1/event/delete/12345 Example:

    ok

COMMENTS

get

Gets a list of comments.

  • Syntax: /v1/comments/data/"type"/"contentid"/"contentid2"
  • HTTP Method: GET
  • URL Arguments: type - Id of the content entry where you want to get the comments is from.
  • URL Arguments: contentid - Id of the content entry where you want to get the comments is from.
  • URL Arguments: contentid2 - Id of the content entry where you want to get the comments is from.
  • URL Arguments: page - The list page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1, ...
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: comments xml
  • Statuscodes:
    • 100 - successful
  • Types:
    • 1 - content
    • 4 - forum
    • 7 - knowledgebase
    • 8 - event
  • Example: http://frank:password@api.opendesktop.org/v1/comments/data/1/123/0&page=1&pagesize=10 Gets the second page of the list of comments of the content with the id 123. The pagesize is 10 Example:

    ok 100 234 vfvvdsx vdxvvsx 0 test 2005-01-29T18:58:40+01:00 50 235 vxvdfvd gfdgfdgfgfgf 1 test 2005-01-29T19:17:06+01:00 60 315 Re: jjjjjjjjjjjjjjj gfdg 0 Frank 2007-03-13T21:34:43+01:00 40

add

Add a comment. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: v1/comments/add
  • HTTP Method: POST
  • Arguments: type - type of comment
  • Arguments: content - the content id where the comment belongs
  • Arguments: content2 - the sub content id where the comment belongs
  • Arguments: parent - the id of the parent comment if the new comment is a reply
  • Arguments: subject - the subject of the comment
  • Arguments: message - the message text of the comment
  • Types:
    • 1 - content
    • 4 - forum
    • 7 - knowledgebase
    • 8 - event
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - content must not be empty
    • 102 - message or subject must not be empty
    • 103 - no permission to add a comment
  • Example: http://api.opendesktop.org/v1/comments/add Example:

    ok 100

vote

Vote for one specific comment. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/comments/vote/"commentsid"
  • HTTP Method: POST
  • Arguments: contentid - Id of a comment
  • POST Arguments: vote - The vote. An integer between 0 to 100. 0 equals bad and 100 equals good
  • Result: status xml
  • Statuscodes:
    • 100 - successful
    • 101 - comment not found
    • 200 - too many API requests in the last 15 minutes from your IP address. please try again later.
  • Example: http://api.opendesktop.org/v1/content/vote/12345 with the POST variable vote=4 Example:

    ok 100 1234567

PRIVATE DATA

get attributes

Gets the list of my personal extended attributes. You can store several attributes which are only readable to me. The attributes are key/value pairs with an "app" parameter as namespace. Store data which is only interesting for your application with your application name as a app namespace. If the data is of general interest use "global" as app parameter. The parameter "app" and "key" are optional in the url. So you access all the attributes from yourself or only the attributes from a specific application or the only the value of one specific key. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/privatedata/getattribute/"app"/"key"
  • HTTP method: GET
  • Arguments: app - The application from which you want to get the attributes. This parameter is optional.
  • Arguments: key - The key of the attribute you want to get. This parameter is optional.
  • Statuscodes:

    ok 100 1 parley language english, german 2007-11-01T22:45:20+01:00

set attribute

Set a attribute. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • syntax: /v1/privatedata/setattribute/"app"/"key"
  • HTTP method: POST
  • Arguments: app - The application where you want to store this attribute at.
  • Arguments: key - The key of the attribute.
  • POST arguments: value - The value of the attribute.
  • Statuscodes:

    ok 100

delete attribute

Delete a attribute. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

FORUM

list

Gets a list of forums.

  • syntax: /v1/forum/list
  • HTTP Method: GET
  • URL Arguments: page - The list page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1,
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: comments xml
  • Statuscodes:

Example:

<?xml version="1.0"?>
<ocs>
<meta>
<status>ok</status>
<statuscode>100</statuscode>
<message></message>
</meta>
<data>
<forum>
 <id>234</id>
 <name>vfvvdsx</name>
 <description>test</description>
 <date>2005-01-29T18:58:40+01:00</date>
 <icon>http://forum.example.org/images/forum-img.png</icon>
 <childcount>0</childcount>
 <children></children>
 <topics>123</topics>
</forum>
<forum>
 <id>876</id>
 <name>yheweq</name>
 <description>foobar</description>
 <date>2005-01-29T18:58:40+01:00</date>
 <icon>http://forum.example.org/img/forum-icon.gif</icon>
 <childcount>1</childcount>
 <children>
    <forum>
      <id>234</id>
      <name>cameras</name>
      <description>new forum</description>
      <date>2005-01-29T18:58:40+01:00</date>
      <icon>http://forum.example.org/images/icon.jpg</icon>
      <childcount>0</childcount>
      <children></children>
      <topics>5</topics>
    </forum>
 </children>
 <topics>789</topics>
</forum>
</data>
</ocs>

topics/list

Gets a list of a specific set of topics.

  • syntax: /v1/forum/topics/list
  • HTTP Method: GET
  • URL Arguments: forum - Id of the forum you are requesting a list of. Not required if a search term is provided.
  • URL Arguments: search - a keyword you want find in the name,
  • URL Arguments: description or comment of a topic. Not required if a forum id is provided.
  • URL Arguments: sortmode - The sortmode of the list. Possible values are: "new" - newest first or "alpha" - alphabetical
  • URL Arguments: page - The list page. You can control the size of a page with the pagesize argument. The first page is 0, the second is 1,
  • URL Arguments: pagesize - The amount of entries per page.
  • Result: forum topic listing xml
  • Statuscodes:

Example:

<?xml version="1.0"?>
<ocs>
<meta>
 <status>ok</status>
 <statuscode>100</statuscode>
 <message></message>
 <totalitems>2</totalitems>
 <itemsperpage>10</itemsperpage>
</meta>
<data>
 <topic details="detail">
  <id>1</id>
  <forumid>123</forumid>
  <user>testy</user>
  <changed>2009-02-07T23:14:11+01:00</changed>
  <subject>Random forum post</subject>
  <content>Just testing</content>
  <comments>0</comments>
 </topic>
</data>

forum/topics/add

Add a new topic to a forum. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header. All arguments are mandatory.

  • syntax: /v1/forum/topic/add
  • HTTP Method: POST
  • POST Argument: subject - Subject of the new topic
  • POST Argument: content - Content of the first post of the new topic
  • POST Argument: forum - id of the forum entry to be added to if available
  • Result: ocs xml
  • Statuscodes:

Example:

<?xml version="1.0"?>
<ocs>
<meta>
<status>ok</status>
<statuscode>100</statuscode>
<message></message>
</meta>
</ocs>

BUILDSERVICE

The build service module handles a user's access to build services, used to create distribution packages for the platforms supported by those services, and afterwards distribute to distribution sites which support the package formats produced by these various services.

Projects

create

Create a new project for the authorized user, optionally inserting information into the project. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/project/create
  • HTTP method: POST
  • Result: project id
  • POST Argument: name - string, the project's human readable name
  • POST Argument: version - string, the version string for this project
  • POST Argument: license - string, with suggestions from the license list (see content/licenses)
  • POST Argument: url - url, a web address for the project
  • POST Argument: developers - string, a newline separated list of developers on the project. Should be in the form of "Developer Name "
  • POST Argument: summary - string, a short, one line description of the project. Note: no newlines accepted (if newlines are passed, they will be stripped out)
  • POST Argument: description - string, a long description of the project
  • POST Argument: requirements - string, describes the required packages for the project, if applicable
  • POST Argument: specfile - string, the contents of the spec file
  • Mandatory fields: name
  • Result: * projectid (int)
  • Statuscodes: * 100 - success * 101 - required argument missing: name * 110 - url was not an acceptable format * 111 - developers was not in an acceptable format * 112 - summary contained newlines Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/project/create postdata: name="A Project" developers[0][name]="Frank Karlitschek" developers[0][url]="mailto:karlitschek@kde.org" developers[1][name]="Dan jensen" developers[1][url]="mailto:admin@leinir.dk"

This creates a new project and inserts the two listed developers as information on the project.

Example:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <projectid>122</projectid>
  </data>
</ocs>
get

Get all information for a specified project. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/project/get/"project"
  • HTTP method: GET
  • URL argument: project - the projectid of the project for which information should be fetched
  • Mandatory fields: "project"
  • Result: project xml - see buildservice/project/create for data types
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an integer Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/project/get/122

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <project>
      <projectid>122</projectid>
      <name>A Project</name>
      <version>1.0pre1</version>
      <license>Creative Commons Attribution Share-Alike 2.0</license>
      <url>http://somesite.com/</url>
      <developers>Frank Karlitschek &lt;karlitschek@kde.org&gt;
Dan Jensen &lt;admin@leinir.dk&gt;</developers>
      <summary>A neat little project which does something</summary>
      <description>A long description of the project

which even cleverly includes multiple lines</description>
      <requirements></requirements>
      <specfile>#
# spec file for package a-project
#
# Copyright (C) 2010 Frank Karlitschek (mailto:karlitschek@kde.org)
# Copyright (C) 2010 Dan Jensen (mailto:admin@leinir.dk)
#

Name: a-project
Summary: A neat little project which does something

Version: 1.0pre1
Release: 0
License: Creative Commons Attribution Share-Alike 2.0
Url: http://somesite.com/
BuildRoot: /var/tmp/%name-root
Source: a-project-1.0pre1.tar.bz2

%description
A long description of the project

which even cleverly includes multiple lines

(etc etc...)</specfile>
    </project>
  </data>
</ocs>
delete

Delete a specific project and the uploaded source files. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/project/delete/"project"
  • HTTP method: POST
  • URL argument: project - projectid, the id of the project to be deleted
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an integer * 110 - project delete failed (details in meta message) Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/project/delete/122

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>
edit

Set any of the values found on a project. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/project/edit/"project"
  • HTTP method: POST
  • URL argument: project - projectid, the id of the project to change details on
  • POST Argument: name - string, the project's human readable name
  • POST Argument: version - string, the version string for this project
  • POST Argument: license - string, with suggestions from the license list (see content/licenses)
  • POST Argument: url - url, a web address for the project
  • POST Argument: developers - string, a newline separated list of developers on the project. Should be in the form of "Developer Name "
  • POST Argument: summary - string, a short, one line description of the project. Note: no newlines accepted (if newlines are passed, they will be stripped out)
  • POST Argument: description - string, a long description of the project
  • POST Argument: requirements - string, describes the required packages for the project, if applicable
  • POST Argument: specfile - string, the contents of the spec file
  • Mandatory fields: "project"
  • Statuscodes: * 100 - success * 101 - no such project * 102 - projectid no an int * 110 - url was not an acceptable format * 111 - developers was not in an acceptable format Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/project/edit/122 postdata: name="A Project" summary="A neat little project which does something"

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>
list

List all projects for the currently authorized user. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/project/list
  • URL argument: page - The content page. You can control the size of a page with the pagesize parameter. The first page is 0, the second is 1, ...
  • URL argument: pagesize - The amount of entries your get per page.
  • Result: projectlist xml
  • HTTP method: GET
  • Statuscodes: * 100 - success Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/project/list

This might yield the following XML output (where the user has exactly one project):

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <projectlist>
      <project>
        <projectid>122</projectid>
        <name>A Project</name>
        <version>1.0pre1</version>
        <license>Creative Commons Attribution Share-Alike 2.0</license>
        <url>http://somesite.com/</url>
        <developers>Frank Karlitschek &lt;karlitschek@kde.org&gt;
Dan Jensen &lt;admin@leinir.dk&gt;</developers>
        <summary>A neat little project which does something</summary>
        <description>A long description of the project

which even cleverly includes multiple lines</description>
        <requirements></requirements>
        <specfile></specfile>
      </project>
    </projectlist>
  </data>
</ocs>
uploadsource

Upload a new source bundle (a compressed file in .zip, .tar.gz or .tar.bz2 format) containing the source code of the project. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

Note: If the project has not had a source file uploaded yet, and the specfile data field for the project is empty (that is, nothing has been entered manually), this will also fill that field with an automatically generated spec file.

  • Syntax: /v1/buildservice/project/uploadsource/"project"
  • HTTP method: POST
  • URL argument: project - projectid, the id of the project to generate a spec file for
  • POST argument: localfile - The source bundle to upload
  • Mandatory fields: "project", "localfile"
  • Result: specfile - string, the contents of generated specfile
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an int * 103 - source bundle file not correctly uploaded * 104 - source bundle was an unrecognised format Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/project/uploadsource/122

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>

Remote Accounts

list

Get a list of all the remote accounts a user has added references to. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/remoteaccounts/list
  • HTTP method: GET
  • Result: remoteaccountslist xml * id - remoteaccountid (int), the ID of the remote account entry * type - int, which type of account we're dealing with (1 is buildservice, 2 is publisher) * typeid - string, the ID of the remote service the account is with * data - string, any arbitrary data you wish to associate with the account * login - string, the user's login on the remote service * password - string, the user's password on the remote service
  • Statuscodes: * 100 - success Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/remoteaccounts/list

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <remoteaccountslist>
      <remoteaccount>
        <id>2</id>
        <type>1</type>
        <typeid>mbs</typeid>
        <data></data>
        <login>frank</login>
        <password>password</password>
      </remoteaccount>
      <remoteaccount>
        <id>7</id>
        <type>2</type>
        <typeid>1</typeid>
        <data></data>
        <login>frank</login>
        <password>password</password>
      </remoteaccount>
    </remoteaccountslist>
  </data>
</ocs>
add

Add a new remote account reference to a user. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/remoteaccounts/add
  • HTTP method: POST
  • POST argument: type - int, which type of account we're dealing with (1 is buildservice, 2 is publisher)
  • POST argument: typeid - string, the ID of the remote service the account is with
  • POST argument: data - string, any arbitrary data you wish to associate with the account
  • POST argument: login - string, the user's login on the remote service
  • POST argument: password - string, the user's password on the remote service
  • Mantadory fields: type, typeid
  • Result: remoteaccountid
  • Statuscodes: * 100 - success * 101 - no such service * 102 - service id was not recognised Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/remoteaccounts/add postdata: type=1 typeid="mbs"

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <remoteaccountid>7</remoteaccountid>
  </data>
</ocs>
edit

Change the details of a specified remote account for the authenticated user. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/remoteaccounts/edit/remoteaccountid
  • HTTP method: POST
  • URL argument: remoteaccountid - the ID of the remote account you wish to change details for
  • POST argument: data - string, any arbitrary data you wish to associate with the account
  • POST argument: login - string, the user's login on the remote service
  • POST argument: password - string, the user's password on the remote service
  • Mantadory fields: remoteaccountid
  • Result: remoteaccountid
  • Statuscodes: * 100 - success * 101 - no such remote account Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/remoteaccounts/edit/7 postdata: login="frank" password="bet123ter"

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>
get

Get the details of a specific remote account. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/remoteaccounts/get/remoteaccountid
  • HTTP method: GET
  • Result: remoteaccount xml * id - remoteaccountid (int), the ID of the remote account entry * type - int, which type of account we're dealing with (1 is buildservice, 2 is publisher) * typeid - string, the ID of the remote service the account is with * data - string, any arbitrary data you wish to associate with the account * login - string, the user's login on the remote service * password - string, the user's password on the remote service
  • Statuscodes: * 100 - success * 101 - no such remote account Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/remoteaccounts/get/7

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <remoteaccount>
        <id>7</id>
        <type>2</type>
        <typeid>1</typeid>
        <data></data>
        <login>frank</login>
        <password>bet123ter</password>
    </remoteaccount>
  </data>
</ocs>
remove

Remove the specific remote account from the user's list of remote accounts. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>

Build Services

list

Get a list of all the build services available. If the user is not authenticated the complete list of services is returned. If the user is authenticated the list is returned of build services that user is signed up for. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/buildservices/list
  • HTTP method: GET
  • URL argument: page - The content page. You can control the size of a page with the pagesize parameter. The first page is 0, the second is 1, ...
  • URL argument: pagesize - The amount of entries your get per page.
  • Mandatory fields: none
  • Result: buildservicelist xml * id - int, alias of buildserviceid, the build service's ID * name - string, human readable name of build service * registrationurl - url, link to the service's registration page * supportedtargets - list of targets, made up of an integer id and a string name
  • Statuscodes: * 100 - success Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/buildservices/list

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <buildservices>
      <buildservice>
        <id>1</id>
        <name>Some Build Service</name>
        <registrationurl>http://bs.some.com/user/new</registrationurl>
        <supportedtargets>
          <target>
            <id>1</id>
            <name>i386</name>
          </target>
          <target>
            <id>2</id>
            <name>x86_64</name>
          </target>
          <target>
            <id>3</id>
            <name>armv5</name>
          </target>
        </supportedtargets>
      </buildservice>
    </buildservices>
  </data>
</ocs>
get

Get a the information on a particular build service.

  • Syntax: /v1/buildservice/buildservices/get/"buildserviceid"
  • HTTP method: GET
  • URL argument: buildserviceid - the ID of the build service
  • Mandatory fields: "buildserviceid"
  • Result: buildservice xml * id - int, alias of buildserviceid, the build service's ID * name - string, human readable name of build service * registrationurl - url, link to the service's registration page * supportedtargets - list of targets, made up of an integer id and a string name
  • Statuscodes: * 100 - success * 101 - no such build service Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/buildservices/get/1

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <buildservice>
      <id>1</id>
      <name>Some Build Service</name>
      <registrationurl>http://bs.some.com/user/new</registrationurl>
      <supportedtargets>
        <target>
          <id>1</id>
          <name>i386</name>
        </target>
        <target>
          <id>2</id>
          <name>x86_64</name>
        </target>
        <target>
          <id>3</id>
          <name>armv5</name>
        </target>
      </supportedtargets>
    </buildservice>
  </data>
</ocs>

Build Jobs

list

List the jobs a user has, optionally for a single project. If projectid is specified, only build jobs for that project are retruned. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/jobs/list/"project"
  • HTTP method: GET
  • URL argument: project - projectid, the id of the project to list build jobs for
  • URL argument: page - The content page. You can control the size of a page with the pagesize parameter. The first page is 0, the second is 1, ...
  • URL argument: pagesize - The amount of entries your get per page.
  • Mandatory fields: none
  • Result: buildjoblist xml - a list of build job data
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an int Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/jobs/list/122

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <buildjobs>
      <buildjob>
        <id>12</id>
        <project>122</project>
        <buildservice>mbs</buildservice>
        <target>2</target>
        <name>armv5 job 12</name>
        <status>1</status>
        <progress>0.56</progress>
        <url>http://bs.some.com/job/54322</url>
        <message></message>
      </buildjob>
      <buildjob>
        <id>18</id>
        <project>122</project>
        <buildservice>obs</buildservice>
        <target>4</target>
        <name>armv5 job 14</name>
        <status>1</status>
        <progress>0.88</progress>
        <url>http://bs.some.com/job/54324</url>
        <message></message>
      </buildjob>
    </buildjobs>
  </data>
</ocs>
create

Create a new build job. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/jobs/create/"project"/"buildservice"/"target"
  • HTTP method: POST
  • URL argument: project - projectid, the id of the project to create a new build job for
  • URL argument: buildservice - buildserviceid, the id of the build service to create a new job for
  • URL argument: target - string, the target of this job. Must be supported by the build service
  • Mandatory fields: "project", "buildservice", "target"
  • Result: id - int, aka buildjobid, the id of the newly created build job
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an integer * 103 - no such build service * 104 - build service id should be an integer * 105 - build service does not support target * 106 - failed to create build job (further information in meta message) Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/jobs/create/122/1/armv5

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <buildjobid>616</buildjobid>
  </data>
</ocs>
cancel

Cancel a build job. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/jobs/cancel/"buildjob"
  • HTTP method: POST
  • URL argument: buildjob - buildjobid, the id of the build which should be cancelled
  • Mandatory fields: "buildjob"
  • Statuscodes: * 100 - success * 101 - no such build job * 102 - build job id should be an integer * 103 - job not running * 104 - failed (further information in meta message) Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/jobs/cancel/616

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>
get

Get information about a build job. See also getoutput. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/jobs/get/"buildjob"
  • HTTP method: GET
  • URL argument: buildjob - buildjobid, the id of the build job you wish to retrieve information about
  • Mandatory fields: "buildjob"
  • Result: buildjob xml * name - string, a human-readable name for the build job * status describes the current state of the build job, and is an enumeration over the following values * 1 - Running * 2 - Completed * 3 - Failed * progress - float, 0 to 1. If progress is unknown, 0 is passed * url - url, link to the page on the build service which shows this particular job's status * message - string, any message the build service might have
  • Statuscodes: * 100 - success * 101 - no such build job * 102 - build job id should be an integer Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/jobs/get/616

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <buildjob>
      <id>12</id>
      <project>122</project>
      <buildservice>mbs</buildservice>
      <target>2</target>
      <name>armv5 job 12</name>
      <status>1</status>
      <progress>0.56</progress>
      <url>http://bs.some.com/job/54322</url>
      <message></message>
    </buildjob>
  </data>
</ocs>
getoutput

Get the build output from a specific build job. This is the clear text version of the configuration, compilation and other steps. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/jobs/getoutput/"buildjob"
  • HTTP method: GET
  • URL argument: buildjob - buildjobid, the id of the build job you wish to retrieve the output for
  • Mandatory fields: "buildjob"
  • Result: output - string, the output of the build service - full output, as in compiler output etc.
  • Statuscodes: * 100 - success * 101 - no such build job * 102 - build job id should be an integer Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/jobs/getoutput/616

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <output>-- Found GCC: /usr/bin/gcc
-- Found X11: /usr/lib64/libX11.so
(etc etc)
    </output>
  </data>
</ocs>

Publishing

getpublishingcapabilities

List all the available publishers. In the case of an authenticated user, the function will return only the publishers that the user has an account with. Authentication is done by sending a Basic HTTP Authorisation header.

Status 102 is informational and in essence is a success. It is meant as a convenient way of finding out whether to bother parsing the list of publishers.

  • Syntax: /v1/buildservice/publishing/getpublishingcapabilities
  • HTTP method: GET
  • URL argument: page - The content page. You can control the size of a page with the pagesize parameter. The first page is 0, the second is 1, ...
  • URL argument: pagesize - The amount of entries your get per page.
  • Result: * publisheridlist - a list of publishers, see buildservice/publishing/getpublisher
  • Statuscodes: * 100 - success * 101 - no such user * 102 - user has not registered with any publishers Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/publishing/getpublishingcapabilities

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <publishers>
      <publisher>
        <id>1</id>
        <name>Some App Store</name>
        <registrationurl>http://store.some.com/user/new</registrationurl>
        <fields>
          <field>
            <name>Name</name>
            <fieldtype>string</fieldtype>
            <options></options>
            <fieldsize>256</fieldsize>
            <required>true</required>
          </field>
          <field>
            <name>Description</name>
            <fieldtype>longtext</fieldtype>
            <options></options>
            <fieldsize>4294967296</fieldsize>
            <required>false</required>
          </field>
          <field>
            <name>Category</name>
            <fieldtype>item</fieldtype>
            <options>
              <option>Game</option>
              <option>Productivity</option>
              <option>Gadget</option>
            </options>
            <fieldsize>0</fieldsize>
            <required>true</required>
          </field>
        </fields>
        <supportedtargets>
          <target>i386</target>
          <target>x86_64</target>
          <target>armv5</target>
        </supportedtargets>
      </publisher>
      <publisher>
        <id>2</id>
        <name>Somewhere</name>
        <registrationurl>http://store.some.where/register</registrationurl>
        <fields></fields>
        <supportedtargets>
          <target>i386</target>
        </supportedtargets>
      </publisher>
    </publishers>
  </data>
</ocs>
getpublisher

Get the descriptive information about a publisher.

  • Syntax: /v1/buildservice/publishing/getpublisher/"publisher"
  • HTTP method: GET
  • URL argument: publisher - publisherid, the id of the publisher about whom to retrieve
  • Mandatory fields: "publisher"
  • Result: publisher xml * name - string, the human-readable name of the field, also used as identifier * registrationurl - url, an address to give to the user to allow for easy registration * fields - a list of the supported fields * id - publisherid, the publisher's ID * name - string, human readable name * fieldtype - type name, value from the following itemized list: * string * longtext - used for longer descriptions and the like * integer * float * item - an item from the provided list of options * boolean * datetime * url * image * options - a list of options. If this is populated on string type, use a combo box to provide the user with suggestions, but accept any string. If two items are present for integer and float values, they represent the lower and upper limits of the values respectively. In the case of a field of type image, the items will be, in order, maximum width and height in pixels, and maximum filesize in bytes. * fieldsize - int, maximum number of bytes allowed, when applicable (this is 0 if not used) * required - boolean, whether or not the publisher requires this field * supportedtargets - list of targets, same naming as in jobs/getbuildcapabilities
  • Statuscodes: * 100 - success * 101 - no such publisher * 102 - publisher id should be an integer Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/publishing/getpublisher/5

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <publisher>
      <id>1</id>
      <name>Some App Store</name>
      <registrationurl>http://store.some.com/user/new</registrationurl>
      <fields>
        <field>
          <name>Name</name>
          <fieldtype>string</fieldtype>
          <options></options>
          <fieldsize>256</fieldsize>
          <required>true</required>
        </field>
        <field>
          <name>Description</name>
          <fieldtype>longtext</fieldtype>
          <options></options>
          <fieldsize>4294967296</fieldsize>
          <required>false</required>
        </field>
        <field>
          <name>Category</name>
          <fieldtype>item</fieldtype>
          <options>
            <option>Game</option>
            <option>Productivity</option>
            <option>Gadget</option>
          </options>
          <fieldsize>0</fieldsize>
          <required>true</required>
        </field>
      </fields>
      <supportedtargets>
        <target>i386</target>
        <target>x86_64</target>
        <target>armv5</target>
      </supportedtargets>
    </publisher>
  </data>
</ocs>
publishtargetresult

Publish the result of a specific build job to one publisher. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/publishing/publishtargetresult/"buildjob"/"publisher"
  • HTTP method: POST
  • URL argument: buildjob - buildjobid, the id of the build job which the result should be published
  • URL argument: publisher - publisherid, the id of the publisher to publish a result to
  • Mandatory fields: "buildjob", "publisher"
  • Statuscodes: * 100 - success * 103 - no such build job * 104 - build job not completed * 105 - build job id should be an integer * 106 - no such publisher * 107 - publisher id should be an integer * 108 - publishing failed (further information in meta message) Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/publishing/publishtargetresult/616/5

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
</ocs>
savefields

TODO: This needs a publishing site association as well, otherwise we can't check the field type properly...

Save field data relating to a particular project. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/publishing/savefields/"project"
  • HTTP method: POST
  • URL argument: project - projectid, the id of the project to save field data for
  • POST argument: fields - a list of field data: * name - string, the name of the field (same identifier as publishing/getpublisher) * fieldtype - string, the name of the data type, see list in publishing/getpublisher. This allows for two same-named fields to have different data if their field types are different. If the type is * data - data according to fieldtype
  • Mandatory fields: project, fields
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an integer * 103 - field data not correct (further information in meta message) * 104 - field data missing (further information in meta message) Example: POST http://frank:password@api.opendesktop.org/v1/buildservice/publishing/savefields/122 postdata: fields[0]["name"]="Name" fields[0]["fieldtype"]="string" fields[0]["data"]="A Project" fields[1]["name"]="Category" fields[1]["fieldtype"]="item" fields[1]["data"]="Nifty"

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>failed</status>
    <statuscode>103</statuscode>
    <message>The item "Nifty" does not exist in the list of possible options. The options are: "Game", "Productivity", "Gadget"</message>
  </meta>
</ocs>
getfields

Get the field data from the previous publishing of a particular project. In the case of a project with no field data saved, an empty list will be returned. This should be interpreted as a success, as only saved data is returned, and data for any aditional fields is not included as empty, since the knowledge of which fields are required now is not available. Only authenticated users are allowed to access this method. Authentication is done by sending a Basic HTTP Authorisation header.

  • Syntax: /v1/buildservice/publishing/getfields/"project"
  • HTTP method: GET
  • URL argument: project - projectid, the id of the project to fetch old field data for
  • Mandatory fields: "project"
  • Result: fields xml - a list of field data: * name - string, the name of the field (same identifier as publishing/getpublisher) * fieldtype - string, the name of the data type, see list in publishing/getpublisher. This allows for two same-named fields to have different data if their field types are different. * data - data according to fieldtype
  • Statuscodes: * 100 - success * 101 - no such project * 102 - project id should be an integer Example: GET http://frank:password@api.opendesktop.org/v1/buildservice/publishing/getfields/122

This might yield the following XML output:

<?xml version="1.0"?>
<ocs>
  <meta>
    <status>ok</status>
    <statuscode>100</statuscode>
    <message></message>
  </meta>
  <data>
    <fields>
      <field>
        <name>Name</name>
        <fieldtype>string</fieldtype>
        <data>A Project</data>
      </field>
      <field>
        <name>Summary</name>
        <fieldtype>string</fieldtype>
        <data>A neat little project which does something</data>
      </field>
      <field>
        <name>Category</name>
        <fieldtype>item</fieldtype>
        <data>Gadget</data>
      </field>
    </fields>
  </data>
</ocs>

CategoryHomepage