Operations

Reliability

Operational rules for idempotency, rate limits, retries, concurrency, and short-lived output URLs.

Idempotency

Replay-safe writes

Every write endpoint requires an `Idempotency-Key`. Reusing the same key with the same payload is safe. Reusing it with a different payload is not.

BehaviorResult
Same key, same payloadReturns the original job instead of creating a duplicate write.
Same key, different payloadReturns `409 idempotency_conflict`.
Retention windowIdempotency records are retained for 24 hours.

Limits

Rate limits and concurrency

The API applies layered limits per key, per organization, and in some cases per IP. Limit checks happen before expensive work starts.

RouteLimit
POST /api/v1/source-assets120 requests / minute
POST /api/v1/generations120 requests / minute
POST /api/v1/generations/{job_id}/regenerate120 requests / minute
GET /api/v1/generations/{job_id}1,200 requests / minute
GET /api/v1/usage/summary120 requests / minute
GET /api/v1/billing/events120 requests / minute
source_url fetch jobs60 requests / minute

Concurrent jobs

The organization-wide in-flight cap is 50 jobs. That is the maximum number of simultaneous generation jobs an organization can hold at one time.

Retry

Retry strategy

Retry only when the failure mode is explicitly retryable. Keep the same idempotency key when repeating the same write.

1

Retry 429

Read the `retry_after` value in the error payload and wait at least that long before sending another request.
2

Retry 5xx

Use exponential backoff with jitter. If you are repeating the same write, keep the original idempotency key.
3

Do not blindly retry most 4xx errors

Validation, authorization, entitlement, and idempotency conflicts require a client-side fix before the request should be sent again.

Freshness

Signed URLs are temporary

Returned output URLs are intentionally short-lived. API responses also send `Cache-Control: no-store` so clients always read fresh job and billing state.

Practical implication

Re-read the job if a signed output URL has expired. Do not assume the first URL returned for a job remains valid for the lifetime of your workflow.

Настройки cookie

Выберите, как Katalo использует cookie

Мы используем необходимые cookie для работы сайта и приложения. Аналитические cookie помогают понять использование и улучшать Katalo. Если вы захотите снова увидеть этот баннер позже, удалите cookie браузера и заново откройте сайт.