Ask in the forum

Rate Limits & Quotas

Community: 200 billable requests/day per key (Forecast, Hours, PV, Flex, Decision, Weather, โ€ฆ). Basic without key: 60/h per IP. Professional: 600/h per account. OEM: 3000/h. Telemetry has a separate softcap and does not eat the Fair Use / hourly budget.

SpotpriceAPI limits how often you can call productive endpoints so the service stays fair for everyone.

Everyday example

Community account: 200 billable calls per day. Polling every minute would hit the limit in a few hours. Polling once per hour for Forecast + PV (~48 calls) is fine. Better: use Webhooks and skip most polls.

When to use this page

  • Getting HTTP 429 rate_limit_exceeded
  • Planning poll frequency for Loxone or an EMS
  • Deciding if Professional tier is needed

Quota classes (logging vs billable)

ClassEndpointsCounts against Fair Use / hourly pool?
decision (and NULL)Forecast, Decision, Windows, Hours (mode=decide)Yes
pvGET /v1/plant/pv-forecastYes (same pool)
weatherGET /v1/plant/weatherYes (same pool)
telemetryPlant Telemetry, Hours (mode=telemetry)No (separate softcap)
duplicateCoalesced identical double-GETNo (second call not billed; also free at Fair Use ceiling โ€” no 429)
status/v1/status, /healthNo
access_deniedBasic/anon Hours/Windows/PV/Weather not_availableNo (no reserve)

Limits per product tier

TierBillable limitTelemetry softcap
basic (anonymous)60 / hour per IPNot available
community200 / day per key2000 / day
full_active (Professional)600 / hour per account10000 / day
full_active (OEM / enterprise)3000 / hour per account10000 / day
Home legacy120 / hour per keyโ€”

Exact numbers may change โ€” on HTTP 429 the response body and headers show the active limit. Ops kill-switch: QUOTA_UNIFIED_BILLABLE=0 restores legacy PV/Weather softcaps (48/288). Override Community day cap: RATE_LIMIT_COMMUNITY_PER_DAY.

Response headers

X-RateLimit-* headers are emitted on successful /v1/* responses and on HTTP 429:

HeaderMeaning
X-RateLimit-LimitYour limit for this call type
X-RateLimit-RemainingCalls left in the window (0 on 429)
X-RateLimit-ResetUnix epoch when the window resets
X-RateLimit-Scopeip / api_key / api_key_day / account
Retry-AfterSeconds to wait (429 only)

curl -i https://api.spotpriceapi.com/v1/forecast \
  -H "X-API-Key: sf_live_YOUR_KEY"

On 429, wait for Retry-After before retrying.

Step by step: use quota wisely

1. Poll Forecast/Decision/PV hourly, not every minute โ€” data updates about hourly anyway. 2. Register Webhooks for push on changes. 3. Send telemetry on SOC steps (e.g. every 10 %), not every second. 4. Call Hours Demand decide when the plan should change (day-ahead published, big SOC swing) โ€” not on every telemetry ping. 5. On 429, wait for Retry-After before retrying.

Common mistakes

  • Loxone fetch every 10 seconds โ€” will hit Community daily cap
  • Using decision calls for telemetry โ€” use POST /v1/plant/telemetry or mode: telemetry
  • Ignoring 429 / Retry-After until the client is stuck

EMS integration tips

  • Telemetry: every 15 min or on 10 % SOC change
  • Decide: hourly at :00 (Loxone I8; :05 fallback) or after day-ahead (~13:00 Vienna)
  • Webhooks: best for servers; Loxone uses Virtual Output polling instead

Next steps

Start with SpotpriceAPI

Register for Community or code samples with your personal key.

Live API status