# Tides API
> High and low tide predictions for thousands of US coastal stations, powered by NOAA CO-OPS. Search the station directory by state or name, pull full station metadata (coordinates and time zone), and get tide predictions as high/low events or an hourly height series for up to seven days, in feet or metres and against the datum of your choice (MLLW, MSL, MHHW and more). Delivered through a fast, reliable API with clear errors for invalid stations. Ideal for boating and sailing, fishing and surfing, ports and logistics, beach and tourism services and coastal planning.

## 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/tides-api/..."
```

## Pricing
- **Free** (Free) — 1,000 calls/Mo, 2 req/s
- **Basic** ($4/Mo) — 30,000 calls/Mo, 5 req/s
- **Pro** ($14/Mo) — 150,000 calls/Mo, 15 req/s
- **Mega** ($44/Mo) — 1,000,000 calls/Mo, 40 req/s

## Endpoints

### Tides

#### `GET /v1/predictions` — Tide predictions

**Parameters:**
- `station` (query, required, string) — NOAA station id Example: `9414290`
- `days` (query, optional, string) — 1-7 (default 2) Example: `2`
- `interval` (query, optional, string) — hilo | hourly (default hilo) Example: `hilo`
- `datum` (query, optional, string) — MLLW | MSL | MHHW | … (default MLLW) Example: `MLLW`
- `units` (query, optional, string) — english | metric (default english) Example: `english`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tides-api/v1/predictions?station=9414290&days=2&interval=hilo&datum=MLLW&units=english"
```

**Response:**
```json
{
    "data": {
        "count": 8,
        "datum": "MLLW",
        "units": "feet",
        "station": "9414290",
        "interval": "high/low",
        "predictions": [
            {
                "time": "2026-05-30 05:49",
                "type": "low",
                "value": -0.663
            },
            {
                "time": "2026-05-30 13:10",
                "type": "high",
                "value": 4.355
            },
            {
                "time": "2026-05-30 17:17",
                "type": "low",
                "value": 3.056
            },
            {
                "time": "2026-05-30 23:18",
                "type": "high",
                "value": 5.931
            },
            {
                "time": "2026-05-31 06:23",
                "type": "low",
                "value": -0.738
            },
            {
                "time": "2026-05-31 13:53",
                "type": "high",
                "value": 4.394
            },
            {
                "time": "2026-05-31 17:55",
                "type": "low",
                "value": 3.225
            },
            {
                "time": "2026-05-31 23:51",
                "type": "high",
                "value": 5.869
            }
        ]
    },
    "meta": {
        "timestamp": "2026-05-30T18:17:02.250Z",
        "request_id": "1732eb99-af40-4919-b220-0527037f3df2"
    },
    "status": "ok",
    "message": "Predictions retrieved",
    "success": true
}
```

#### `GET /v1/station` — Station metadata

**Parameters:**
- `id` (query, required, string) — NOAA station id Example: `9414290`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tides-api/v1/station?id=9414290"
```

**Response:**
```json
{
    "data": {
        "id": "9414290",
        "name": "San Francisco",
        "type": null,
        "state": "CA",
        "tidal": true,
        "latitude": 37.806305,
        "timezone": "PST",
        "longitude": -122.46589
    },
    "meta": {
        "timestamp": "2026-05-30T18:17:02.937Z",
        "request_id": "6c4c3611-dce1-4a40-80c9-21b5f448b1dd"
    },
    "status": "ok",
    "message": "Station retrieved",
    "success": true
}
```

#### `GET /v1/stations` — List / search tide stations

**Parameters:**
- `state` (query, optional, string) — US state code filter Example: `CA`
- `search` (query, optional, string) — Filter by station name
- `limit` (query, optional, string) — 1-200 (default 25) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tides-api/v1/stations?state=CA&limit=25"
```

**Response:**
```json
{
    "data": {
        "total": 192,
        "returned": 25,
        "stations": [
            {
                "id": "9410032",
                "name": "Wilson Cove, San Clemente Island",
                "type": "R",
                "state": "CA",
                "tidal": null,
                "latitude": 33.005001068115234,
                "timezone": null,
                "longitude": -118.55699920654297
            },
            {
                "id": "9410068",
                "name": "San Nicolas Island",
                "type": "S",
                "state": "CA",
                "tidal": null,
                "latitude": 33.2667,
                "timezone": null,
                "longitude": -119.497
            },
            {
                "id": "9410079",
                "name": "Avalon, Santa Catalina Island",
                "type": "R",
                "state": "CA",
                "tidal": null,
                "latitude": 33.345001220703125,
                "timezone": null,
                "longitude": -118.32499694824219
            },
            {
                "id": "9410092",
                "name": "Catalina Harbor, Santa Catalina Island",
                "type": "S",
                "state": "CA",
                "tidal": null,
                "latitude": 33.4317,
                "timezone": null,
                "longitude": -118.503
            },
            {
                "id": "9410120",
                "name": "Imperial Beach",
      
…(truncated, see openapi.json for full schema)
```


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