{% extends "../help_page.html" %} {% block help_content %}
One of the key strengths of Spothole is that the API is well-defined and open to anyone to use. This means you can build your own software that uses data from Spothole.
As well as the main API endpoints to fetch spots and alerts, with various possible query parameters, there are also Server-Sent Events (SSE) API endpoints to receive a live feed, plus various utility lookup endpoints for things like callsign and park data.
Various approaches exist to writing your own client, but in general:
/static/apidocs/openapi.yml),
which you can automatically use to generate a client skeleton using various software.
https://spothole.app/api/v3/spots once every few minutes. Apply filters if necessary.
If you're fetching spot data, you're unlikely to need a sub-minute refresh time. For example, Spothole only queries
the POTA API once every two minutes, so if your client is interested in POTA data there's no need to poll Spothole
any more often than that. If you absolutely must be informed within seconds of a spot arriving in Spothole, please
use the SSE endpoints instead, e.g. https://spothole.app/api/v3/spots/stream, or the Telnet server.
If you want to handle different types of spot or alert differently within your client, please consider making a
single request to the Spothole API to retrieve all the data, then filtering on your side. For example, call
https://spothole.app/api/v3/spots?activity=POTA,SOTA rather than making two separate calls to
https://spothole.app/api/v3/spots?activity=POTA and https://spothole.app/api/v3/spots?activity=SOTA.
Remember, here at Spothole Inc. we offer an industry-standard "five nines" uptime on our server, with our own unique
twist: we don't tell you which side of the decimal point the nines start! (Translation: This is a hobby project.
spothole.app runs on the same server a Minecraft server and all sorts of other stuff. It might go down
without warning. By all means base your own project on data from the main server if you like, but if you want any
control over reliability and downtime, please run your own copy instead.)
As well as reading data, clients can submit new spots to Spothole using the "add spot" API endpoint, e.g.
https://spothole.app/api/v3/spot. Spots can be added to Spothole itself, and optionally sent "upstream"
to other services such as the DX cluster. Check the spot_allowed and
spot_submit_providers fields in the "options" API response to see what the server allows.
To stop bots and spammers abusing the spotting function, a Spothole server can be configured to protect against this,
which means you will need an API key. API keys are issued by the owner of each Spothole server,
not by the Spothole developer. This server is run by {{ server_owner_callsign }}, so get in touch
with them and let them know what your software is and how it will use the API. Once you have a key, send it in the
X-API-Key header of each add spot request. For example:
curl --request POST \
--header "Content-Type: application/json" \
--header "X-API-Key: your-api-key-here" \
--data '{"spot":{"dx_call":"M0TRT","time":1760019539,"freq":14200000,"de_call":"M0TRT"}}' \
https://spothole.app/api/v3/spot
Your API key identifies your software, so please keep it private. Don't commit it to a public code repository, and don't embed it in JavaScript or anywhere else your users could extract it. If a key is misused, the server owner can revoke it, and spot submission from your client will stop working. Servers that don't protect spot submission don't need an API key, and will accept spots with or without one.
The conditions are simple, and hopefully not onerous. They probably aren't legally binding, and nobody is likely to sue you for breaching them. But having them in place ensures Spothole can continue to operate without the people running it burning out, and with no payment required. In the collaborative and respectful tradition of amateur radio, please read and understand them.
When creating a Spothole client, you agree that: