Alpvis RMS API

v1

Public REST API

Read-only API for accessing Alpvis RMS data. All endpoints require an API key passed via the X-API-Key header. Responses use a standard JSON envelope with success, data, and meta fields.

Authentication

Include your API key in every request as an HTTP header:

curl -H "X-API-Key: YOUR_API_KEY" https://alpvis.com/api/v1/occupancy?from=2026-05-01&to=2026-05-07

Rate Limiting

Each API key has a configurable rate limit (default: 100 requests/hour). Exceeding the limit returns 429 Too Many Requests. Contact your administrator to adjust limits.

GET /api/v1/occupancy

Occupancy data for a date range

Parameters

ParameterTypeRequiredDefaultDescription
from string No today Start date (YYYY-MM-DD)
to string No today + 30 days End date (YYYY-MM-DD)

Example Response

{
  "success": true,
  "data": [
    {
      "date": "2026-05-07",
      "total_rooms": 69,
      "occupied_rooms": 52,
      "occupancy_pct": 75.4,
      "revenue": 8320,
      "adr": 160,
      "revpar": 120.6
    }
  ],
  "meta": {
    "from": "2026-05-07",
    "to": "2026-05-14",
    "count": 7,
    "responseTimeMs": 12
  }
}

Try it

GET /api/v1/rates

Current room rates by category and date

Parameters

ParameterTypeRequiredDefaultDescription
from string No today Start date (YYYY-MM-DD)
to string No today + 30 days End date (YYYY-MM-DD)
category_id integer No - Filter by category ID

Example Response

{
  "success": true,
  "data": [
    {
      "date": "2026-05-07",
      "category_id": 27202,
      "category_name": "Superior Double Room",
      "short_name": "SUP",
      "bar_price": 149,
      "recommended_price": 159,
      "min_price": 79,
      "max_price": 299
    }
  ],
  "meta": {
    "from": "2026-05-07",
    "to": "2026-05-14",
    "category_id": "all",
    "count": 35,
    "responseTimeMs": 18
  }
}

Try it

GET /api/v1/forecast

Occupancy and revenue forecast

Parameters

ParameterTypeRequiredDefaultDescription
days integer No 30 Number of days to forecast (max 365)

Example Response

{
  "success": true,
  "data": [
    {
      "date": "2026-05-08",
      "predicted_occupancy": 78.2,
      "predicted_revenue": 9100,
      "predicted_adr": 168,
      "confidence": 0.85,
      "factors": [
        "event_boost",
        "weekend"
      ]
    }
  ],
  "meta": {
    "from": "2026-05-07",
    "to": "2026-06-06",
    "days": 30,
    "count": 30,
    "responseTimeMs": 25
  }
}

Try it

GET /api/v1/competitors

Competitor hotel prices

Parameters

ParameterTypeRequiredDefaultDescription
from string No today Start date (YYYY-MM-DD)
to string No today + 14 days End date (YYYY-MM-DD)

Example Response

{
  "success": true,
  "data": [
    {
      "date": "2026-05-07",
      "competitor_name": "Hotel Josefshof am Rathaus",
      "source": "booking.com",
      "price": 142,
      "room_type": "cheapest",
      "collected_at": "2026-05-07 05:12:33"
    }
  ],
  "meta": {
    "from": "2026-05-07",
    "to": "2026-05-21",
    "count": 42,
    "responseTimeMs": 15
  }
}

Try it

GET /api/v1/kpis

Key Performance Indicators for a specific date

Parameters

ParameterTypeRequiredDefaultDescription
date string No today Date (YYYY-MM-DD)

Example Response

{
  "success": true,
  "data": {
    "date": "2026-05-07",
    "occupancy": {
      "total_rooms": 69,
      "occupied_rooms": 52,
      "occupancy_pct": 75.4,
      "revenue": 8320,
      "adr": 160,
      "revpar": 120.6
    },
    "forecast": {
      "predicted_occupancy": 78.2,
      "predicted_revenue": 9100,
      "confidence": 0.85
    },
    "competitors": {
      "avg_competitor_price": 148.5,
      "competitor_count": 3
    },
    "pendingRecommendations": 5,
    "activeAlerts": 2
  },
  "meta": {
    "date": "2026-05-07",
    "count": 1,
    "responseTimeMs": 30
  }
}

Try it

GET /api/v1/recommendations

Price recommendations (pending, approved, or rejected)

Parameters

ParameterTypeRequiredDefaultDescription
status string No pending Filter by status: pending, approved, rejected
limit integer No 100 Max results (max 500)

Example Response

{
  "success": true,
  "data": [
    {
      "id": 42,
      "date": "2026-05-10",
      "category_id": 27202,
      "category_name": "Superior Double Room",
      "current_price": 149,
      "recommended_price": 169,
      "change_pct": 13.4,
      "reason": "High demand + event",
      "status": "pending"
    }
  ],
  "meta": {
    "status": "pending",
    "limit": 100,
    "count": 5,
    "responseTimeMs": 8
  }
}

Try it

GET /api/v1/segments

Segment pricing configuration

Parameters

No query parameters required.

Example Response

{
  "success": true,
  "data": [
    {
      "id": 1,
      "segment_key": "corporate",
      "name": "Corporate Rate",
      "discount_pct": 15,
      "min_nights": 1,
      "active": true
    }
  ],
  "meta": {
    "count": 4,
    "responseTimeMs": 5
  }
}

Try it

GET /api/v1/restrictions

Active booking restrictions (min stay, CTA, CTD)

Parameters

ParameterTypeRequiredDefaultDescription
from string No today Start date (YYYY-MM-DD)
to string No today + 30 days End date (YYYY-MM-DD)

Example Response

{
  "success": true,
  "data": [
    {
      "date": "2026-05-15",
      "category_id": 27202,
      "restriction_type": "min_stay",
      "value": 2,
      "reason": "High demand period",
      "source": "auto",
      "active": true
    }
  ],
  "meta": {
    "from": "2026-05-07",
    "to": "2026-06-06",
    "count": 3,
    "responseTimeMs": 6
  }
}

Try it