# UTM Coordinate API
> UTM ↔ geographic coordinate conversion as an API, computed locally and deterministically on the WGS84 ellipsoid. The from-latlon endpoint projects a latitude and longitude into the Universal Transverse Mercator grid — returning the zone (1–60), the hemisphere, the latitude band letter, and the easting and northing in metres — using the Snyder/USGS Transverse Mercator series, which is accurate to a few millimetres within a zone; New York (40.7128, −74.0060) maps to zone 18N at about 583960 E, 4507351 N, and the canonical 45°N on a central meridian gives a northing of exactly 4982950.40 m. The to-latlon endpoint inverts it, recovering the latitude and longitude from a zone, hemisphere, easting and northing. Each zone is 6° of longitude wide with a 500000 m false easting on its central meridian and a 10000000 m false northing in the southern hemisphere. Latitude is valid from −80° to 84°. Everything is computed locally and deterministically, so it is instant and private. Ideal for GIS, surveying, mapping, geospatial, drone-mapping and location app developers, coordinate-conversion and grid-reference tools, and spatial software. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 2 endpoints. This is UTM on WGS84; for the polar regions use UPS and for an EPSG-code lookup use an EPSG API.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/utm-api/..."
```

## Pricing
- **Free** (Free) — 3,800 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 38,000 calls/Mo, 6 req/s
- **Pro** ($18/Mo) — 180,000 calls/Mo, 15 req/s
- **Mega** ($55/Mo) — 1,075,000 calls/Mo, 40 req/s

## Endpoints

### UTM

#### `GET /v1/from-latlon` — Latitude/longitude → UTM

**Parameters:**
- `latitude` (query, required, string) — Latitude (−80…84) Example: `40.7128`
- `longitude` (query, required, string) — Longitude (−180…180) Example: `-74.0060`
- `zone` (query, optional, string) — Force a UTM zone (1–60)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/utm-api/v1/from-latlon?latitude=40.7128&longitude=-74.0060"
```

**Response:**
```json
{
    "data": {
        "band": "T",
        "note": "UTM (WGS84, Snyder series). Zone 1–60, 6° wide; the central-meridian easting is 500000. New York (40.7128, −74.0060) → zone 18N, ≈583960 E, ≈4507523 N.",
        "zone": 18,
        "inputs": {
            "latitude": 40.7128,
            "longitude": -74.006
        },
        "easting": 583959.372,
        "northing": 4507350.998,
        "hemisphere": "N",
        "central_meridian": -75
    },
    "meta": {
        "timestamp": "2026-06-05T19:50:16.198Z",
        "request_id": "2e8f4b69-f855-4cf0-a303-1f22bee01b3b"
    },
    "status": "ok",
    "message": "Lat/lon to UTM",
    "success": true
}
```

#### `GET /v1/to-latlon` — UTM → latitude/longitude

**Parameters:**
- `easting` (query, required, string) — Easting (m) Example: `583960`
- `northing` (query, required, string) — Northing (m) Example: `4507351`
- `zone` (query, required, string) — UTM zone (1–60) Example: `18`
- `hemisphere` (query, optional, string) — N or S (default N) Example: `N`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/utm-api/v1/to-latlon?easting=583960&northing=4507351&zone=18&hemisphere=N"
```

**Response:**
```json
{
    "data": {
        "note": "UTM → geographic (WGS84, Snyder inverse series). Provide the zone and hemisphere (N/S).",
        "inputs": {
            "zone": 18,
            "easting": 583960,
            "northing": 4507351,
            "hemisphere": "N"
        },
        "latitude": 40.71279995,
        "longitude": -74.00599257
    },
    "meta": {
        "timestamp": "2026-06-05T19:50:16.304Z",
        "request_id": "aa05881e-e179-4db2-946f-10e3e9fdeb18"
    },
    "status": "ok",
    "message": "UTM to lat/lon",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/utm-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "notes": "Latitude −80…84°, longitude −180…180°. UTM has 60 zones of 6° longitude each. Snyder/USGS series, accurate to a few mm within a zone; use UPS for the poles.",
        "service": "utm-api",
        "ellipsoid": {
            "a": 6378137,
            "f": 0.003352810665,
            "k0": 0.9996,
            "name": "WGS84"
        },
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/to-latlon": "UTM (zone, hemisphere, easting, northing) → latitude/longitude.",
            "GET /v1/from-latlon": "Latitude/longitude → UTM zone, easting, northing."
        },
        "description": "UTM ↔ geographic (latitude/longitude) coordinate conversion on the WGS84 ellipsoid."
    },
    "meta": {
        "timestamp": "2026-06-05T19:50:16.411Z",
        "request_id": "9e626c11-317c-4c32-b7bc-3467e4d461fa"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/utm-api
OpenAPI spec: https://www.oanor.com/api/utm-api/openapi.json
