ITMOField Guide

API overview

The public, read-only Is The Mountain Out? API. No key, no account, just curl and a view of Tahoma.

Want the mountain's status on your dashboard, your Discord bot, or the e-ink frame by the coffee maker? The Is The Mountain Out? API shares what the community has reported, and the public endpoints need no API key, no account and no token.

curl https://api.isthemountainout.com/v1/status

Conventions

  • Base URL: https://api.isthemountainout.com/v1. Every path in this reference (/status, /reports, ...) hangs off it.
  • Versioning: The same endpoints also answer at the bare paths (https://api.isthemountainout.com/status). Those are legacy: frozen, still working, but new integrations should use /v1.
  • Format: JSON, except the two PNG map-image endpoints.
  • Wrapping: Resource endpoints wrap results in a top-level data key. Summary endpoints (/status, /stats, /status-stats, /status/rolling-stats, /visibility-history, /changelog/entries) return plain JSON. Each operation page shows its exact shape.
  • Timestamps: ISO 8601. Report created_at and observed_at have millisecond precision.
  • Days: "Today" and per-day figures follow the Pacific reporting day, not UTC.
  • Mountain states: mountain_not_out, mountain_peaking_out, mountain_halfway_out, mountain_mostly_out, mountain_out. A "sighting" means mountain_mostly_out or mountain_out.

Rate limits

Every request gets 60 requests per minute, counted per client IP for anonymous callers. /v1 and the legacy paths share the same allowance. The two map-image endpoints are tighter: 20 fresh renders per minute.

Go over and you'll get a 429 with a Retry-After header. There's also a coarser limit at the network edge whose 429 has no Retry-After, so back off on any 429 instead of hammering retry.

Caching and conditional requests

Several endpoints return a strong ETag. Send it back as If-None-Match and you'll get an empty 304 Not Modified when nothing has changed. That's fast for you and kind to our little server. Revalidation is ETag-only; If-Modified-Since isn't supported.

curl -i https://api.isthemountainout.com/v1/reports
# ...grab the ETag from the response, then:
curl -i -H 'If-None-Match: "<etag>"' https://api.isthemountainout.com/v1/reports

Pagination

List endpoints use cursor pagination: 10 items per page, newest first. Follow links.next (or pass meta.next_cursor as ?cursor=) until it comes back null.

Be a good neighbor

The house rules

Poll politely (once a minute is plenty for almost everything), honor Retry-After, cache what you can, and credit Is The Mountain Out? with a link back to isthemountainout.com wherever you show our data.

On this page