A Go client library for the EarthRanger HTTP API. EarthRanger is a software solution that helps protected area managers, ecologists, and wildlife biologists make informed operational decisions for wildlife conservation. This is a Go port of the Python earthranger-client.
Find a file
2026-05-22 13:47:35 +02:00
erclient first commit 2026-05-22 13:37:42 +02:00
go.mod updated module name 2026-05-22 13:47:35 +02:00
go.sum first commit 2026-05-22 13:37:42 +02:00
LICENSE first commit 2026-05-22 13:37:42 +02:00
README.md updated module name 2026-05-22 13:47:35 +02:00

EarthRanger Client (Go)

A Go client library for the EarthRanger HTTP API. EarthRanger is a software solution that helps protected area managers, ecologists, and wildlife biologists make informed operational decisions for wildlife conservation.

This is a Go port of the Python earthranger-client.

Installation

go get git.telementary.net/telementary/er-client-go

Usage

package main

import (
    "context"
    "fmt"
    "log"

    "git.telementary.net/telementary/er-client-go/erclient"
)

func main() {
    ctx := context.Background()

    client, err := erclient.New(
        "https://sandbox.pamdas.org",
        erclient.WithCredentials("username", "password", "client_id"),
    )
    if err != nil {
        log.Fatal(err)
    }

    // Get current user
    me, err := client.GetMe(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(me)

    // Post an observation
    obs := map[string]interface{}{
        "recorded_at": "2024-01-01T00:00:00Z",
        "location": map[string]float64{
            "latitude":   -1.234,
            "longitude": 36.789,
        },
    }
    result, err := client.PostObservation(ctx, obs)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(result)
}

Token-based auth

client, err := erclient.New(
    "https://sandbox.pamdas.org",
    erclient.WithToken("your-token"),
)

Paginated iteration (channels)

ch, errCh := client.GetObservations(ctx, map[string]string{
    "subject_id": "subject-uuid",
    "since":      "2024-01-01T00:00:00Z",
})
for obs := range ch {
    fmt.Println(obs)
}
if err := <-errCh; err != nil {
    log.Fatal(err)
}

API Coverage

Method Description
Pulse API status check
GetMe, GetUsers User info
GetEvents, GetEvent, PostEvent, PatchEvent, DeleteEvent Event CRUD
GetEventTypes, GetEventType, PostEventType, PatchEventType Event type management
GetEventCategories, PostEventCategory, PatchEventCategory Event categories
GetObservations, PostObservation, PostSensorObservation Observation management
GetSubjects, GetSubject, PostSubject, PatchSubject, DeleteSubject Subject CRUD
GetSubjectGroups, AddSubjectsToSubjectGroup, RemoveSubjectsFromSubjectGroup Subject groups
GetSources, GetSourceByID, PostSource, DeleteSource Source management
GetPatrols, PostPatrol, DeletePatrol Patrol management
GetMessages, PostMessage, DeleteMessage Message management
GetFile File download
PostEventFile, DeleteEventFile Event file attachments
PostEventNote, DeleteEventNote Event notes
GetSourceAssignments Source-subject assignments
GetFeatureGroup Spatial feature groups
ExportObservationsToCSV CSV export
GPX Export via GPXExporter Export events and tracks to GPX
CSV Loading via CSVObservationLoader Parse observation CSV files

License

GNU Affero General Public License v3.0 or later. See LICENSE.