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 Access. The message is intentionally generic for all of these cases — the API never reveals which one it was.
API_ACCESS_DISABLEDYour account doesn't currently have API access.
API access is granted per account by Stynar, not by plan — your account hasn't been enabled yet.
Contact Stynar support to request access. See the Quickstart guide.
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 Access — 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.