Build with GeoServer APIs

Comprehensive REST APIs, official SDKs, and developer-first documentation to integrate enterprise geospatial data into your applications in minutes.

$ geoserver init --project spatial-app
→ Creating project structure...
→ Fetching default layers... done
→ Generating config... done
Ready! Run geoserver serve to start.

Up & Running in 4 Steps

Integrate geospatial capabilities into your stack with minimal configuration.

Step 1

Generate API Key

Create a free developer account and generate your secure API credentials from the dashboard.

Step 2

Install SDK

Use our official packages for Python, JavaScript, Go, or Java via npm, pip, or go mod.

Step 3

Initialize Client

Configure the client with your API key and base URL. Authentication is handled automatically.

Step 4

Query & Render

Fetch spatial data, apply filters, and render maps or analytics in your application.

Core Endpoints

RESTful interfaces supporting OGC standards (WMS, WFS, WCS) and custom GeoServer extensions.

GET

/layers

List all available map layers with metadata, CRS, and bounding box information.

POST

/features/query

Execute spatial queries with filter expressions, pagination, and attribute selection.

GET

/metadata/{id}

Retrieve comprehensive metadata for datasets including lineage, accuracy, and usage stats.

PUT

/layers/{id}/styles

Update or replace SLD/SLPP styling rules for dynamic map rendering.

POST

/export/geopackage

Generate secure, time-bound GeoPackage exports for offline analysis and sharing.

GET

/health

System status, cache hit rates, and node connectivity for infrastructure monitoring.

Native Integrations

Type-safe, well-documented SDKs maintained by the GeoServer core team.

🐍

Python

pip install geoserver-py View Docs →

JavaScript / TS

npm install @geoserver/sdk View Docs →
🔷

Go

go get github.com/geoserver/go-sdk View Docs →

Java

mvn add geoserver-java View Docs →

Try It Out

Authentic implementation patterns for common geospatial workflows.

from geoserver import Client, filters

client = Client("https://api.geoserver.io", api_key="your_api_key")

# Fetch layers within a bounding box
bbox = (-122.5, 37.7, -122.3, 37.9)
layers = client.layers.query(bbox=bbox, limit=20)

for layer in layers:
    print(f"Layer: {layer.name} | Features: {layer.feature_count}")

# Execute spatial filter
result = client.features.search(
    layer="urban_zones",
    filter=filters.within(geometry=bbox),
    attributes=["name", "area_sqkm", "classification"]
)
import { Client, filters } from "@geoserver/sdk";

const client = new Client({
  baseUrl: "https://api.geoserver.io",
  apiKey: "your_api_key"
});

// Fetch layers within a bounding box
const bbox = [-122.5, 37.7, -122.3, 37.9];
const layers = await client.layers.query({ bbox, limit: 20 });

layers.forEach(layer => {
  console.log(`Layer: ${layer.name} | Features: ${layer.feature_count}`);
});

// Execute spatial filter
const result = await client.features.search({
  layer: "urban_zones",
  filter: filters.within(bbox),
  attributes: ["name", "area_sqkm", "classification"]
});
package main

import (
    "fmt"
    "github.com/geoserver/go-sdk/v2"
)

func main() {
    client := geoserver.NewClient(
        geoserver.BaseURL("https://api.geoserver.io"),
        geoserver.APIKey("your_api_key"),
    )

    bbox := []float64{-122.5, 37.7, -122.3, 37.9}
    layers, _ := client.Layers.Query(bbox, 20)

    for, layer := range layers {
        fmt.Printf("Layer: %s | Features: %d\n", layer.Name, layer.FeatureCount)
    }
}

Developer Resources

Everything you need to build, deploy, and scale geospatial applications.

📖

Full API Reference

Comprehensive endpoint documentation, request/response schemas, and interactive try-it-out console.

Read API Docs →
🛠️

Integration Guides

Step-by-step tutorials for mapping libraries (Leaflet, Mapbox, Deck.gl), data pipelines, and cloud providers.

View Guides →
🐙

Open Source & GitHub

Access SDK repositories, contribute to open-source tools, report issues, and review pull requests.

Browse Repos →