The API
What is the API?
The Qhub API is a simple protocol set that allows developers to write their own interfaces for a hub's content, including its questions, answers and members.
Qhub API Specification
The Qhub API is a standard developer-oriented interface to the main features available to a Qhub. It allows the construction of customised third-party applications that will encourage the growth of specific Qhubs and the Qhub system as a whole.
Overview
The API is available to any user registered to a Qhub. Each API request must be validated according to an active user within a specified Qhub.
Only approved and preapproved contributions will be returned, and relevant members must exist and be active.
There are API usage limits, according to requests per hour (by IP). Frequencies of requests are constantly monitored. Extreme usages will be automatically banned.
All requests require validation.
Technology
HTTP is used as the basic protocol. GET methods required, unless the method specifically performs a data insertion, deletion or update - in which case, a POST method is used.
Response data is either XML or JSON.
REST API POST Method: VERIFY a user credential
Returns success/failure.
URL: http://api.qhub.com/HUB_URL/verify.FORMAT
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: POST
Requires Authentication: true
API rate limited: true
Parameters: required
- USER_ID
Filters: none
Example:
require_once 'class.qhub.php';
$qhub = new qhub('example.qhub.com','your_user_id','your_password','your_api_key');
$url = "/verify.xml";
$postfields = array(
'user_id'=>'your_user_id'
);
$result = $qhub->request($url, $postfields);
echo '<pre>';
echo htmlspecialchars($response);
echo '</pre>';
Response: success
<?xml version="1.0"?> <response status="ok"> true </response>
Response: failure
<?xml version="1.0"?> <response status="fail"> ERROR_MESSAGE </response>
REST API POST Method: POST a question
Returns success/failure.
URL: http://api.qhub.com/HUB_URL/ask.FORMAT
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: POST
Requires Authentication: true
API rate limited: true
Parameters: required
- QUESTION
- TAGS
- USER_ID
Filters: none
Example:
require_once 'class.qhub.php';
$qhub = new qhub('example.qhub.com','your_user_id','your_password','your_api_key');
$url = "/ask.xml";
$postfields = array(
'question'=>"Where Can I Get Help With Qhub?",
'tags'=>'qhub,help',
'user_id'=>'your_user_id'
);
$result = $qhub->request($url, $postfields);
echo '<pre>';
echo htmlspecialchars($response);
echo '</pre>';
Response: success
<?xml version="1.0"?> <response status="ok"> Your question has been successfully saved. <a href="http://QUESTION_LINK">QUESTION_LINK</a> </response>
Response: failure
<?xml version="1.0"?> <response status="fail"> ERROR_MESSAGE </response>
REST API POST Method: POST an answer
Returns success/failure.
URL: http://api.qhub.com/HUB_URL/answer.FORMAT
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: POST
Requires Authentication: true
API rate limited: true
Parameters: required
- ANSWER
- QUESTION_ID
- USER_ID
Filters: none
Example:
require_once 'class.qhub.php';
$qhub = new qhub('example.qhub.com','your_user_id','your_password','your_api_key');
$url = "/answer.xml";
$postfields = array(
'answer'=>"Together we can help each other create better, more beautiful websites.",
'question_id'=>123,
'user_id'=>'your_user_id'
);
$result = $qhub->request($url, $postfields);
echo '<pre>';
echo htmlspecialchars($response);
echo '</pre>';
Response: success
<?xml version="1.0"?> <response status="ok"> Your answer has been successfully saved. <a href="http://QUESTION_LINK">QUESTION_LINK</a> </response>
Response: failure
<?xml version="1.0"?> <response status="fail"> ERROR_MESSAGE </response>
REST API GET Method: GET list questions
Returns a list of associative array of questions (question, question ID, user ID, user Name, date created, tags, num answers) in the specified hub.
URL: http://api.qhub.com/HUB_URL/questions.FORMAT[?FILTER[&FILTER]]
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: optional
- type=( answered | unanswered )
- user_ids[]=USER_ID[&user_ids[]=USER_ID]
- tags[]=TAG_NAME[&tags[]=TAG_NAME]
- datefrom=DATE (Y-m-d = 0000-00-00)
- dateto=DATE (Y-m-d = 0000-00-00)
- order=( popular | newest | oldest )
- limit=NUMBER
Note that if the order filter is not specified, the api will return the newest question first.
Note also that if the order filter is popular, then the api will ignore all filters but the limit filter.
Example:
http://api.qhub.com/example.qhub.com/questions.xml?type=answered&user_ids[]=1&user_ids[]=2&tags[]=ab&tags[]=cd &datefrom=2010-01-01&dateto=2010-01-31&order=popular&limit=4
Response:
<?xml version="1.0"?> <response status="ok"> <item> <question>What is A?</question> <question_id>1</question_id> <user_id>1</user_id> <user_name>ABC</user_name> <tags>ab,cd</tags> <date_created>2010-02-11 15:35:09</date_created> <num_answers>4</num_answers> </item> <item> <question>What is B?</question> <question_id>2</question_id> <user_id>2</user_id> <user_name>BCD</user_name> <tags>ab,ef</tags> <date_created>2010-02-12 15:35:09</date_created> <num_answers>0</num_answers> </item> <item> <question>What is C?</question> <question_id>3</question_id> <user_id>3</user_id> <user_name>CDE</user_name> <tags>ab,cd</tags> <date_created>2010-02-13 15:35:09</date_created> <num_answers>1</num_answers> </item> <item> <question>What is D?</question> <question_id>4</question_id> <user_id>4</user_id> <user_name>DEF</user_name> <tags>cd,ef</tags> <date_created>2010-02-15 15:35:09</date_created> <num_answers>2</num_answers> </item> </response>
REST API GET Method: GET a question
Returns a list of associative array of a question (question, question ID, user ID, user Name, date created, tags, num answers) in the specified hub.
URL: http://api.qhub.com/HUB_URL/question/QUESTIONID.FORMAT
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Parameters: QUESTION_ID (Required)
Filters: none
Example:
http://api.qhub.com/example.qhub.com/question/123.xml
Response:
<?xml version="1.0"?> <response status="ok"> <item> <question>What is ABC?</question> <question_id>123</question_id> <user_id>1</user_id> <user_name>ABC</user_name> <tags>ab,cd</tags> <date_created>2010-02-11 15:35:09</date_created> <num_answers>2</num_answers> </item> </response>
REST API GET Method: GET list answers
Returns a list of associative array of answers (answer, answer ID, question ID, use IDs, userName, date created) in the specified hub.
URL: http://api.qhub.com/HUB_URL/answers.FORMAT[?FILTER[&FILTER]]
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: optional
- user_ids[]=USER_ID[&user_ids[]=USER_ID]
- tags[]=TAG_NAME[&tags[]=TAG_NAME]
- datefrom=DATE (Y-m-d = 0000-00-00)
- dateto=DATE (Y-m-d = 0000-00-00)
- limit=NUMBER
Example:
http://api.qhub.com/example.qhub.com/answers.xml?user_ids[]=1&user_ids[]=2&tags[]=ab&tags[]=cd&datefrom=2010-01-01&dateto=2010-01-31&limit=4
Response:
<?xml version="1.0"?> <response status="ok"> <item> <answer>answer 3</answer> <answer_id>3</answer_id> <question_id>1341</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-02-11 15:35:09</date_created> </item> <item> <answer>answer 4</answer> <answer_id>4</answer_id> <question_id>1394</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-02-11 14:39:49</date_created> </item> <item> <answer>answer 5</answer> <answer_id>5</answer_id> <question_id>1341</question_id> <user_id>2</user_id> <user_name>B Smith</user_name> <date_created>2010-02-09 14:36:16</date_created> </item> <item> <answer>answer 6</answer> <answer_id>6</answer_id> <question_id>461</question_id> <user_id>2</user_id> <user_name>B Smith</user_name> <date_created>2010-02-03 22:10:22</date_created> </item> </response>
REST API GET Method: GET list an answer
Returns a list of associative array of an answer (answer, answer ID, question ID, use ID, userName, date created) in the specified hub.
URL: http://api.qhub.com/HUB_URL/answer/ANSWERID.FORMAT
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Parameters: ANSWERID
Filters: none
Example:
http://api.qhub.com/example.qhub.com/answer/1.xml
Response:
<?xml version="1.0"?> <response status="ok"> <item> <answer>answer 7</answer> <answer_id>1</answer_id> <question_id>1341</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-02-11 15:35:09</date_created> </item> </response>
REST API GET Method: GET list members
Returns list of associative array of members (user id, user name, type, question count, answer count, date joined) in the specified hub.
URL: http://api.qhub.com/HUB_URL/members.FORMAT[?FILTER[&FILTER]]
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: optional
- datefrom=DATE (Y-m-d = 0000-00-00)
- dateto=DATE (Y-m-d = 0000-00-00)
- limit=NUMBER
Example:
http://api.qhub.com/example.qhub.com/members.xml?datefrom=2010-01-01&dateto=2010-01-31&limit=2
Response:
<?xml version="1.0"?> <response status="ok"> <item> <user_id>987654321</user_id> <user_name>A</user_name> <type>member</type> <date_joined>2010-01-31 17:46:38</date_joined> <num_questions>0</num_questions> <num_answers>1</num_answers> </item> <item> <user_id>987654322</user_id> <user_name>B</user_name> <type>member</type> <date_joined>2010-01-31 14:00:22</date_joined> <num_questions>0</num_questions> <num_answers>1</num_answers> </item> </response>
REST API GET Method: GET A member's contributions
Returns list of the contributions of a members in the specified hub.
URL: http://api.qhub.com/HUB_URL/member/USER_ID.FORMAT[?FILTER[&FILTER]]
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: optional
- contrib=( all | answer | question )
- datefrom=DATE (Y-m-d = 0000-00-00)
- dateto=DATE (Y-m-d = 0000-00-00)
- limit=NUMBER
Examples:
1. http://api.qhub.com/example.qhub.com/member/1.xml?contrib=question&datefrom=2010-01-01&dateto=2010-01-31&limit=2
2. http://api.qhub.com/example.qhub.com/member/1.xml?contrib=answer&datefrom=2010-01-01&dateto=2010-01-31&limit=2
3. http://api.qhub.com/example.qhub.com/member/1.xml?contrib=all&datefrom=2010-01-01&dateto=2010-01-31&limit=4
(same as http://api.qhub.com/example.qhub.com/member/1.xml?datefrom=2010-01-01&dateto=2010-01-31&limit=4)
Response:
example 1.
<?xml version="1.0"?> <response status="ok"> <item> <answer>answer 1</answer> <answer_id>1</answer_id> <question_id>2007</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-01-27 11:36:48</date_created> </item> <item> <answer>answer 2</answer> <answer_id>2</answer_id> <question_id>1906</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-01-07 18:30:37</date_created> </item> </response>
example 2.
<?xml version="1.0"?> <response status="ok"> <item> <question>question 1</question> <question_id>2007</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-01-27 11:36:48</date_created> <tags>blog</tags> <num_answers>1</num_answers> </item> <item> <question>question 2</question> <question_id>2005</question_id> <user_id>1</user_id> <user_name>A Smith</user_name> <date_created>2010-01-27 09:23:37</date_created> <tags>Computer networks,networks</tags> <num_answers>0</num_answers> </item> </response>
example 3. Server returns 2 answers and 2 questions
REST API GET Method: GET list tags
Returns list of associative array of tags (tag name, question count) in the specified hub.
URL: http://api.qhub.com/HUB_URL/tags.FORMAT
HUB_URL: domain name of the hub e.g. example.qhub.com
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: none
Example:
http://api.qhub.com/example.qhub.com/tags.xml
Response:
<?xml version="1.0"?> <response status="ok"> <item> <tag>ab</tag> <num_questions>2</num_questions> </item> <item> <tag>bc</tag> <num_questions>3</num_questions> </item> <item> <tag>cd</tag> <num_questions>1</num_questions> </item> ... <item> <tag>yz</tag> <num_questions>0</num_questions> </item> </response>
REST API GET Method: GET questions in a tag
Returns list of the questions in a tag in the specified hub.
URL: http://api.qhub.com/HUB_URL/tag/TAG_NAME.FORMAT[?FILTER[&FILTER]]
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: optional
- type=( answered | unanswered )
- user_ids[]=USER_ID[&user_ids[]=USER_ID]
- limit=NUMBER
Examples:
http://api.qhub.com/example.qhub.com/tag/abc.xml?type=unanswered&user_ids[]=1&user_ids[]=2&limit=2
Response:
<?xml version="1.0"?> <response status="ok"> <item> <question>What is A?</question> <question_id>1</question_id> <user_id>1</user_id> <user_name>ABC</user_name> <tags>abc,cd</tags> <date_created>2010-02-11 15:35:09</date_created> <num_answers>4</num_answers> </item> <item> <question>What is B?</question> <question_id>2</question_id> <user_id>2</user_id> <user_name>BCD</user_name> <tags>abc,ef</tags> <date_created>2010-02-12 15:35:09</date_created> <num_answers>0</num_answers> </item> </response>
REST API GET Method: GET stats in the hub
Returns list of the stats of the specified hub.
URL: http://api.qhub.com/HUB_URL/stats.FORMAT[?FILTER[&FILTER]]
FORMAT: xml, json
HTTP Method: GET
Requires Authentication: true
API rate limited: true
Filters: none
Examples:
http://api.qhub.com/example.qhub.com/stats.xml
Response:
<?xml version="1.0"?> <response status="ok"> <item> <date_created>2010-01-01 00:00:01</date_created> <num_members>1500</num_members> <num_active_members>1455</num_active_members> <num_questions>12345</num_questions> <num_answers>13454</num_answers> </item> </response>
Got Problem?
Should you have any problem or feedback, please do not hesitate to contact us apihelp@qhub.com