🌍

GISTools.io API

Programmatic GIS file conversion for developers and AI agents

Quick Start

curl -X POST \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "file=@input.shp.zip" \
  "https://gistools-production.up.railway.app/convert?output_format=geojson" \
  -o output.geojson

That's it. Upload a file, get it converted. Supports 13+ GIS formats including File Geodatabase.

Authentication

All API requests require the X-API-Key header.

X-API-Key: gis_xxxxxxxxxxxxx

The API is free to use. No authentication required for basic conversions. For higher limits, include an API key from your dashboard.

Base URL: https://gistools-production.up.railway.app

Endpoints

POST/convert

Convert a GIS file to another format.

Parameters

output_formatQuery param. Target format (see below)
fileMultipart form file upload

Supported Formats

shapefilegeojsongeodatabasekmlkmzgpxgmlgpkgdxfmapinfocsvsqliteflatgeobuf
POST/analyze

Get metadata about a GIS file without converting it.

Response

{
  "feature_count": 1234,
  "geometry_type": ["Polygon"],
  "crs": "EPSG:4326",
  "bounds": [-122.5, 37.5, -122.0, 38.0],
  "attributes": ["name", "population", "area"],
  "file_size_bytes": 524288
}
GET/formats

List all supported input and output formats.

Usage

The API is completely free. No credits, no limits on conversions, no paywalls. Files up to 500MB are supported.

Code Examples

cURL

# Convert shapefile to GeoJSON
curl -X POST \
  -H "X-API-Key: gis_your_api_key_here" \
  -F "file=@parcels.shp.zip" \
  "https://gistools-production.up.railway.app/convert?output_format=geojson" \
  -o parcels.geojson

# Analyze a file
curl -X POST \
  -H "X-API-Key: gis_your_api_key_here" \
  -F "file=@data.gpkg" \
  "https://gistools-production.up.railway.app/analyze"

Python

import requests

API_KEY = "gis_your_api_key_here"
BASE_URL = "https://gistools-production.up.railway.app"

def convert_file(input_path, output_format):
    """Convert a GIS file to another format."""
    with open(input_path, "rb") as f:
        response = requests.post(
            f"{BASE_URL}/convert",
            params={"output_format": output_format},
            headers={"X-API-Key": API_KEY},
            files={"file": f}
        )
    response.raise_for_status()
    return response.content

# Usage
geojson_data = convert_file("parcels.shp.zip", "geojson")
with open("parcels.geojson", "wb") as f:
    f.write(geojson_data)

JavaScript (Node.js)

const fs = require('fs');
const FormData = require('form-data');

const API_KEY = 'gis_your_api_key_here';
const BASE_URL = 'https://gistools-production.up.railway.app';

async function convertFile(inputPath, outputFormat) {
  const form = new FormData();
  form.append('file', fs.createReadStream(inputPath));
  
  const response = await fetch(
    `${BASE_URL}/convert?output_format=${outputFormat}`,
    {
      method: 'POST',
      headers: { 'X-API-Key': API_KEY },
      body: form
    }
  );
  
  return response.arrayBuffer();
}

// Usage
const geojson = await convertFile('data.kml', 'geojson');

Rate Limits

CategoryConversions/MonthMax File SizeAPI Access
DefaultFlexibleUp to 5GB

Ready to integrate?

The API is free. Start converting files right now.

Try the converter