Hillwinds API
Errors

Errors

All errors return a consistent JSON envelope with a machine-readable code, human-readable message, and a unique request ID for debugging.

What does error code X mean?

Error code X means the request failed for the machine-readable reason returned in error.code; replace X with codes such as VALIDATION_ERROR, UNAUTHORIZED, or RATE_LIMITED and use the table below for the required action. Include the response request ID when contacting support, and retry only errors marked retryable.

Error format

json
{
  "ok": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid value for employee_bands: 'Huge'.",
    "details": [
      {
        "field": "employee_bands",
        "issue": "invalid_enum_value",
        "received": "Huge",
        "expected": ["Small Employers", "SMB Accounts", "..."]
      }
    ],
    "request_id": "req_8f3a2b1c4d5e6f7a"
  }
}

The request_id is also returned in the X-Request-Id response header on every request (including successes). Include it in support requests.

Status codes

StatusCodeRetryable?What to do
400VALIDATION_ERROR, FILTER_REQUIRED, QUERY_TOO_COMPLEX, TOO_MANY_COLUMN_FILTERSNoFix the request parameters
400PRODUCTION_KEY_REQUIREDNoUse an ss_live_ key for tags, data flags, credits, API-key management, reports, and usage
401UNAUTHORIZEDNoCheck your API key
402CREDITS_EXHAUSTEDNoInsufficient credits — contact your account rep
403FORBIDDENNoCheck key scopes, field tier, or plan level
404NOT_FOUNDNoCheck the entity ID or URL path
429RATE_LIMITED, DAILY_ROW_LIMIT, DAILY_QUERY_LIMIT, CRAWL_DETECTEDYesWait for Retry-After header
500INTERNAL_ERRORYesRetry with exponential backoff
503CREDIT_DEDUCTION_FAILEDYesIdempotent retry — no credits were deducted. Backoff 1s, 2s, 4s.
504GATEWAY_TIMEOUTYesSimplify your query or reduce page_size

Retry strategy

ErrorStrategy
429 per-minute rate limitWait Retry-After seconds, then retry
429 daily row/query limitWait until midnight UTC
429 CRAWL_DETECTEDDon't blindly retry — add filter diversity, then resume
500 server errorRetry up to 3 times: wait 1s, 2s, 4s
503 CREDIT_DEDUCTION_FAILEDIdempotent retry (no credits deducted). Backoff 1s, 2s, 4s. If it persists after 3 attempts, contact support.
504 timeoutAdd more filters, reduce page_size, drop expensive signal enrichments, then retry

Error detail fields

FieldTypeWhen presentDescription
fieldstringValidation errorsParameter that caused the error
issuestringAlwaysMachine-readable issue code
receivedstringValidation errorsThe invalid value submitted
expectedstring | string[]Validation errorsValid values or format
limitnumberQuota/rate errorsThe limit that was exceeded
retry_after_secondsnumber429 errorsSeconds to wait before retrying

Issue types

Every error includes a machine-readable issue field. Use it to branch in client code instead of pattern-matching on message.

IssueWhen
invalid_enum_valueFilter value not in the allowlist
invalid_typeWrong data type (e.g. string where boolean expected)
missing_requiredRequired parameter not provided (e.g. personnel without lead_type)
invalid_rangeNumeric range syntax error (e.g. cf[x]=gte:abc)
unknown_paramQuery string contains an unrecognized parameter
page_size_too_largepage_size > 500
not_sortablesort_by references a non-allowlisted column
too_many_filtersMore than 15 distinct filters
too_many_column_filtersMore than 10 cf[] filters
filter_requiredpage_size > 25 with no filters
insufficient_scopeAPI key lacks the required scope
insufficient_field_tierBasic key requested an advanced field (via mode=full or fields=)
insufficient_planFeature not available on the org's plan
credits_exhaustedOrg credit balance is 0
credit_deduction_failedCredit deduction failed after query — data not returned
rate_limitedPer-key per-minute rate limit exceeded
daily_row_limitOrg daily row cap exceeded
daily_query_limitPlan daily query cap exceeded
crawl_detectedSequential pagination beyond 20 pages without filter changes
query_timeoutQuery exceeded 30s execution time
not_foundEntity ID or resource path not found
key_inactiveAPI key has been revoked or expired
internal_errorUnexpected server error
Need a key?

Keys are issued by our team, not a signup form. Book a 25-minute walkthrough and you'll leave with sandbox and live credentials.