Reference

Limits, errors and versioning

The numbers and shapes you build retry logic around.

Rate limits

SurfaceLimitKeyed by
Installer API v1 (/partner/v1)60 requests / minuteKey owner
Inbound API (/inbound)600 requests / minuteCompany (all its keys together)
Console API (owner sessions)3,000 requests / minuteSession

Exceeding a limit returns 429 with a retry-after header in seconds. Back off for at least that long, with jitter. Sustained 429s from one key are visible to us and we will reach out before disabling anything. Higher limits for the Installer API are available for companies that batch through cursor pagination rather than polling individual jobs.

Polling guidance

Error shape

HTTP/1.1 409 Conflict
content-type: application/json
x-request-id: 7f3c…

{ "error": "Job changed; current version is 8" }
StatusMeaningWhat to do
400Validation failed; message names the fieldFix the request; do not retry unchanged
401Missing, malformed, revoked or wrong-surface keyCheck the header and key kind; rotate if unsure
403Key lacks a scope, or the resource is outside your boundaryRequest the right key kind; never work around by another route
404Resource not visible to this keyTreat like 403; existence is not confirmed either way
409Idempotency-Key reused with a different body, or expectedVersion is staleRe-read the resource and resubmit with the current version and a new key
422Semantically invalid (e.g. status transition not allowed)Read the message; adjust state machine
429Rate limitedHonour retry-after
5xxOur faultRetry with backoff and the same Idempotency-Key

Always log x-request-id; it is the fastest way for us to find your request in our traces.

Idempotency

Time

All timestamps are ISO-8601 in UTC with a Z suffix. Installer status events accept occurredAt up to 5 minutes in the future and 30 days in the past. Schedules include an IANA time zone name so the crew's local day is unambiguous.

Versioning and deprecation

Payload limits

ItemLimit
Request body1 MB
Inbound lead fieldsfullName 120, email 254, phone 40, address 500 characters
Appointment notes500 characters
Contractor job status note2,000 characters
List page sizeInstaller API 1 to 100 (default 50); inbound jobs 1 to 200 (default 50)
Webhook response wait10 seconds