API主接口:https://api.hamcq.cn/v1/logbook?from=gridtracker,其中from参数有过滤机制,只能是gridtracker。
参数(application/json):
{
    "key": "YOUR_API_KEY",
    "adif":"ADIF_STRING",
    "app":"YOUR_APPLICATION_NAME"
}
其中只有key是必填的。如果只填写key的话等于测试key是否有效,同时正确填写所有参数才能正常进行日志上传。
如果key有效后端将返回“Pass”,且只要key正确,无论上传的adif是否合法都会返回“Pass“,只是日志不会被记录。如果是其他情况似乎会给出一个json说明理由,例如:
// 此时http状态码为406
   {"code":406,"status":false,"message":"Invalid"}
示例:
// See https://github.com/SydneyOwl/cloudlog-helper for more
public class HamCQAPIExample
{
    public static async Task<string> TestHamCQConnectionAsync(string apikey)
    {
        return await UploadQSOToHamCQAsync(apikey, null);
    }
    public static async Task<string> UploadQSOToHamCQAsync(string apikey, string? adif)
    {
        try
        {
            var reqJson = new JObject { { "key", apikey } };
            if (adif is not null)
            {
                reqJson.Add("adif", adif);
                reqJson.Add("app", DefaultConfigs.DefaultApplicationName);
            }
            var result = await DefaultConfigs.HamCQQsoUploadEndpoint
                .AllowHttpStatus(406)
                .WithHeader("User-Agent", DefaultConfigs.DefaultHTTPUserAgent)
                .WithHeader("Content-Type", "application/json")
                .WithTimeout(TimeSpan.FromSeconds(DefaultConfigs.DefaultRequestTimeout))
                .PostStringAsync(reqJson.ToString());
            var responseText = await result.GetStringAsync();
            var code = result.StatusCode;
            if (responseText == "Pass")return string.Empty;
            var res = JsonConvert.DeserializeObject<JObject>(responseText);
            if (res is null) return $"HamCQ Error: {TranslationHelper.GetString("invalidapikey")}({responseText})";
            return $"HamCQ Error: {TranslationHelper.GetString("invalidapikey")} ({res["message"]})";
        }
        catch (Exception e)
        {
            return e.Message;
        }
    }
}