Community-driven paranormal intelligence since 2026

The Paranormal Observer

Vol. I, No. 90·Cheyenne, Wyoming·March 31, 2026
v1REST API · JSON · Bearer Auth

API Reference

Programmatic access to the Paranormal Observer sighting archive. Free tier: 100 requests/day. Observer+ grants 1,000/day.

Get your API key →

Authentication

All requests require a valid API key passed as a Bearer token in the Authorization header.

curl https://www.paranormalobserver.com/v1/reports \
  -H "Authorization: Bearer po_live_your_api_key_here"

Base URL

https://www.paranormalobserver.com/v1

Endpoints

GET
/v1/reports

List published sighting reports with filtering and pagination

GET
/v1/reports/:id

Get a single report with full detail including location, witness info, and evidence

GET
/v1/stats

Site-wide statistics: total reports, category breakdown, Hynek class distribution

GET /v1/reports

Returns a paginated list of published sighting reports, newest first.

Query Parameters

limitintegerResults per page. Max 100, default 20.
offsetintegerPagination offset. Default 0.
categorystringFilter by category e.g. UFO, Ghost, Cryptid, Shadow Figure
hynek_classstringFilter by Hynek classification e.g. NL, ND, CE1, CE2, CE3
date_fromdateSighting date from (YYYY-MM-DD)
date_todateSighting date to (YYYY-MM-DD)
qstringFull-text search across title and narrative

Example

curl "https://www.paranormalobserver.com/v1/reports?category=UFO&limit=5" \
  -H "Authorization: Bearer po_live_..."

Response

{
  "data": [
    {
      "id": "uuid",
      "title": "Triangular craft over Route 9",
      "categories": ["UFO"],
      "hynek_class": "NL",
      "sighting_date": "2024-08-14",
      "sighting_time": "22:30:00",
      "narrative": "...",
      "quality_score": 72,
      "witness_count": 2,
      "created_at": "2024-08-15T10:00:00Z",
      "url": "https://www.paranormalobserver.com/report/uuid"
    }
  ],
  "meta": {
    "total": 342,
    "limit": 5,
    "offset": 0,
    "has_more": true
  },
  "rate_limit": {
    "limit": 100,
    "remaining": 94,
    "reset_at": "2024-08-16T00:00:00Z"
  }
}

GET /v1/reports/:id

Returns a single report with full location, witness, and evidence detail.

curl "https://www.paranormalobserver.com/v1/reports/uuid-here" \
  -H "Authorization: Bearer po_live_..."

Response

{
  "data": {
    "id": "uuid",
    "title": "...",
    "categories": ["Ghost"],
    "hynek_class": null,
    "sighting_date": "2024-06-01",
    "sighting_time": "02:15:00",
    "duration": "10 minutes",
    "narrative": "...",
    "quality_score": 61,
    "witness_count": 1,
    "location": {
      "display": "Rural Vermont",
      "setting": "rural",
      "coordinates": { "lat": 44.26, "lng": -72.57 }
    },
    "witness": {
      "group_size": 1,
      "age_range": "30-39",
      "prior_belief": "skeptic"
    },
    "evidence": [
      {
        "id": "uuid",
        "type": "image/jpeg",
        "description": "Photo taken at scene",
        "url": "https://..."
      }
    ],
    "created_at": "...",
    "url": "https://www.paranormalobserver.com/report/uuid"
  },
  "rate_limit": { ... }
}

GET /v1/stats

Returns aggregate statistics for the entire archive.

curl "https://www.paranormalobserver.com/v1/stats" \
  -H "Authorization: Bearer po_live_..."

Response

{
  "data": {
    "total_reports": 1247,
    "reports_last_30_days": 38,
    "categories": [
      { "name": "UFO", "count": 521 },
      { "name": "Ghost", "count": 312 }
    ],
    "hynek_classes": [
      { "name": "NL", "count": 287 },
      { "name": "CE1", "count": 156 }
    ],
    "generated_at": "2024-08-15T12:00:00Z"
  },
  "rate_limit": { ... }
}

Rate Limiting

Rate limits are per API key, per 24-hour rolling window. Response headers show current usage.

X-RateLimit-LimitheaderYour daily request limit
X-RateLimit-RemainingheaderRequests remaining today
X-RateLimit-ResetheaderISO timestamp when the limit resets

When exceeded, the API returns HTTP 429. Upgrade to Observer+ for 1,000 requests/day and up to 5 keys.

Error Codes

401UnauthorizedMissing or invalid API key
403ForbiddenAPI key has been revoked
404Not FoundReport not found or not published
429Too Many Req.Daily rate limit exceeded
500Server ErrorInternal error — try again later
{
  "error": "Rate limit exceeded. Resets at Thu, 15 Aug 2024 00:00:00 GMT."
}