Every response — success or error — includes a request ID, both as a header and in the JSON body. Include it when contacting support; it maps directly to server-side logs for that exact request.
X-Request-ID: req_5c9e2f2a-...Success responses are always a flat data object plus a request_id:
{
"data": { "...": "..." },
"request_id": "req_..."
}Errors always look like this:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "API rate limit exceeded",
"request_id": "req_..."
}
}UNAUTHORIZEDMissing, malformed, unknown, revoked, or expired key.
The Authorization header is missing, doesn't start with 'Bearer ', or the key isn't valid anymore.
Check the Authorization header and verify the key is still active in Settings → API keys. The message is intentionally generic for all of these cases — the API never reveals which one it was.
API_ACCESS_DISABLEDAPI access is turned off for your account.
Every account has API access by default — you only see this if Stynar has switched it off for your account, or the account is suspended.
Contact Stynar support. The message in the response says which of the two applies.
INSUFFICIENT_SCOPEThe key doesn't have the scope this endpoint requires.
The key was created with only 'read' scope but the endpoint needs 'write' (or vice versa).
Create a new key with the required scope from Settings → API keys — scopes can't be changed on an existing key.
NOT_FOUNDUnknown route, or a resource that doesn't exist / isn't yours.
Either the path is wrong, or the resource ID belongs to a different account.
Double check the path and ID. This is intentionally the same response for both cases — a key can never distinguish 'not yours' from 'doesn't exist'.
CONFLICTThe action can't be applied to the resource's current state.
For example, trying to pause a campaign that isn't currently running.
Fetch the resource's current state first (e.g. GET the campaign) and confirm the action is valid from there.
RATE_LIMIT_EXCEEDEDPer-minute or per-second limit hit.
Too many requests from this key in the current window.
Wait out the Retry-After header value, then retry. See Rate Limits.
QUOTA_EXCEEDEDMonthly quota exhausted.
Your account's monthlyRequests limit has been used up for the current calendar month.
Wait for next month's reset, or contact Stynar if you need a higher quota.
INTERNAL_ERRORSomething broke on Stynar's end.
An unexpected server-side failure, not caused by your request.
Retry with backoff. If it persists, contact support with the request_id from the response.
401 and 403 both relate to authentication — see Authentication. 429s are covered in more depth on Rate Limits.