Skip to main content
Three things bound how fast and how much you can call, and your plan sets all three. The per-minute and per-day limits answer 429 rate_limited with a Retry-After header once you spend the minute’s or the day’s requests. Every call counts, charged or not. The monthly credit allowance answers 403 quota_exceeded once you spend it, until the billing period resets. On Growth and Scale, that answer comes once you reach the overage ceiling instead. Plans and limits has the numbers per plan and what a credit is.

Handle a 429

Wait Retry-After seconds, then retry. Do not retry immediately, and do not spread the same work across more keys. 429 is the only status where a plain retry of the identical request is correct. For every other status, read Errors first.
Every charged response carries X-Credits-Charged, what it cost, and X-Credits-Remaining, the balance after it. The balance is recent to within a minute. The console’s Keys and usage page shows the period’s usage. A client that needs to pace its requests by the minute keeps its own count against the numbers on Plans and limits.

Stay under the limits

  • Cache on dataset_version. Every response carries it in meta.coverage[], and it changes only when Investorlift rebuilds the tables. A cache keyed on it stays inside the cache window. Keep an entry for at most 30 days, and drop it within a business day of a version change. Check the current version at least once a business day with GET /v1/dataset, which the API does not meter, or with the X-Dataset-Version header. See Coverage and freshness.
  • Ask for one page of what you will show. limit=20 behind a drawer costs at most 20 credits, where 100 rows you do not use can cost 100. A deal, investor or parcel your account already holds costs nothing again while the plan has credit. See Plans and limits.
  • Use the summary instead of a count. /v1/deals/summary gives the count in one call. A count that pages through every deal costs more.
  • Use cells for the map. /v1/deals/cells returns counts per hexagon instead of thousands of deal rows, and it costs no credits. Every page of deals costs one credit per deal new to your account.

Under load

Two more statuses come from the service, not from your budget:
  • 503 pool_saturated with Retry-After: 1. The service is at capacity and did not run your query. Retry in one second.
  • 504 statement_timeout. Your query passed the 10-second limit. A retry will not help. Narrow the radius or add filters.
  • 503 ledger_unavailable with Retry-After: 5. The service did not reach the credit ledger. It charged nothing and served nothing. Retry after that time.

The CSV export

The one export on this host, the CSV of a lender’s loans, has a budget of its own beside the plan’s limits. The budget is 12 exports a minute and one in flight at a time. The service counts each per developer: your account alone, never the plan or the host as a whole. So another developer’s export never holds yours. Past either limit, the answer is 429 rate_limited with Retry-After, as above.

Partners and staff

Investorlift staff and contracted partners reach the internal host on the company network with a gm_ key. That host has no plan and no monthly allowance, and its limits are per minute and per bucket. More than one bucket can count a request. The first bucket to reach zero returns 429 rate_limited with Retry-After and a retry_after field in the body. Every response the limiter counted carries the x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset headers, but the 503 pool_saturated that the in-flight cap answers before the count carries none. Those three headers never appear on api.investorlift.com. The key bucket is the one you will meet. The user bucket is higher than the key bucket. It exists so that one person inside your product cannot use the whole key’s budget, not to cap your product. The CSV bucket is deliberately small, because a CSV request can stream 50,000 rows. The internal host meters nothing per day or per month, and no budget carries over. Each bucket refills continuously over its minute.