Skip to main content

Documentation Index

Fetch the complete documentation index at: https://code4source.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Errors return a JSON body with a stable code:
{
  "title":  "Quota Exceeded",
  "status": 429,
  "code":   "QUOTA_EXCEEDED",
  "detail": "Monthly quota exceeded.",
  "limit": 10000,
  "used":  10000,
  "period_started_at": "2026-04-15T00:00:00Z",
  "period_ends_at":   "2026-05-15T00:00:00Z"
}
Match against code — not against title or detail, which are human-readable and may be reworded.

Authentication & access

StatusCodeWhen
401AUTHENTICATION_ERRORMissing, malformed, or revoked API key.
401TOKEN_EXPIREDAPI key expired. Request a new one.
402SUBSCRIPTION_INACTIVESubscription is no longer active.
429QUOTA_EXCEEDEDMonthly cap reached for the current billing period.
429RATE_LIMIT_EXCEEDEDToo many requests in a short window.
429 responses carry Retry-After and X-RateLimit-* headers, plus limit, used, period_started_at, period_ends_at for QUOTA_EXCEEDED. See Quotas.

Validation

StatusCodeWhen
422(request validation)Bad JSON, wrong types, missing required fields.
422PROGRAM_VALIDATION_ERRORRuleset structure invalid (depth, refs, ceilings).
422UNKNOWN_SOURCERuleset references a source you can’t access.

Catalog

StatusCodeWhen
404RULESET_NOT_FOUNDruleset_id doesn’t resolve.
409RULESET_ALREADY_EXISTS(name, version) already taken.

Idempotency

StatusCodeWhen
422IDEMPOTENCY_KEY_INVALIDMalformed Idempotency-Key header.
422IDEMPOTENCY_KEY_CONFLICTSame key, different request body.
429IDEMPOTENCY_KEY_EXHAUSTEDToo many concurrent requests with the same key.
410IDEMPOTENCY_REPLAY_EXPIREDReplay window for that key has elapsed.

Server (5xx)

StatusCodeWhen
500INTERNAL_ERRORUnexpected server error.
503(unavailable)Transient infrastructure issue.
5xx responses are retryable. Use exponential backoff with jitter; if persistent, contact support@attestly.io.

Partial failures (200)

A source or check failure does not fail the whole request. The response is 200 but verdict.status = "degraded" and the affected check carries status: "failed" with an error message. See Verdicts.