Decision tree
Common gotchas
My render returns RENDER_FAILED only on certain briefs
My render returns RENDER_FAILED only on certain briefs
Almost always a font resolution or asset access issue:
- Did the brief reference a font your BrandKit doesn’t have?
- Is an asset URL in the brief reachable from the public internet?
- Are you using a private asset ID that belongs to a different brand?
decisions log if available (compile API) or include the request_id when contacting support.IDEMPOTENCY_CONFLICT but I'm sending the same body
IDEMPOTENCY_CONFLICT but I'm sending the same body
Three usual causes:
- A timestamp in the body changed. Even a millisecond difference makes the body hash different.
- Field reordering produced different JSON bytes. Use a canonical serializer (
JSON.stringifyis fine in JS; in Python usejson.dumps(..., sort_keys=True)). - You changed the URL (different query param). The cache is keyed on method + URL + body hash.
429 every few requests, even at low volume
429 every few requests, even at low volume
You may be hitting a per-category limit you didn’t realize you were spending. For example: a polling loop on
GET /facade/render-jobs/{id} shares the reads bucket with the rest of your app.- Switch to webhooks for completion notifications.
- Reduce poll frequency.
- See the
X-RateLimit-Categoryresponse header to confirm which bucket you hit.
When to contact support
Sendsupport@kynva.ai an email with:
- The
X-Request-Idfrom the failing response (always in headers, also inerror.request_id). - The timestamp of the request, with timezone.
- The request body (redact any PII).
- The expected vs actual behavior.