{"id":34,"date":"2026-01-18T12:35:06","date_gmt":"2026-01-18T12:35:06","guid":{"rendered":"https:\/\/qth.digital\/?p=34"},"modified":"2026-01-18T12:51:11","modified_gmt":"2026-01-18T12:51:11","slug":"parks-on-the-air-pota-apis","status":"publish","type":"post","link":"https:\/\/qth.digital\/?p=34","title":{"rendered":"Parks On The Air (POTA): APIs"},"content":{"rendered":"\n<p>Many amateur radio enthusiasts enjoy <a href=\"https:\/\/parksontheair.com\/index.html\">Parks on the Air<\/a>. It is a global activity in which ham radio operators go out to parks and set up an &#8220;activation&#8221;. Their goal is to log at least 10 contacts while they are in the park. There are a variety of ways in which the activator may choose to activate their park: CW (Morse Code), Digital (FT8, FT4) or Voice. There are also a number of &#8220;achievements&#8221; you can get and the POTA site tracks these for you. <\/p>\n\n\n\n<p>As a POTA &#8220;hunter&#8221;, you can try and make a contact with the &#8220;activator&#8221; from any location via their method of communication. The <a href=\"https:\/\/pota.app\/#\/\">POTA<\/a> spot site lists current spots that have occurred. My goal is to finish the last 2 states to achieve all 50 state activations along with the District of Columbia. For me, I need to activate parks in both Rhode Island and Hawaii. While there are applications that will alert you to when a park of interest is being activated, I wanted to explore Python and set up a process where I can get notified when someone is activating a park of interest.<\/p>\n\n\n\n<p>It turns out that there is an API that displays the same information that is on the POTA spot site. It is in JSON and can be viewed <a href=\"https:\/\/api.pota.app\/spot\/activator\/\">here<\/a>. I&#8217;m currently viewing the <a href=\"https:\/\/en.wikipedia.org\/wiki\/JSON\">JSON<\/a> from the API in MicrosoftEdge, which includes a Pretty-print option:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"898\" height=\"166\" src=\"https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image.png\" alt=\"\" class=\"wp-image-35\" style=\"aspect-ratio:5.409911996294581;width:537px;height:auto\" srcset=\"https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image.png 898w, https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image-300x55.png 300w, https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image-768x142.png 768w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/figure>\n\n\n\n<p>Checking the Pretty-print checkbox displays:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1004\" height=\"734\" src=\"https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image-6.png\" alt=\"\" class=\"wp-image-41\" style=\"aspect-ratio:1.3678817157078027;width:519px;height:auto\" srcset=\"https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image-6.png 1004w, https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image-6-300x219.png 300w, https:\/\/qth.digital\/wp-content\/uploads\/2026\/01\/image-6-768x561.png 768w\" sizes=\"auto, (max-width: 1004px) 100vw, 1004px\" \/><\/figure>\n\n\n\n<p>Now, in JSON, the beginning square bracket <strong>[<\/strong>, indicates that we have an array. An array is a collection of items and each item within the array begins and ends with <strong>{<\/strong> and <strong>}<\/strong>. The above JSON is fairly straight forward in that we have a dictionary (key, value pair). I&#8217;ve included only one of the elements of the array.<\/p>\n\n\n\n<p>We have our API end point and we&#8217;ve been able to view the data though what are these items?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>spotId<\/strong>: This is a unique identifier for the spot. In this case, it is 46518727<\/li>\n\n\n\n<li><strong>activator<\/strong>: This is the amateur radio callsign of the individual that is activating the park<\/li>\n\n\n\n<li><strong>frequency<\/strong>: This is the frequency that the activator is transmitting on. Based upon your license in the U.S. you can transmit on the following <a href=\"https:\/\/www.arrl.org\/files\/file\/Regulatory\/Band%20Chart\/Hambands4_Color_11x8_5.pdf\">bands<\/a>. We can convert the frequency to the band that the activator is on.<\/li>\n\n\n\n<li><strong>mode<\/strong>: This is the type of transmission that the activator is using. In this case it is SSB (Single Sideband) which is voice.<\/li>\n\n\n\n<li><strong>reference<\/strong>: This is the park identifier that the activator is at.<\/li>\n\n\n\n<li><strong>parkName<\/strong>: Name of the park, in this case a <strong>null<\/strong> is shown, this means that there is no value for this spot but the field is in the data source.<\/li>\n\n\n\n<li><strong>spotTime<\/strong>: The time of the latest spot. Note that this is <a href=\"https:\/\/en.wikipedia.org\/wiki\/UTC%2B00:00\">UTC<\/a> time with a 0 offset. You may want to convert this time to your local time.<\/li>\n\n\n\n<li><strong>spotter<\/strong>: This is the amateur radio callsign of the last person that spotted\/contacted the activator in the park.<\/li>\n\n\n\n<li><strong>comments<\/strong>: Any comments that the spotter might have left for the activator. In this case, it is 73&#8217;s, which means &#8220;best regards&#8221;. <\/li>\n\n\n\n<li><strong>source<\/strong>: &#8220;Web&#8221; which means the spotter entered their information in the POTA site interactively.<\/li>\n\n\n\n<li><strong>invalid<\/strong>: Not sure what this means as I don&#8217;t know of a data dictionary for this data.<\/li>\n\n\n\n<li><strong>name<\/strong>: The full park name where the activator is.<\/li>\n\n\n\n<li><strong>locationDesc<\/strong>: Identifier for where the activator is. In the US, you might see <strong>US-RI<\/strong>, which means the activator is in the United States and is in the state of Rhode Island.<\/li>\n\n\n\n<li><strong>grid4<\/strong>: Grid square: In the U.S. this identifies and area that is\u00a0100 miles wide by 70 miles.<\/li>\n\n\n\n<li><strong>grid6<\/strong>: Grid square: A smaller subsquare of about 3&#215;4 miles. <\/li>\n\n\n\n<li><strong>latitude<\/strong>: Location<\/li>\n\n\n\n<li><strong>longitude<\/strong>: Location<\/li>\n\n\n\n<li><strong>count<\/strong>: Number of spotters<\/li>\n\n\n\n<li><strong>expire<\/strong>: Not sure<\/li>\n<\/ul>\n\n\n\n<p>Unfortunately, the API is not documented so I&#8217;ve made some guesses at what each of these elements mean. Ok, so we have a large JSON structure, but what are we going to do with it? That will be the next post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many amateur radio enthusiasts enjoy Parks on the Air. It is a global activity in which ham radio operators go out to parks and set up an &#8220;activation&#8221;. Their goal is to log at least 10 contacts while they are in the park. There are a variety of ways in which the activator may choose &#8230; <a title=\"Parks On The Air (POTA): APIs\" class=\"read-more\" href=\"https:\/\/qth.digital\/?p=34\" aria-label=\"Read more about Parks On The Air (POTA): APIs\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[5,4,3],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-amateur-radio","category-api","category-pota"],"_links":{"self":[{"href":"https:\/\/qth.digital\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qth.digital\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qth.digital\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qth.digital\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qth.digital\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":2,"href":"https:\/\/qth.digital\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/qth.digital\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/qth.digital\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qth.digital\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qth.digital\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}