Skip to content

Download data from M3G

In the Bash shell, one could use a command-line such curl to access M3G API: it acts as an HTTP client and allows you to send requests and display/store the corresponding responses.

GET the sitelog of a given station

Let's say you have identified a site log (i.e. information that you also get in the M3G website) by the station 9-characters id aka id e.g. BRUX00BEL, and you want to download it. M3G allows you to do this and get the output in various formats: JSON, GeodesyML or IGS site log format.
To get the JSON is the format:

curl -s -X GET "" -H  "accept: application/json"

Here we used curl to send an HTTP GET request to return the resource located by the given URL. In practice you can omit the -X GET (which is the default) and you might want to 'nicely' format the output with json_pp:

curl -s -X GET "" -H  "accept: application/json" | json_pp

and get the following output:

   "_links" : {
      "geodesyML" : {
         "href" : ""
      "self" : {
         "href" : ""
      "sitelog" : {
         "href" : ""
   "dateUpdate" : "2020-09-30T09:39Z",
   "geodesymlName" : "BRUX00BEL.xml",
   "id" : "BRUX00BEL",

For the GeodesyML or the IGS site log format:

curl -s -X GET "" -H  "accept: application/geodesyML0.4"
curl -s -X GET "" -H  "accept: application/sitelog"

GET the sitelogs of all stations matching a search criterion

Let's say you want to get the site log for entries that fit a give search criterion, e.g. stations having the string "PRAG" in their 9-char id:

curl -g -s -X GET "[id][like]=PRAG" -H  "accept: text/plain"

As you can notice by looking at the command line above, you can select which page of results should be returned (?page=1). This is one of the "pagination" parameters. See, for example, a REST API handbook for more info. More conveniently, one can select one of the columns of the output and get:

curl -g -s -X GET "[id][like]=PRAG" -H  "accept: text/plain" | awk '{print $1}'

and get:


aka the site logs of the entries match your search criterion: filter[id][like]=PRAG. There are various other query parameters. You might find some others in the generated swagger dashboard of our API. Note that, on most terminals, if []and/or {} are present in the URL, one needs to add -g to the command line to disable the "URL globbing parser" and escape parentheses.

GET the list of stations included in a given network

It could be useful to simply get a list of stations (9-char id) included in a given network e.g. EPN, EPOS. Here we'll need to use curl and a bit of Python, but no special libraries:

curl -s -X GET "" -H  "accept: application/json" | python -c "import sys,json; print(json.load(sys.stdin)['included'])"

You'll get a list of stations e.g.

['BRUX00BEL', 'AUBG00DEU', 'NOA100GRC', 'GOR200DEU', 'BORJ00DEU', 'HEL200DEU',...

Similarly, to get the list of stations proposed to a given network e.g. EPOS:

curl -s -X GET "" -H  "accept: application/json" | python -c "import sys,json; print(json.load(sys.stdin)['proposed'])"

GET list of satellite systems that a given station is currently tracking

curl -s -X GET "" -H  "accept: application/json" | python -c "import sys,json; print(json.load(sys.stdin)['sitelog']['receivers'][-1]['satelliteSystem'])"
['GPS', 'GLO', 'GAL', 'BDS', 'QZSS', 'IRNSS', 'SBAS']