Skip to content

Output retention and pricing

llms.txtAsk agent

This guide describes the additive retention/pricing implementation introduced in the September 2026 submission-readiness branch. Availability depends on the deployed API version. These endpoints do not activate a subscription or charge a payment method.

Each API key can select 1h, 24h, 72h, or retain for future published outputs. The clock starts at validated publication, not upload or queue admission. A job snapshots its policy when admitted; editing or rotating a key cannot rewrite already admitted jobs.

New accounts default to 72 hours. Migration preserves existing accounts’ default behavior and existing unversioned keys as legacy. Omitting retention_mode when issuing a key uses that account’s default. The console’s new-key form explicitly shows 72 hours before creation; choose the required policy in the review step. Rotation inherits the outgoing key’s policy without changing its secret or updating another token’s lineage.

Operation Required API-key scope
GET /v1/api-keys/{api_key_id}/retention governance:read
PUT /v1/api-keys/{api_key_id}/retention governance:write
POST /v1/api-keys with optional retention_mode governance:write

Read before updating. Send the returned version as expected_version:

{
"retention_mode": "72h",
"expected_version": 1
}

The response identifies the key, the current version and mode, effective_for: "future_job_admissions", and clock_starts_at: "validated_publication". An unversioned key reports version 0 and mode legacy; legacy is not a selectable public mode. A stale version returns HTTP 409. Delegated keys cannot widen their own retention ceiling or the tenant’s governance ceiling, and cannot change a broader-scope target.

Customer download URLs and preview capabilities cannot extend past the published output’s deadline. New issuance and preview redemption are refused after that cutoff. The existing governance worker schedules the exact expired output version for deletion, with legal-hold checks, retry/fencing, revocation and deletion evidence. A failed storage deletion is not recorded as a successful purge.

This implementation does not reinterpret historical objects or delete their creation-time retention pins. It does not yet apply token deadlines to independently retained source uploads, processing scratch objects, preview derivatives, backups or provenance evidence. Their separate governance policies still apply. Consequently, output expiry is not a promise that every copy of source media has been erased. Storage authorization and production exact-version deletion must be qualified before claiming an operational purge guarantee.

The privacy model is private server processing: encrypted transport/storage and authorized processing can coexist with customer-only media UI. It is not end-to-end encryption, and a retention setting alone does not establish regulatory compliance.

GET /v1/billing/pricing returns the USD catalog and its immutable version. POST /v1/billing/quotes estimates processing from caller-supplied dimensions, duration and frame rate. Both require billing:read. A quote is not a promise that a format or runtime is qualified.

Both answer with the catalog your account is enrolled on: the same version a job you submit now snapshots at admission. An account that has not been enrolled on a catalog is not charged for processing; it is shown the current catalog, which activation: "requires_explicit_tenant_enrollment" marks as not yet applying to it.

The initial catalog is op.pricing.2026-09-15.v1:

Item USD rate
Sign $0.01 per successful asset operation
Image watermark $0.02 up to 1 MP; $0.03 up to 2 MP; $0.04 up to 4 MP; $0.05 up to 8 MP
Larger image watermark Add $0.01 for each started 4 MP above 8 MP
Audio watermark $0.002 per second; $0.02 minimum
Video watermark $0.02 per second up to 1280×720; $0.04 up to 1920×1080; $0.08 up to 3840×2160
Video frame-rate multiplier max(1, fps / 30); portrait and landscape use the same tier
Logical storage $0.15 per decimal GB-month, using 730 hours
Egress $0.12 per decimal GB
Optional asset overage $0.01 per asset; disabled

Larger-than-4K video and unqualified watermark content families have no implicit fallback rate. Missing or invalid facts return HTTP 422 instead of an invented estimate. Decimal seconds are supported; no whole-minute rounding is applied. Ledger precision is six decimal USD places; invoice aggregation is a separate concern.

The current catalog is op.pricing.2026-09-27.v1. It has every rate above and one more line: a job whose fingerprint_algorithms differs from its media type’s default set pays a fingerprint line at the watermark rate for the same media (image megapixel bands, audio per second with its minimum, video per second times the frame-rate multiplier). Keeping the default costs nothing extra. op.pricing.2026-09-15.v1 is unchanged and never charges the line; an account keeps the version it is enrolled on until it is moved.

Monthly subscription catalog: $99/10,000 assets, $299/50,000, $599/150,000, and $999/500,000. These fees include no signing or watermark credits. Existing negotiated commercial terms are not automatically migrated.

Example quote request:

{
"operation": "watermark_then_sign",
"media_family": "audio",
"duration_seconds": "1.25"
}

This estimates $0.02 audio watermarking plus $0.01 signing. The response labels it estimate_only, identifies its price version, and excludes subscription, storage, egress and tax. Final processing ledger amounts use trusted server inspection facts and the version snapshotted at admission.

GET /v1/billing/charges requires billing:read and lists tenant-owned processing ledger records. Pagination uses limit (1–100, default 50) and the response’s next_before UUID as the next request’s before value. No API-key credential, filename, media URL or storage key appears in a charge.

Processing charges are recorded only when a job successfully publishes under an explicitly enrolled price version. Publication retries cannot duplicate an action charge. Failed, cancelled or not-yet-published work has no processing charge. A distinct source asset UUID counts once per tenant service period after its first successful processing operation; separate uploads have separate UUIDs. Watermark-and-sign counts one asset and two processing actions. Reprocessing the same source may create new action charges, but not a second asset count in that period.

Logical storage pricing is defined over customer-retained plaintext bytes and time, excluding encryption overhead, replicas, internal evidence, thumbnails and processing scratch space. This slice exposes the rate calculation but does not yet settle storage/egress invoices or automatically bill subscription/overage fees. Payment-provider charge creation remains disabled here.

GET /v1/usage is unchanged. Its cost_estimate and pricing_version remain null-only. Do not reinterpret operational meters as money or fill those fields from the new quote endpoint.

New rates require a new immutable catalog version and explicit tenant enrollment. Changing policy affects future admissions only; it is not permission to replace a live customer’s API key or historical commercial terms.