Applyra API authentication, rate limits and error codes
How to authenticate an Applyra API request, how fast you can call it, and what every error code means when a call comes back refused instead of answered.
Video transcript
Every request carries your key, and two sliding windows pace the traffic: five requests a second, sixty a minute. The per-second window absorbs a spike. The per-minute one is the ceiling you actually live under. So pace your client just under one request a second, and you'll never think about the limiter again. When a call is refused, read Retry-After. It's a delay in seconds: wait it out, then retry. Retrying straight away, inside the same window, is refused again. The Unlimited plan includes ten thousand requests a month, and the API section shows what you've used, and the day it renews. Past the quota, calls answer QUOTA_EXCEEDED. That one isn't worth retrying: it waits for the renewal. The MCP server follows the same rules: a question to your assistant spends the same quota as a curl. Your key carries your account's full rights. Keep it in an environment variable: never in a commit, never in a browser. If one ever lands somewhere public, Regenerate Key invalidates it at once.
Every Applyra API request carries a personal key, in an X-API-Key header or an api_key
query parameter. Two sliding windows pace the traffic, 5 requests a second and 60 a minute,
and the Unlimited plan allows 10,000 requests a month. Anything refused comes back as JSON
with a code field, and the full list is at the bottom of this page.
The same rules apply whether you call the API directly or through
the MCP server, which is a client of this API like any other. A prompt
that asks an assistant for your rankings spends the same quota as a curl. If you have not
made a first call yet, start with
getting started with the API.
Pacing a client
The two windows are not the same tool. The per-second one absorbs a spike, the per-minute one is the ceiling you actually live under. That collapses into one rule worth building into any client: pace it just under one request a second and you will never think about the limiter again. A burst of five in a second is fine. Sixty in a minute is not.
When a call does come back refused, read Retry-After. It is a delay in seconds and it is the
only number worth acting on: wait it out, retry, and back off further if you are still being
held. Retrying straight away inside the same window is refused again, which is a slower route
to the same place.
The monthly quota
Ten thousand requests a month is roomy enough that most integrations never look at it: a keyword sheet that refreshes every hour, a Slack bot posting weekly movement, a nightly export all sit well inside it. Those three are written up in the recipes, with the calls each one makes.
Your usage is never a guess. The API section of the dashboard shows the requests made this
month and the day the quota renews, and the
account usage endpoint returns the same count next to your monthly quota,
which is the simplest way for a long-running job to decide whether to start. Past the quota, calls
answer QUOTA_EXCEEDED until it renews.
Keeping a key safe
A key inherits the full rights of the account, so treat it as a password: environment variable, never a commit, never a browser. Rotating a key in the API section of the dashboard invalidates the previous one at once, which is the right move if one ever lands somewhere public. The free plan has no API access at all, so a key only exists on the Unlimited plan.
Authentication
How to authenticate your API requests
Pass your API key via header or query parameter:
curl -H "X-API-Key: YOUR_API_KEY" \
https://www.applyra.io/api/v1/applicationscurl "https://www.applyra.io/api/v1/applications?api_key=YOUR_API_KEY"Rate Limits & Quotas
How fast you can call the API, and how much you can call it per month
Limits are enforced per API key, across all endpoints combined.
5 requests / second60 requests / minute10 000 requests / monthBoth rate windows are sliding and checked on every call, so a burst of 5 in one second is fine as long as the surrounding minute stays under 60. The limits are ceilings, not targets: 60 calls in a minute is already rejected, so pace a steady client just below one request per second.
When you exceed a rate limit
The request is rejected with 429 and RATE_LIMITED.
HTTP/1.1 429 Too Many Requests
Retry-After: 1
X-RateLimit-Limit: 5
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1789200000
{
"error": "Rate limit exceeded. Please slow down.",
"code": "RATE_LIMITED"
}Retry-Afteris a delay in seconds. Wait at least that long before retrying, then back off exponentially if you are still rate limited.X-RateLimit-Resetis a Unix timestamp in seconds, andX-RateLimit-Limitreflects whichever window you hit (5 or 60).- These headers are only returned on a
429, not on successful responses.
Monthly quota
- Once the quota is reached, every call returns
429withQUOTA_EXCEEDEDand ausageobject until the quota renews. - Call
GET /api/v1/account/usageto read how many requests you have made this month against your monthly quota.
If your plan has no API access
Every call returns 403 with PLAN_REQUIRED. The limits above apply once the Unlimited plan is active.
Need a higher ceiling? Contact us and we can raise the quota on your account.
Error Codes & Warnings
List of possible error codes and response warnings
Successful responses may include a non-blocking meta.warnings array. For example, history_save_failed on the autocomplete and inspect endpoints means the request succeeded but the entry was not saved to your history. The result data is still valid.
MISSING_API_KEY- No API key providedINVALID_API_KEY- API key not found or invalidPLAN_REQUIRED- API requires the Unlimited planRATE_LIMITED- Too many requests per second/minuteQUOTA_EXCEEDED- Monthly request limit reachedINVALID_PARAMS- Missing or invalid parametersNOT_FOUND- Resource not foundAPP_NOT_FOUND- The provided application could not be found (in the store or in your account, depending on the endpoint)COMPETITOR_NOT_FOUND- The competitor app could not be found in the storeDUPLICATE- The application/competitor has already been added to your workspaceSELF_COMPETITOR- An app cannot be added as its own competitorSTORE_FETCH_FAILED- The listing could not be read from the App Store or Google Play (temporary, retry)CREATE_APP_FAILED- The application could not be saved (temporary, retry)ANALYSIS_FAILED- Niche analysis could not completeINTERNAL_ERROR- Server errorFrequently asked questions
How do I authenticate an Applyra API request?
Send your personal key in an X-API-Key header, or as an api_key query parameter. Keys are per account and can be rotated at any time from the API section of the dashboard.
What happens when I hit the rate limit?
The request comes back as a 429 with a RATE_LIMITED code and a Retry-After header naming the number of seconds to wait. Hold for that long, retry, and the call goes through.
Why does the Applyra API return 403 PLAN_REQUIRED?
Because the key belongs to an account without API access. API access comes with the paid plan, so a key from a free account is refused with the same 403 on every route, whatever it asks for, and subscribing is what changes that.
What should I do if my Applyra API key leaks?
Rotate it from the API section of the dashboard. The new key works straight away and the old one stops working at the same moment, so anything using it has to be updated with the new value.
Last updated on