Skip to main content

SDK Libraries

Alpha Release

The Python, Node.js, and Go SDKs are currently in alpha (v0.1.0).

Requirements:

  • Python SDK: Python >= 3.9
  • Node.js SDK: Node.js >= 18 (required for global fetch)
  • Go SDK: Go >= 1.21

Known Limitations:

  • Upload integration tests require live S3 (env-gated)
  • No retry circuit breaker (planned for v0.9.0 beta)
  • No streaming support yet

Technical Details:

  • Generated from OpenAPI spec using openapi-generator-cli 7.10.0
  • Dependencies: Python (aiohttp, pydantic v2), Node.js (axios), Go (stdlib only)

Installation

Python

pip install spatialflow

Node.js

npm install @spatialflow/sdk
# or
yarn add @spatialflow/sdk

Go

go get github.com/spatialflow-io/spatialflow-go

Quick Start

Python

import asyncio
from spatialflow import SpatialFlow

async def main():
async with SpatialFlow(api_key="sf_xxx") as client:
# List geofences
response = await client.geofences.list()
for geofence in response.geofences:
print(f"{geofence.name}: {geofence.id}")

asyncio.run(main())

For complete Python SDK documentation, see the Python SDK Guide.

Node.js

import { SpatialFlow } from "@spatialflow/sdk";

const client = new SpatialFlow({ apiKey: "sf_xxx" });

// List geofences
const response = await client.geofences.appsGeofencesApiListGeofences();
for (const geofence of response.data.results) {
console.log(`${geofence.name}: ${geofence.id}`);
}

Go

package main

import (
"context"
"log"
"net/http"

"github.com/spatialflow-io/spatialflow-go/spatialflow"
)

func main() {
// Create client with API key
client, err := spatialflow.NewClient(
spatialflow.WithAPIKey("sf_your_api_key"),
)
if err != nil {
log.Fatal(err)
}

ctx := context.Background()

// Make API requests using the HTTP client (includes auth, retry, User-Agent)
req, _ := http.NewRequestWithContext(ctx, "GET", client.BaseURL()+"/api/v1/geofences", nil)
resp, err := client.HTTPClient().Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()

// Check for API errors
if err := spatialflow.CheckResponse(resp); err != nil {
log.Fatal(err)
}

log.Printf("Got %d response", resp.StatusCode)
}

Features

All SDKs include:

  • Authentication - API key and JWT token support
  • Full CRUD - Geofences, workflows, webhooks, devices (via generated client or HTTP client)
  • Pagination - Iterators for paginated endpoints
  • Webhook Verification - HMAC-SHA256 signature validation
  • Job Polling - Job status tracking with timeout handling
  • File Uploads - GeoJSON, KML, GPX import helpers
  • Typed Errors - AuthenticationError, NotFoundError, ValidationError, etc.

Documentation

REST API

You can also use the REST API directly: