Developers, we would love for you to interface with HamDash!
When saving a QSO, simply send a JSON-encoded POST request to https://hamdash.affirmatech.net/api/standing
to display your station’s score on the scoreboard!
To obtain a free API key, please request one using the Affirmatech Contact Form. Please include your name, e-mail address, and application name and we send a key to the e-mail provided.
The following is the minimum required to accept a standing upload (but we recommend sending as many fields as possible):
{
"contest": "CQ-WPX-SSB",
"score": 1740060,
"operator": {
"callsign": "N3FJP"
},
"totalQsos": 1090, // Not required but an excellent statistic
"firstQsoDate": "2023/03/25 09:01:50Z" // Not required but greatly encouraged if available
}
Field | Type | Description |
---|---|---|
contest |
string | Either the cabrillo name or full contest name. See this list for reference. |
score |
number | Numeric total score |
operator.callsign |
string | Callsign of operating station |
totalQsos |
number | QSO Count Total |
firstQsoDate |
ISO 8601 Date | Date of first QSO if available. Helps ensure score is linked with the correct contest session. Note that in ISO format, the trailing “Z” denotes UTC time. |
The following example includes every available field:
{
"contest": "CQ-WPX-SSB",
"score": 1740060,
"operator": {
"callsign": "N3FJP",
"band": "20", // Uses ADIF Specification. Assumes "m" suffix if omitted
"mode": "SSB",
"rate20": 3, // QSOs per hr over last 20 minutes (total QSOs within last 20 min * 3)
"rate60": 1, // QSOs per hr over last 60 minutes
"frequency": 14.2545,
"name": "Scott"
},
"multiplierCount": 630,
"totalQsos": 1090,
"totalQsoPoints": 2762, // Score before multipliers
"club": {
"name": "Northeast Maryland Amateur Radio Contest Society" // HamDash will create the club if needed
},
"software": "N3FJP",
"softwareVersion": "N3FJP's CQ WPX Contest Log 4.9.7",
"stationCategory": "FIXED",
"bandCategory": "ALL",
"modeCategory": "SSB",
"assistedCategory": "ASSISTED",
"transmittersCategory": "ONE",
"powerCategory": "HIGH",
"opsCategory": "SINGLE-OP",
"overlayCategory": "N/A",
"totalOpTime": "24:54:51", // N3FJP Software omits breaks more than 30 minutes
"avgQsHr": "43.8", // Calculated by HamDash if totalOpTime provided
"firstQsoDate": "2023/03/25 09:01:50Z",
"latitude": 40,
"longitude": -76.8,
"continent": "NA",
"dxcc": 291,
"country": "USA", // Please use dxcc if possible
"state": "MD",
"section": "MDC",
"cqZone": 5,
"ituZone": 8,
"lastQso": {
"date": "2023/03/26 22:00:59Z",
"callsign": "HK3C",
"country": "Colombia", // Please use dxcc if possible
"dxcc": 116,
"state": "",
"section": "",
"cqZone": 9,
"ituZone": 12,
"prefix": "HK3",
"latitude": 5,
"longitude": -74,
"band": "20",
"mode": "SSB",
"continent": "SA",
"transmitterId": 0, // Transmitter that made the QSO in multi-transmitter setups
"frequency": 14.2545
}
}
club
and lastQso
. Optional fields can be omitted if not available.operator.band
and lastQso.band
please follow the ADIF Band Specification. We will append “m” if a suffix is not presentdxcc
and lastQso.dxcc
are used instead of country
and lastQso.country
.Our recommendation is to send a standing update when:
If the contest session has not yet started, the station will be added to the scoreboard with a score of zero regardless of the score sent. A contest session will accept standing updates up to 1 hour after contest end.
Currently open browser windows will see a welcome message for the first upload of a station. New QSOs will be displayed in the feed while the contest is active.
We will maintain an active Test contest for your development and experimentation. Set contest
to "TEST"
to send uploads to the test contest.
Here is some example C# code for uploading to HamDash:
public static async Task<string> SendScoreToHamDash(
HamDashScorePOST data, string endpoint = "https://hamdash.affirmatech.com/api/standing")
{
try
{
using (var client = new HttpClient())
{
var serializedBody = JsonConvert.SerializeObject(data);
var content = new StringContent(serializedBody, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("headerName", "headerValue"); // API Key goes here
var response = await client.PostAsync(endpoint, content);
return ((int)response.StatusCode) + ": " + response.StatusCode.ToString() +
"\r\n\r\n" + await response.Content.ReadAsStringAsync();
}
}
catch (Exception e)
{
return e.Message;
}
}
public class LastQSO // Values of station worked
{
public string date;
public string callsign; // Callsign of last station worked
public string country;
public int dxcc;
public string state;
public string section;
public int cqZone;
public int ituZone;
public string prefix;
public double latitude;
public double longitude;
public string band = "" // (80, 40, etc.)
public string mode = "" // (CW, SSB, etc.)
public string continent;
public int transmitterId = 0; // Transmitter that made the QSO in multi-transmitter setups
public double frequency;
}
public class Club
{
public string name;
}
public class Operator
{
public string callsign = ""; // Callsign of uploading station
public string band = ""; // Current band
public string mode = ""; // Current mode
public int rate20 = 0; // Number of QSOs last 20 minutes * 3
public int rate60 = 0; // Number of QSOs last 60 minutes
public double frequency = 0; //Optional - Current frequency in MHz (21.446)
public string name = "";
}
public class HamDashScorePOST
{
// Cabrillo contest name derived from WA7BNM Contest Calendar. Use TEST for test contest.
public string contest = "";
public int score; // Required - The total score
public Operator @operator = new Operator();
public int multiplierCount; // Total multipliers
public int totalQsos = 0; // Total QSOs
public int totalQsoPoints = 0; // Score before multipliers
public Club club = new Club();
public string software = ""; // Software family (N3FJP, etc.)
public string softwareVersion = ""; // Program name and version (ARRL DX Contest Log 1.2.3, etc.)
public string stationCategory = ""; // (FIXED, etc.)
public string bandCategory = ""; // (ALL, 80, etc.)
public string modeCategory = ""; // (MIXED, CW, SSB, etc.)
public string assistedCategory = ""; // (ASSISTED or NON-ASSISTED)
public string transmittersCategory = ""; // (ONE, etc.)
public string powerCategory = ""; // (HIGH, LOW or QRP)
public string opsCategory = // (SINGLE-OP, MULTI-OP)
public string overlayCategory = "";
public string totalOpTime = ""; // N3FJP Software omits breaks greater than 30 minutes
public string avgQsHr = ""; // Optional - calculated by HamDash if totalOpTime provided
public string firstQsoDate; // Recommended ISO formatted Date of first QSO
public double latitude; // Latitude of posting station
public double longitude; // Longitude of posting station
public string continent = ""; // Continent of posting station
public int dxcc; // DXCC of posting station
public string country = ""; // Country of posting station
public string state = ""; // State of posting station
public string section = ""; // Section of posting station
public int cqZone = 0; // CQ Zone of posting station
public int ituZone = 0; // ITU Zone of posting station
public LastQSO lastQso = null;
}