For application developers
HamQTH provides a simple interface for application developers.
You can use:
- XML callbook search, very fast, without any limitation (user has to be registered here)
- XML DXCC search which can give you very accurate information (for free, no registration needed)
- XML recent activity search give you a list of station activity from Reverse beacon network, dxcluster and HamQTH logbook
- log upload function to upload whole log in ADIF format (plain text or compressed in zip,rar, 7zip etc.)
- realtime QSO upload to upload individual QSO after user saves it into your program
- DX cluster spots you can use DX cluster feed in your application
- Simple award verification protocol - how to verify QSO uploaded to HamQTH for awards
- DXCC search in JSON format like the XML DXCC seach but it returns data in JSON
- Agregated data from RBN - Reverse Beacon Network in JSON and XML
List of apps supporting HamQTH is on dedicated site.
DO NOT mix LF and CRLF line endings in the request to HamQTH API. RFC2616 requires that HTTP/1.1 only use CRLF. If you won't do that the server may return a HTTP/1.1 400 status to all malformed headers. It was not a problem before upgrade to Ubuntu 16.04 server with Apache >= 2.4.25. I already set HttpProtocolOptions Unsafe in the configuradio but it may not help.
XML callbook search
If you want to use HamQTH callbook query search in your logging program, you don't need to parse HTML code to get the data. You can use our XML service. However, the user who wants to use data from HamQTH, has to be registered here.
How XML search works?
At first, you have to ask for session ID:https://www.hamqth.com/xml.php?u=username&p=password
where
u | username registered on HamQTH (station callsign) |
p | user's password |
If your username or password is correct, you'll get something like this:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <session> <session_id>09b0ae90050be03c452ad235a1f2915ad684393c</session_id> </session> </HamQTH>
If your username or password is NOT correct, XML search returns:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <session> <error>Wrong user name or password</error> </session> </HamQTH>
Session ID is valid for one hour. After it expires, you need to request for new one.
If your session expired or the query is not valid, XML query will return:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <session> <error>Session does not exist or expired</error> </session> </HamQTH>
How do I search for callsign data?
Now we have our session ID and can try to search for callsign e.g. OK2CQR:https://www.hamqth.com/xml.php?id=09b0ae90050be03c452ad235a1f2915ad684393c&callsign=ok2cqr&prg=YOUR_PROGRAM_NAME
where
id | session ID requested before |
callsign | callsign you are looking for |
YOUR_PROGRAM_NAME | Name of the application using XML search (without spaces) |
If your session is valid and callsign exists you get this XML structure:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <search> <callsign>ok2cqr</callsign> <nick>Petr</nick> <qth>Neratovice</qth> <country>Czech Republic</country> <adif>503</adif> <itu>28</itu> <cq>15</cq> <grid>jo70gg</grid> <adr_name>Petr Hlozek</adr_name> <adr_street1>17. listopadu 1065</adr_street1> <adr_city>Neratovice</adr_city> <adr_zip>27711</adr_zip> <adr_country>Czech Republic</adr_country> <adr_adif>503</adr_adif> <district>GZL</district> <lotw>Y</lotw> <qsl>Y</qsl> <qsldirect>Y</qsldirect> <eqsl>Y</eqsl> <email>petr@ok2cqr.com</email> <jabber>petr@ok2cqr.com</jabber> <skype>PetrHH</skype> <birth_year>1982</birth_year> <lic_year>1998</lic_year> <web>https://www.ok2cqr.com</web> <latitude>50.07</latitude> <longitude>14.42</longitude> <continent>EU</continent> <utc_offset>-1</utc_offset> <picture>https://www.hamqth.com/userfiles/o/ok/ok2cqr/_profile/ok2cqr_nove.jpg</picture> </search> </HamQTH>where
callsign | callsign you searched |
nick | name used on the air |
qth | callsign's QTH |
country | country related to callsign, not to the address |
adif | ADIF ID of country related to callsign |
itu | ITU zone |
CQ | CQ (WAZ) zone |
grid | station locator |
adr_name | address name |
adr_street1 | street address |
adr_street2 | street address |
adr_street3 | street address |
adr_city | city address |
adr_zip | zipcode |
adr_country | country related to the address |
adr_adif | ADIF ID of address country |
district | station district |
us_state | US state (USA stations only) |
us_county | US county (USA stations only) |
oblast | something like district (Russian stations) |
dok | DOK (DL stations) |
iota | IOTA reference number |
qsl_via | QSL information |
lotw | Y - uses LoTW, N - doesn't use LoTW, ? - we don't know |
eqsl | Y - uses eQSL, N - doesn't use eQSL, ? - we don't know |
qsl | Y - accept QSL via bureau, N - doesn't accept QSL via bureau, ? - we don't know |
qsldirect | Y - accept direct QSL card, N - doesn't accept direct QSL, ? - we don't know |
jabber | jabber |
icq | icq number |
msn | MSN |
skype | Skype |
birth_year | Year of birth |
lic_year | Licenced since |
picture | link to user's picture |
latitude | station position - latitude |
longitude | station position - longitude |
continent | continent |
utc_offset | offset to UTC time in station location |
link to Facebook profile | |
link to user's Twitter feed | |
gplus | link to GooglePlus profile |
youtube | link to user's YouTube channel |
link to user's LinkedIn profile | |
flicker | link to user's flicker profile |
vimeo | link to user's Vimeo channel |
If callsign doesn't exist in HamQTH database, you get this:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <session> <error>Callsign not found</error> </session> </HamQTH>
How do I get callsign bio?
If you have session ID, it's very easy. Just use this http request:https://www.hamqth.com/xml_bio.php?id=09b0ae90050be03c452ad235a1f2915ad684393c&callsign=ok2cqr&strip_html=1
where:
id | session ID requested before |
callsign | callsign's bio you are looking for |
strip_html | 1 - if you want to get plain text without HTML tags (default value), 0 - you want to get as is, also with HTML code |
The result when station is at HamQTH:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <search> <callsign>ok2cqr</callsign> <bio>my looong biography</bio> </search> </HamQTH>where:
callsign | callsign you searched |
bio | the bio information text |
If callsign doesn't exist in HamQTH database, you get this:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <session> <error>Callsign not found</error> </session> </HamQTH>
If you need only longitude and latitude and other data is not interesting for you, you can use xml_latlong.php and you'll get only coordinates. The output is the same like from XML search.
XML recent activity search
Recent activity of any callsign is collected from Reverse beacon network and dx cluster. It's very usefull utility especially for dx expedition and rare stations. This inteface also makes accessible list of QSO with searched station in the HamQTH logbook database and list of most recent QSO from station's log (if any exists).
How it works?
This search also needs xml session id. How to get it is described at XML callbook search.
If you have it, you can try query like this:
https://www.hamqth.com/xml_recactivity.php?id=session_id&callsign=ok2cqr&rec_activity=1&log_activity=1&logbook=1
where:
id | session ID requested before |
callsign | callsign you are looking for |
rec_activity | 1 - include also data from RBN and dx clusters (default value), 0 do not add RBN and DX clusters data |
log_activity | 1 - include 20 qso QSO from HamQTH logbook (default value), 0 do not add logbook data |
logbook | 1 - include last 20 QSO from HamQTH station's logbook (default value), 0 do not add logbook data |
If callsign doesn't exist in HamQTH database, you get this:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <session> <error>Callsign not found</error> </session> </HamQTH>
and if it does, you'll get this XML:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <search> <activity> <data> <source>DXC</source> <spotter>ZL2HAM</spotter> <callsign>OK2CQR</callsign> <note>calling CQ</note> <freq>21025.0</freq> <date>2011-09-10</date> <time>05:34:28</time> </data> <data> <source>RBN</source> <spotter>IK3STG</spotter> <callsign>OK2CQR</callsign> <note>13 dB 34 WPM CQ</note> <freq>14026.3</freq> <date>2011-09-07</date> <time>13:34:28</time> </data> </activity> <log_activity> <data> <callsign>PT0S</callsign> <band>20M</band> <mode>CW</mode> <date>2012-11-13</date> </data> <data> <callsign>OK1RR</callsign> <band>40M</band> <mode>CW</mode> <date>2012-09-07</date> </data> </log_activity> <logbook> <data> <callsign>AA3B</callsign> <band>15M</band> <mode>CW</mode> <date>2012-11-11</date> </data> <data> <callsign>OK7WA</callsign> <band>80M</band> <mode>SSB</mode> <date>2012-05-07</date> </data> </logbook> </search> </HamQTH>where:
activity | section with records from RBN and DX clusters network |
source | source of the data - RBN or DXC |
spotter | station that send the spot (DXC) or callsign of reverse beacon network station |
callsign | spotted callsign |
note | short note related to the spot |
freq | frequency in kHz |
date | spot sent date |
time | spot sent time |
log_activity | section with records HamQTH logbook - list of station that has callsign in their logs |
callsign | station that has QSO in the log with station you are looking for |
mode | mode of operating |
band | band like in ADIF spec e.g. 160M, 40M etc. |
date | QSO date |
logbook | section with records in station's HamQTH logbook - list of 20 most recent QSOs in station's log |
callsign | wkd callsign |
mode | mode of operating |
band | band like in ADIF spec e.g. 160M, 40M etc. |
date | QSO date |
DXCC search
HamQTH also provides DXCC search based on Martin's (OK1RR) DXCC tables used in CQRLOG. The tables are excellent and probably the best ever. It provides excellent detail info e.g. callsign U3AP - https://www.hamqth.com/dxcc.php?callsign=U3AP you don't get only basic info that it is European Russia, but also Gorod Moskva (MA), World War II. Veteran.
How DXCC XML search works?
It is very easy. If you query HamQTH like this: https://www.hamqth.com/dxcc.php?callsign=U3AP"
where:
callsign | the callsign you are looking for DXCC info |
You'll get this XML structure:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <dxcc> <callsign>U3AP</callsign> <name>Russia (European)</name> <details>Russia (European), Gorod Moskva (MA), World War II. Veteran</details> <continent>EU</continent> <utc>-3</utc> <waz>16</waz> <itu>29</itu> <lat>55.75</lat> <lng>37.63</lng> <adif>54</adif> </dxcc> </HamQTH>There is another way. If you set callsign parameter to adif number (https://www.hamqth.com/dxcc.php?callsign=503), you'll get something like this:
<?xml version="1.0"?> <HamQTH version="2.7" xmlns="https://www.hamqth.com"> <dxcc> <name>Czech Republic</name> <continent>EU</continent> <utc>-1</utc> <waz>15</waz> <itu>28</itu> <lat>50.07</lat> <lng>14.42</lng> <adif>503</adif> </dxcc> </HamQTH>You can use it for free, without any registration. Have a fun!
LOG upload
HamQTH also has very nice and powerful log search function. To make upload much easier, I've created simple page for uploading logs from mobile phone or your own application https://www.hamqth.com/prg_log_upload.php. Remember you always have to upload whole log. HamQTH doesn't support partial upload.
How log upload works?
It's very similar to log upload function in station profile but much easier to add to your application. To upload the log, you have to use
POST method with these parameters:
u - username
p - password
c - callsign (if empty, username as callsign will be used)
f - file name of the uploading log
send_log - send OK as value (like user click on the OK button)
The file size is limited to 20MB but you can compress ADIF with zip, rar, 7zip, tar.gz or tar.bz2. File name in the archive has to have adi or adif
extension otherwise won't be imported. If you'll upload plain ADIF file, adi/adif and txt extensions are allowed.
Like the upload from user's profile, log is not imported in run-time but on background. User will be informed via email about import progress.
After you send POST request, there are four error messages you can get:
User parameter missing
Password parameter missing
Wrong username or password
You cannot upload log for this callsign
And after successful upload you'll get this:
Log uploaded successfully
I hope, they are self-explained. If there will be any problem with ADIF file itself, user will be informed via email.
Examples
I'm pure Linux user and use CQRLOG for my daily logging. It has auto backup function which always after I close the program exports all QSO into ADIF file and stores into defined directory (/home/ok2cqr/Ubuntu One/cqrlog_zaloha on my computer). If I want to upload last log backup to HamQTH, I use this script:#!/bin/bash BACKUPDIR="/home/ok2cqr/Ubuntu One/cqrlog_zaloha/" USERNAME=ok2cqr PASSWORD=my_password cd "$BACKUPDIR" curl -F f=@`ls | tail -n 1` -F send_log=OK -F u=$USERNAME -F p=$PASSWORD https://hamqth.com/prg_log_upload.php
That's all! I have an icon on the panel and when I click on it, it makes backup of my log to HamQTH. Very easy and powerfull. You can also create program to use Windows command line. I'm not so keen in windows scripting but if you are, please send me your script and I'll put it here.
Real-time QSO upload
You can upload individual QSO to HamQTH logbook in real-time as well. Use POST request to
https://www.hamqth.com/qso_realtime.php with these parameters:
u - username
p - password
c - callsign (if empty, username as callsign will be used)
adif - the QSO in ADIF format
prg - name of your application (without version number)
cmd - command to real time upload function (insert, update, delete)
The result will be send as HTTP status code with message in the body. The HTTP status codes are:
- 403 Forbidden: Access denied. Your username and/or password was incorrect. The QSO will NOT be logged.
- 500 Internal error: This may occurs if the server has any problem in general or there is a problem with your ADIF file. In the body should be more information what happened. The QSO will NOT be logged.
- 400 QSO Rejected: QSO was rejected for some reason e.g. wrong band, already exists in database etc. The QSO will NOT be logged.
- 200 QSO OK: QSO was successfully saved into database.
HamQTH supports these ADIF fields:
QSO_DATE, TIME_ON, TIME_OFF, CALL, FREQ, MODE, RST_S, RST_R, NAME, QTH, QSL_SENT, QSLSDATE, QSL_RCVD, QSLRDATE, QSL_VIA, IOTA,
TX_PWR, ITUZ, CQZ, CONT, GRIDSQUARE, MY_GRIDSQUARE, STATE, CNTY, COMMENT, DXCC, BAND, LOTW_QSL_SENT, LOTW_QSLSDATE, LOTW_QSL_RCVD,
LOTW_QSLRDATE, EQSL_QSL_SENT, EQSL_QSLSDATE, EQSL_QSL_RCVD, EQSL_QSLRDATE
All values should not be HTML escaped.
New QSO
HamQTH will accept new QSO record in ADIF format with at least QSO_DATE, TIME_ON, CALL, MODE, BAND, RST_S, RST_R fields. If you try to post less fields, you'll get HTTP status code 400 with error message in the body.
Update existing QSO
To specify the QSO you want to update in the database, you have to post old values of qso date, time on, callsign and mode. Without these values server won't be able to find your QSO and update it. Old values are also part of ADIF ouput but with OLD_ prefix - OLD_QSO_DATE, OLD_TIME_ON, OLD_CALL, OLD_BAND, OLD_MODE. E.g. you want to update name in the QSO, send only all mandatory fields (OLD_QSO_DATE etc.) and NAME field.
Delete QSO
Specify QSO to delete using OLD_QSO_DATE, OLD_TIME_ON, OLD_CALL, OLD_BAND and OLD_MODE field in ADIF output.
DX cluster spots
HamQTH provides DX cluster spots feed in simple CSV format with this structure:
Call^Frequency^Date/Time^Spotter^Comment^LoTW user^eQSL user^Continent^Band^Country nameNo registration needed, just use this link:
https://www.hamqth.com/dxc_csv.php?limit=10 where:
limit | maximim of downloaded spots, default is 60, max is 200 |
band | return spots only for specified band e.g. dxcc_csv.php?limit=10&band=80M retuns last 10 spots from 80M band |
You'll get this:
CT1ISH^21255.0^PI4ZU^DX & Contest Club Station^1311 2015-02-28^^^EU^15M^Netherlands^263 IZ8GNR^28478.0^H91T^NA-072^1310 2015-02-28^^^NA^10M^Panama^88 R8WZ^28491.2^DR50RRDXA^tnx QSO^1309 2015-02-28^^^EU^10M^Germany^230 IK2AHU^14315.0^IW2NXI/P^dai-lb1214^1309 2015-02-28^^^EU^20M^Italy^248 IZ4AFM^14315.0^IW2NXI/P^DAI LB1214^1309 2015-02-28^^^EU^20M^Italy^248 DL5JK^28495.0^OA6Q^Georg 5/9 wie jedes Jahr^1309 2015-02-28^L^E^SA^10M^Peru^136 HA8IE^10110.0^HV0A^pse activity on 30m!^1309 2015-02-28^L^^EU^30M^Vatican^295 HA8WX^28405.0^TO6D^simplex^1309 2015-02-28^L^^NA^10M^Guadeloupe Island^79 W3LPL^28003.6^A71EM^Heard in MD^1309 2015-02-28^L^E^AS^10M^Qatar^376The latest number is ADIF country ID.
Simple award verification protocol
Numerous web services and web sites all over the world provide electronic storage of “station logs”. Whatever we call it, eQSL, LoTW, all of them are but centrally managed collections of ham radio station logs in databases. Small amateur radio societies, often issue awards for contacts with their members. “Worked all members” is the simplest possible award imaginable. A really small ham radio society could theoretically avoid checking QSL cards, by inspecting their members’ log books .... continue in SAVP-SimpleAwardVerificationProtocol-short.pdf and SAVPGuidelines.pdf written by Jindra, OK4RM.
Example
HTTP client will send verification request using GET method:https://www.hamqth.com/verifyqso.php?mycall=j49c&hiscall=ok2cqr&date=20130620&band=12M
The result is described in specification above.
JSON DXCC search
The same like XML DXCC search but it returns data in JSON.
Example
https://www.hamqth.com/dxcc_json.php?callsign=U3APand you'll get this:
{"callsign":"U3AP", "name":"Russia (European)", "details":"Russia (European), Gorod Moskva (MA), World War II. Veteran", "continent":"EU",
"utc":"-3", "waz":"16", "itu":"29", "lat":"55.75", "lng":"37.63", "adif":"54"}
Agregated data from RBN in JSON and XML
In the DX cluster, there is a RBN tab where you can see data from Reverse Beacon Network. You can provide the same function in your software using this api.
Example
https://www.hamqth.com/rbn_data.php?data=1&band=160,80,60,40,30,20,17,15,12,10,6,2&fromcont=EU&mode=CW,RTTY,PSK31,PSK63&cont=AF,AN,AS,EU,NA,SA,OC&waz=*&itu=*&age=60&order=3where:
data=1 | this parameter is required for some internal reasons |
band | return spots only for specified band, it uses ADIF band specification but numbers only e.g. 80, 40, 30 etc. |
fromcont | return spots only from receivers located on the specific continet e.g. EU, you can specify more continets e.g. fromcont=EU,AS |
mode | return spots only with specific mode. Right now you can use CW, RTTY, PSK31 and PSK63 |
cont | return spots only when the continent of spotted station match to AF,AN etc. |
waz | return spots only when the WAZ zone of spotted station is 10,12,13. When you want to get all zones, use * |
waz | return spots only when the ITU zone of spotted station is 27,2625. When you want to get all zones, use * |
age | return spots only from last XX seconds e.g. age=120 will return spotted station from last two minutes |
order | return spots sorted by frequecy (order=1), callsign (order=2) or spot age (order=3) |
xml | with xml=1 returned data is in XML format |
and you'll get this:
{ "DL2IAD":{"dxcall":"DL2IAD","freq":"7 023.4","mode":"CW","age":4,"lsn":{"OL7M":16}},"OK1TPI":{"dxcall":"OK1TPI","freq":"7 026.1","mode":"CW","age":4,"lsn":{"OL7M":16,"F6IIT":34}}, "EA5EBD":{"dxcall":"EA5EBD","freq":"7 039.1","mode":"CW","age":4,"lsn":{"F6IIT":34,"S50ARX":21,"HA2KSD":19,"OL7M":16,"OE6TZE":10}}, "EA1TG":{"dxcall":"EA1TG","freq":"7 031.0","mode":"CW","age":10,"lsn":{"F6IIT":34,"S50ARX":21,"OL7M":16,"HA2KSD":7,"DK0TE":5,"HB9DCO":5,"OE6TZE":5,"DK3UA":4}}, "EP4HR":{"dxcall":"EP4HR","freq":"14 023.0","mode":"CW","age":10,"lsn":{"F6IIT":34,"S50ARX":21,"HA2KSD":19,"OL7M":16,"OE6TZE":10,"DK3UA":4,"UD4FD":9}}, "UR5LQY":{"dxcall":"UR5LQY","freq":"14 048.1","mode":"CW","age":10,"lsn":{"F6IIT":34,"SM2IUF":26,"HA2KSD":19,"S50ARX":17,"OL7M":16,"OE6TZE":10,"UD4FD":9,"DK3UA":4}}, "R5LQY":{"dxcall":"R5LQY","freq":"14 048.0","mode":"CW","age":10,"lsn":{"OH6BG":35,"F6IIT":34,"HA1VHF":29,"DL3KR":21,"DL8TG":20,"DL9GTB":19,"HA2KSD":19,"S50ARX":17,"OL7M":16,"HB9BXE":16,"DO4DXA":12,"HB9JCB":11,"F5RRS":10,"OE6TZE":10,"UD4FD":9,"DL1RNN":9,"DK3UA":4,"G0LUJ":3,"DK9IP":2}}, "WB2UZE":{"dxcall":"WB2UZE","freq":"7 014.5","mode":"CW","age":16,"lsn":{"F6IIT":11,"S50ARX":17,"HA2KSD":19,"OL7M":16,"OE6TZE":10,"DK3UA":4,"UD4FD":9,"DL1RNN":9}}, "IK2MMP":{"dxcall":"IK2MMP","freq":"7 028.8","mode":"CW","age":16,"lsn":{"HA2KSD":37,"DL3KR":22,"S50ARX":17,"OL7M":16,"F6IIT":11,"OE6TZE":10,"UD4FD":9,"DL1RNN":9,"DK3UA":4}}, "ON6MH":{"dxcall":"ON6MH","freq":"10 111.0","mode":"CW","age":16,"lsn":{"HA2KSD":37,"S50ARX":17,"OL7M":16,"F6IIT":11,"OE6TZE":10,"UD4FD":9,"ON6ZQ":9,"DL1RNN":9,"IZ2CPS":7,"DK3UA":4,"CT1BOH":2}}, "CS3B":{"dxcall":"CS3B","freq":"18 109.9","mode":"CW","age":16,"lsn":{"F6IIT":34,"HA2KSD":19,"S50ARX":17,"HB9BXE":16,"OL7M":16,"OE6TZE":10,"DL1RNN":9,"UD4FD":9,"DK3UA":4,"G0LUJ":3,"HB9DCO":18}}, "F1UQ":{"dxcall":"F1UQ","freq":"14 031.9","mode":"CW","age":38,"lsn":{"F6IIT":34,"S50ARX":21,"OL7M":16,"HA2KSD":7,"OE6TZE":5,"DK3UA":4,"CT7AHV":15}}, "4X6TU":{"dxcall":"4X6TU","freq":"18 110.1","mode":"CW","age":38,"lsn":{"OH6BG":35,"F6IIT":34,"HA2KSD":19,"DL9GTB":19,"S50ARX":17,"HB9BXE":16,"OL7M":16,"F5RRS":10,"OE6TZE":10,"DL1RNN":9,"UD4FD":9,"DK3UA":4,"G0LUJ":3,"DK9IP":2,"SK3W":15}}, "OJ9X":{"dxcall":"OJ9X","freq":"10 107.1","mode":"CW","age":40,"lsn":{"OH6BG":35,"F6IIT":34,"HA2KSD":19,"DL9GTB":19,"S50ARX":17,"HB9BXE":16,"OL7M":16,"F5RRS":10,"OE6TZE":10,"DL1RNN":9,"UD4FD":9,"DK3UA":18,"G0LUJ":3,"DK9IP":2,"SK3W":15}}, "YP5XMAS":{"dxcall":"YP5XMAS","freq":"14 021.1","mode":"CW","age":40,"lsn":{"OH6BG":35,"F6IIT":34,"HA2KSD":19,"DL9GTB":19,"S50ARX":17,"HB9BXE":16,"OL7M":16,"F5RRS":10,"OE6TZE":10,"DL1RNN":9,"UD4FD":9,"DK3UA":18,"G0LUJ":3,"DK9IP":2,"SK3W":15,"SM2IUF":8}}, "R4LA":{"dxcall":"R4LA","freq":"7 019.0","mode":"CW","age":50,"lsn":{"OH6BG":35,"F6IIT":34,"HA1VHF":29,"DL3KR":10,"DL8TG":20,"DL9GTB":19,"HA2KSD":19,"S50ARX":17,"OL7M":16,"HB9BXE":16,"DO4DXA":12,"HB9JCB":11,"F5RRS":10,"OE6TZE":10,"UD4FD":9,"DL1RNN":9,"DK3UA":4,"G0LUJ":3,"DK9IP":2}}, "IN3IYD":{"dxcall":"IN3IYD","freq":"7 024.1","mode":"CW","age":50,"lsn":{"OH6BG":35,"F6IIT":34,"HA1VHF":29,"DL3KR":26,"DL8TG":20,"DL9GTB":19,"HA2KSD":19,"S50ARX":17,"SV1CDN":16,"HB9BXE":16,"OL7M":16,"DO4DXA":12,"F4EGZ":11,"HB9JCB":11,"OE6TZE":10,"F5RRS":10,"DL1RNN":9,"UD4FD":9,"DK3UA":4,"G0LUJ":3,"DK9IP":2}}, "PA3GEG":{"dxcall":"PA3GEG","freq":"14 028.0","mode":"CW","age":50,"lsn":{"F6IIT":34,"S50ARX":21,"OL7M":16,"HA2KSD":7,"OE6TZE":5,"HB9DCO":5,"DK3UA":4,"CT1BOH":15}},"F5HTR\/P":{"dxcall":"F5HTR\/P","freq":"7 032.0","mode":"CW","age":58,"lsn":{"F6IIT":34,"S50ARX":21,"OL7M":16,"HA2KSD":7,"DK0TE":5,"HB9DCO":5,"OE6TZE":22,"DK3UA":4}}, "EM5SE":{"dxcall":"EM5SE","freq":"7 044.8","mode":"CW","age":58,"lsn":{"F6IIT":34,"S50ARX":21,"OL7M":16,"HA2KSD":7,"DK0TE":5,"HB9DCO":28,"OE6TZE":22,"DK3UA":4}} }
with &xml=1 e.g. https://www.hamqth.com/rbn_data.php?data=1&band=160,80,60,40,30,20,17,15,12,10,6,2&fromcont=EU&mode=CW,RTTY,PSK31,PSK63&cont=AF,AN,AS,EU,NA,SA,OC&waz=*&itu=*&age=60&order=3&xml=1
returns:
<?xml version="1.0"?> <rbnspots> <rbnspot> <dxcall>W3KHG</dxcall> <freq>7007.2</freq> <age>1</age> <reports> <report> <call>GW8IZR</call> <snr>10</snr> </report> <report> <call>G0LUJ</call> <snr>8</snr> </report> </reports> </rbnspot> <rbnspot> <dxcall>PE3RKE</dxcall> <freq>7023.0</freq> <age>1</age> <reports> <report> <call>GW8IZR</call> <snr>10</snr> </report> <report> <call>OL7M</call> <snr>14</snr> </report> </reports> </rbnspot> </rbnspots>This API is also unlimited and should be very fast. All RBN spots newer than one hour are stored in memory table.
If you find any bug or have any problem with developer's interface, please let me know via petr [at] ok2cqr.com. Everything is provided for free, but please put HamQTH banner on your page, tell your friends about us, or consider small donation. Thank you!
Changelog
2.8 - (22 Sep 2018) picture tag returned, returns link to user header image 2.7 - (21 Dec 2017) added RBN data in JSON or XML, documentation updated2.6 - (28 Jan 2015) added qslrdirect field, documentation updated
2.5 - (11 Jan 2015) removed self spot interface, added country name and band to CSV dxcluster spots
2.4 - (29 Jun 2014) added JSON DXCC search
2.3 - (25 jun 2013) added Simple award verification protocol
2.2 - (12 may 2013) added self spotting inteface
2.1 - (10 may 2013) added dxcluster inteface
2.0 - (20 feb 2013) added social network fields
1.9 - (18 nov 2012) real-time QSO upload interface added
1.8 - (29 sep 2012) added access to bio information through XML interface
1.7 - (02 sep 2012) added log upload interface
1.6 - (28 jun 2012) added ADR and ADR_ADIF fields
1.5 - (22 apr 2012) added XML DXCC search
1.4 - (02 mar 2012) added latitude, longitude, utc_offset and continent fields
1.3 - (07 oct 2011) added prg parameter into XML search query
1.2 - (26 sep 2011) added country and adr_country fields
1.1 - (01 sep 2011) added IOTA field