Skip to content
API console (try a request with your own key)Get early access

Rate limits

Each API key may make a set number of requests a minute - the key’s own limit, which GET /v1/account states as limits.requestsPerMinute (60 for a key made in the dashboard). Requests without a valid key share a smaller allowance per network address: 30 a minute.

The allowance holds a minute’s requests and refills continuously, a request at a time, rather than all at once each minute. A key allowed 60 a minute may send 60 requests at once; after that, one more becomes available every second, so it can keep sending 60 a minute indefinitely, and left alone it is full again within a minute.

Every answer - a 401 included - says where the key stands:

Header What it says
X-RateLimit-Limit Requests allowed a minute, which is also the most that may be sent at once.
X-RateLimit-Remaining Requests that may be sent now, without waiting.
X-RateLimit-Reset Seconds until the allowance is full again; 0 when it is.

Past the limit the answer is 429 rate_limited, with a Retry-After header saying how many whole seconds until the next request is allowed - for a key allowed 60 a minute, usually 1 - and an upgradeUrl, the dashboard’s Billing and credits page. Wait that long and send the request again unchanged:

quota.sh
#!/usr/bin/env bash
set -euo pipefail
API=https://api.speccapture.com
AUTH="Authorization: Bearer $SPECCAPTURE_API_KEY"
headers=$(mktemp)
header() { grep -i "^$1:" "$headers" | cut -d' ' -f2- | tr -d '\r'; }
curl -sS --fail-with-body --retry 5 "$API/v1/account" \
-H "$AUTH" \
-D "$headers" -o /dev/null
echo "Limit $(header X-RateLimit-Limit) a minute, $(header X-RateLimit-Remaining) left, full again in $(header X-RateLimit-Reset) s"

Save as quota.sh, set SPECCAPTURE_API_KEY, and run: bash quota.sh. Needs curl; scripts also use bash and jq.

To stay under the limit, ask for a job every few seconds rather than in a tight loop, read the sheets of a finished job once and keep what you read, or let a webhook tell you when a job finishes. Separately, a network address that presents too many keys SpecCapture does not know - 60 in a minute - is answered 429 rate_limited too, so a mistyped key in a retry loop slows down rather than hammering on. The API reference and the health check are outside every limit.