Rate Limits

Spinwheel returns HTTP 429 for two different reasons:

  1. Request-rate limits protect the platform. You hit them by sending too much traffic, and they clear within a minute.
  2. Business limits protect the consumer and the bureau relationship — typically one credit pull per user per day, five One-Time Passcode (OTP) attempts per code. These have nothing to do with how fast you are sending, and they will not clear on backoff.

Most 429s here are the second kind, so check status.desc to tell them apart before retrying.

Request-rate limit

Request-rate limits may vary depending on the API key.Sandbox and production keys have separate allowances. For details, reach out to your Spinwheel representative.

Business limits

Limitstatus.descWhere
One Debt Profile per user per dayDAILY_USER_REQUEST_LIMIT_REACHEDRequest a Debt Profile
Five OTP attempts per codeMAX_ATTEMPTS_REACHEDVerify an SMS Connection
Too many verifications for a numberTOO_MANY_REQUESTSVerify an SMS Connection
Number blocked for 24 hoursTOO_MANY_VERIFICATIONSConnect a User via SMS

One Debt Profile per user per day

POST /v1/users/USERID/debtProfile pulls a real credit report, so it is capped at one request per user per day. A second call the same day returns 429 DAILY_USER_REQUEST_LIMIT_REACHED.

Read the cached profile with Retrieve a User instead, and if you need data to stay current on a schedule, use a refresh subscription rather than polling.

OTP attempts

An OTP is valid for 5 minutes and accepts 5 attempts. Past either, request a new OTP at POST /v1/users/connect/sms.

Repeated failures against the same phone number escalate: first TOO_MANY_REQUESTS, then TOO_MANY_VERIFICATIONS, which disables the number for 24 hours.