@giveitsmaller/contracts 0.72.0 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/README.md +2 -2
  2. package/accepted-options/accepted-options.json +1 -1
  3. package/accepted-options/image-output-routes.json +1 -1
  4. package/asyncapi/events.yaml +209 -67
  5. package/availability/availability.json +93 -73
  6. package/code-builder/code-builder-metadata.json +155 -71
  7. package/dist/asyncapi/ErrorCode.d.ts +1 -0
  8. package/dist/asyncapi/ErrorCode.js +1 -0
  9. package/dist/asyncapi/Failure.d.ts +2 -0
  10. package/dist/asyncapi/LongFormJobMessage.d.ts +1 -0
  11. package/dist/asyncapi/MultiOutputCompletion.d.ts +2 -0
  12. package/dist/asyncapi/OperationMetrics.d.ts +2 -0
  13. package/dist/asyncapi/SingleOutputCompletion.d.ts +2 -0
  14. package/dist/openapi/models/AccountLimitEntry.d.ts +2 -2
  15. package/dist/openapi/models/AccountLimitEntry.js +2 -2
  16. package/dist/openapi/models/AccountLimits.d.ts +2 -2
  17. package/dist/openapi/models/AccountLimits.js +2 -2
  18. package/dist/openapi/models/AccountLimitsLimits.d.ts +14 -2
  19. package/dist/openapi/models/AccountLimitsLimits.js +6 -2
  20. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +2 -2
  21. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +2 -2
  22. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +2 -2
  23. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +2 -2
  24. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +2 -2
  25. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +2 -2
  26. package/dist/openapi/models/AuthErrorResponse.d.ts +16 -6
  27. package/dist/openapi/models/AuthErrorResponse.js +2 -2
  28. package/dist/openapi/models/AuthErrorType.d.ts +2 -2
  29. package/dist/openapi/models/AuthErrorType.js +2 -2
  30. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +2 -2
  31. package/dist/openapi/models/AuthRejectionEnvelope.js +2 -2
  32. package/dist/openapi/models/AuthenticatedIdentity.d.ts +2 -2
  33. package/dist/openapi/models/AuthenticatedIdentity.js +2 -2
  34. package/dist/openapi/models/AvailabilityValue.d.ts +2 -2
  35. package/dist/openapi/models/AvailabilityValue.js +2 -2
  36. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +16 -6
  37. package/dist/openapi/models/BalanceExhaustedResponse.js +2 -2
  38. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +2 -2
  39. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +2 -2
  40. package/dist/openapi/models/BillingCheckoutRequest.d.ts +2 -2
  41. package/dist/openapi/models/BillingCheckoutRequest.js +2 -2
  42. package/dist/openapi/models/BillingCheckoutSession.d.ts +2 -2
  43. package/dist/openapi/models/BillingCheckoutSession.js +2 -2
  44. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +2 -2
  45. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +2 -2
  46. package/dist/openapi/models/CallbackEventType.d.ts +2 -2
  47. package/dist/openapi/models/CallbackEventType.js +2 -2
  48. package/dist/openapi/models/CancelAccountDeletion200Response.d.ts +2 -2
  49. package/dist/openapi/models/CancelAccountDeletion200Response.js +2 -2
  50. package/dist/openapi/models/CancelAccountDeletion200ResponseData.d.ts +2 -2
  51. package/dist/openapi/models/CancelAccountDeletion200ResponseData.js +2 -2
  52. package/dist/openapi/models/CapabilityCondition.d.ts +2 -2
  53. package/dist/openapi/models/CapabilityCondition.js +2 -2
  54. package/dist/openapi/models/CapabilityConditionOneOf.d.ts +2 -2
  55. package/dist/openapi/models/CapabilityConditionOneOf.js +2 -2
  56. package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +2 -2
  57. package/dist/openapi/models/CapabilityConditionOneOf1.js +2 -2
  58. package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +2 -2
  59. package/dist/openapi/models/CapabilityConditionOneOf2.js +2 -2
  60. package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +2 -2
  61. package/dist/openapi/models/CapabilityConditionOneOf3.js +2 -2
  62. package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +2 -2
  63. package/dist/openapi/models/CapabilityConditionOneOf4.js +2 -2
  64. package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +2 -2
  65. package/dist/openapi/models/CapabilityConditionOneOf5.js +2 -2
  66. package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +2 -2
  67. package/dist/openapi/models/CapabilityConditionOneOf6.js +2 -2
  68. package/dist/openapi/models/CapabilityConstraint.d.ts +2 -2
  69. package/dist/openapi/models/CapabilityConstraint.js +2 -2
  70. package/dist/openapi/models/CapabilityInputSpec.d.ts +2 -2
  71. package/dist/openapi/models/CapabilityInputSpec.js +2 -2
  72. package/dist/openapi/models/CapabilityProduces.d.ts +2 -2
  73. package/dist/openapi/models/CapabilityProduces.js +2 -2
  74. package/dist/openapi/models/CapabilityProducesOneOf.d.ts +2 -2
  75. package/dist/openapi/models/CapabilityProducesOneOf.js +2 -2
  76. package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +2 -2
  77. package/dist/openapi/models/CapabilityProducesOneOf1.js +2 -2
  78. package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +2 -2
  79. package/dist/openapi/models/CapabilityProducesOneOf2.js +2 -2
  80. package/dist/openapi/models/ChangePasswordRequest.d.ts +2 -2
  81. package/dist/openapi/models/ChangePasswordRequest.js +2 -2
  82. package/dist/openapi/models/CheckoutSessionStatusResponse.d.ts +46 -0
  83. package/dist/openapi/models/CheckoutSessionStatusResponse.js +54 -0
  84. package/dist/openapi/models/CheckoutSessionStatusResponseData.d.ts +50 -0
  85. package/dist/openapi/models/CheckoutSessionStatusResponseData.js +55 -0
  86. package/dist/openapi/models/CodegenSource.d.ts +5 -4
  87. package/dist/openapi/models/CodegenSource.js +2 -2
  88. package/dist/openapi/models/CodegenSourceInput.d.ts +2 -2
  89. package/dist/openapi/models/CodegenSourceInput.js +2 -2
  90. package/dist/openapi/models/CodegenSourceJob.d.ts +2 -2
  91. package/dist/openapi/models/CodegenSourceJob.js +2 -2
  92. package/dist/openapi/models/CodegenSourceJobSource.d.ts +2 -2
  93. package/dist/openapi/models/CodegenSourceJobSource.js +2 -2
  94. package/dist/openapi/models/CodegenSourceOperation.d.ts +2 -2
  95. package/dist/openapi/models/CodegenSourceOperation.js +2 -2
  96. package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +2 -2
  97. package/dist/openapi/models/CodegenUploadPlaceholder.js +2 -2
  98. package/dist/openapi/models/CompositionPlan.d.ts +2 -2
  99. package/dist/openapi/models/CompositionPlan.js +2 -2
  100. package/dist/openapi/models/CompositionPlanJob.d.ts +2 -2
  101. package/dist/openapi/models/CompositionPlanJob.js +2 -2
  102. package/dist/openapi/models/CompositionPlanOperation.d.ts +2 -2
  103. package/dist/openapi/models/CompositionPlanOperation.js +2 -2
  104. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +2 -2
  105. package/dist/openapi/models/ConfirmEmailChange200Response.js +2 -2
  106. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +2 -2
  107. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +2 -2
  108. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +2 -2
  109. package/dist/openapi/models/ConfirmEmailChangeRequest.js +2 -2
  110. package/dist/openapi/models/ConnectionSource.d.ts +2 -2
  111. package/dist/openapi/models/ConnectionSource.js +2 -2
  112. package/dist/openapi/models/ContactRequest.d.ts +2 -2
  113. package/dist/openapi/models/ContactRequest.js +2 -2
  114. package/dist/openapi/models/ContactSubject.d.ts +2 -2
  115. package/dist/openapi/models/ContactSubject.js +2 -2
  116. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +2 -2
  117. package/dist/openapi/models/ContactValidationErrorResponse.js +2 -2
  118. package/dist/openapi/models/CreateApiKey201Response.d.ts +2 -2
  119. package/dist/openapi/models/CreateApiKey201Response.js +2 -2
  120. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +2 -2
  121. package/dist/openapi/models/CreateApiKey201ResponseData.js +2 -2
  122. package/dist/openapi/models/CreateApiKeyRequest.d.ts +2 -2
  123. package/dist/openapi/models/CreateApiKeyRequest.js +2 -2
  124. package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +2 -2
  125. package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +2 -2
  126. package/dist/openapi/models/CreateExternalImport403Response.d.ts +2 -2
  127. package/dist/openapi/models/CreateExternalImport403Response.js +2 -2
  128. package/dist/openapi/models/CreateExternalImport422Response.d.ts +2 -2
  129. package/dist/openapi/models/CreateExternalImport422Response.js +2 -2
  130. package/dist/openapi/models/CreateWorkflow401Response.d.ts +16 -6
  131. package/dist/openapi/models/CreateWorkflow401Response.js +2 -2
  132. package/dist/openapi/models/CreateWorkflow422Response.d.ts +2 -2
  133. package/dist/openapi/models/CreateWorkflow422Response.js +2 -2
  134. package/dist/openapi/models/CreditTransaction.d.ts +22 -12
  135. package/dist/openapi/models/CreditTransaction.js +2 -2
  136. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +2 -2
  137. package/dist/openapi/models/CreditTransactionSourceBucket.js +2 -2
  138. package/dist/openapi/models/CreditsBalanceResponse.d.ts +2 -2
  139. package/dist/openapi/models/CreditsBalanceResponse.js +2 -2
  140. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +2 -2
  141. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +2 -2
  142. package/dist/openapi/models/CreditsUsageResponse.d.ts +2 -2
  143. package/dist/openapi/models/CreditsUsageResponse.js +2 -2
  144. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +2 -2
  145. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +2 -2
  146. package/dist/openapi/models/Delivery.d.ts +2 -2
  147. package/dist/openapi/models/Delivery.js +2 -2
  148. package/dist/openapi/models/DeliveryOutputRef.d.ts +2 -2
  149. package/dist/openapi/models/DeliveryOutputRef.js +2 -2
  150. package/dist/openapi/models/DeliveryPlan.d.ts +2 -2
  151. package/dist/openapi/models/DeliveryPlan.js +2 -2
  152. package/dist/openapi/models/DeliveryPlanOutput.d.ts +2 -2
  153. package/dist/openapi/models/DeliveryPlanOutput.js +2 -2
  154. package/dist/openapi/models/DeliveryPlanReason.d.ts +2 -2
  155. package/dist/openapi/models/DeliveryPlanReason.js +2 -2
  156. package/dist/openapi/models/DeliverySelection.d.ts +2 -2
  157. package/dist/openapi/models/DeliverySelection.js +2 -2
  158. package/dist/openapi/models/DownloadBundle.d.ts +2 -2
  159. package/dist/openapi/models/DownloadBundle.js +2 -2
  160. package/dist/openapi/models/DroppedOption.d.ts +2 -2
  161. package/dist/openapi/models/DroppedOption.js +2 -2
  162. package/dist/openapi/models/EmailNotify.d.ts +2 -2
  163. package/dist/openapi/models/EmailNotify.js +2 -2
  164. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +2 -2
  165. package/dist/openapi/models/EmptySuccessEnvelope.js +2 -2
  166. package/dist/openapi/models/EndpointProjection.d.ts +2 -2
  167. package/dist/openapi/models/EndpointProjection.js +2 -2
  168. package/dist/openapi/models/EndpointProjectionServersInner.d.ts +2 -2
  169. package/dist/openapi/models/EndpointProjectionServersInner.js +2 -2
  170. package/dist/openapi/models/ErrorEnvelope.d.ts +16 -6
  171. package/dist/openapi/models/ErrorEnvelope.js +2 -2
  172. package/dist/openapi/models/EstimateQuality.d.ts +2 -2
  173. package/dist/openapi/models/EstimateQuality.js +2 -2
  174. package/dist/openapi/models/EstimateRange.d.ts +2 -2
  175. package/dist/openapi/models/EstimateRange.js +2 -2
  176. package/dist/openapi/models/ExportAccountData200Response.d.ts +2 -2
  177. package/dist/openapi/models/ExportAccountData200Response.js +2 -2
  178. package/dist/openapi/models/ExportAccountData200ResponseData.d.ts +2 -2
  179. package/dist/openapi/models/ExportAccountData200ResponseData.js +2 -2
  180. package/dist/openapi/models/ExternalDestination.d.ts +2 -2
  181. package/dist/openapi/models/ExternalDestination.js +2 -2
  182. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +2 -2
  183. package/dist/openapi/models/ExternalImportCreatedResponse.js +2 -2
  184. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +2 -2
  185. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +2 -2
  186. package/dist/openapi/models/ExternalImportRequest.d.ts +2 -2
  187. package/dist/openapi/models/ExternalImportRequest.js +2 -2
  188. package/dist/openapi/models/ExternalImportToken.d.ts +2 -2
  189. package/dist/openapi/models/ExternalImportToken.js +2 -2
  190. package/dist/openapi/models/ExternalSource.d.ts +2 -2
  191. package/dist/openapi/models/ExternalSource.js +2 -2
  192. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +16 -6
  193. package/dist/openapi/models/FeatureNotAvailableResponse.js +2 -2
  194. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +16 -6
  195. package/dist/openapi/models/FeatureTierRestrictedResponse.js +2 -2
  196. package/dist/openapi/models/FeatureViolation.d.ts +2 -2
  197. package/dist/openapi/models/FeatureViolation.js +2 -2
  198. package/dist/openapi/models/GetProfile200Response.d.ts +2 -2
  199. package/dist/openapi/models/GetProfile200Response.js +2 -2
  200. package/dist/openapi/models/GetProfile200ResponseData.d.ts +2 -2
  201. package/dist/openapi/models/GetProfile200ResponseData.js +2 -2
  202. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +2 -2
  203. package/dist/openapi/models/ImageEncodeCapabilities.js +2 -2
  204. package/dist/openapi/models/JobDefinition.d.ts +2 -2
  205. package/dist/openapi/models/JobDefinition.js +2 -2
  206. package/dist/openapi/models/JobDownload.d.ts +2 -2
  207. package/dist/openapi/models/JobDownload.js +2 -2
  208. package/dist/openapi/models/JobInputV2.d.ts +2 -2
  209. package/dist/openapi/models/JobInputV2.js +2 -2
  210. package/dist/openapi/models/JobMediaClass.d.ts +2 -2
  211. package/dist/openapi/models/JobMediaClass.js +2 -2
  212. package/dist/openapi/models/JobOutputSource.d.ts +2 -2
  213. package/dist/openapi/models/JobOutputSource.js +2 -2
  214. package/dist/openapi/models/JobResponse.d.ts +2 -2
  215. package/dist/openapi/models/JobResponse.js +2 -2
  216. package/dist/openapi/models/JobStatus.d.ts +2 -2
  217. package/dist/openapi/models/JobStatus.js +2 -2
  218. package/dist/openapi/models/JobType.d.ts +2 -2
  219. package/dist/openapi/models/JobType.js +2 -2
  220. package/dist/openapi/models/LivenessResponse.d.ts +2 -2
  221. package/dist/openapi/models/LivenessResponse.js +2 -2
  222. package/dist/openapi/models/LoginUser200Response.d.ts +2 -2
  223. package/dist/openapi/models/LoginUser200Response.js +2 -2
  224. package/dist/openapi/models/LoginUser200ResponseData.d.ts +2 -2
  225. package/dist/openapi/models/LoginUser200ResponseData.js +2 -2
  226. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +2 -2
  227. package/dist/openapi/models/LoginUser200ResponseDataUser.js +2 -2
  228. package/dist/openapi/models/LoginUser401Response.d.ts +16 -6
  229. package/dist/openapi/models/LoginUser401Response.js +2 -2
  230. package/dist/openapi/models/LoginUserRequest.d.ts +2 -2
  231. package/dist/openapi/models/LoginUserRequest.js +2 -2
  232. package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +21 -8
  233. package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +2 -2
  234. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +2 -2
  235. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +2 -2
  236. package/dist/openapi/models/MetadataResponse.d.ts +2 -2
  237. package/dist/openapi/models/MetadataResponse.js +2 -2
  238. package/dist/openapi/models/MetadataResponseDimensions.d.ts +2 -2
  239. package/dist/openapi/models/MetadataResponseDimensions.js +2 -2
  240. package/dist/openapi/models/MetadataResponseExif.d.ts +2 -2
  241. package/dist/openapi/models/MetadataResponseExif.js +2 -2
  242. package/dist/openapi/models/MetadataResponseExifGps.d.ts +2 -2
  243. package/dist/openapi/models/MetadataResponseExifGps.js +2 -2
  244. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +2 -2
  245. package/dist/openapi/models/MetadataSuccessEnvelope.js +2 -2
  246. package/dist/openapi/models/MimeGroupSchema.d.ts +64 -15
  247. package/dist/openapi/models/MimeGroupSchema.js +12 -2
  248. package/dist/openapi/models/MultiInputSource.d.ts +2 -2
  249. package/dist/openapi/models/MultiInputSource.js +2 -2
  250. package/dist/openapi/models/MultipartCompleteRequest.d.ts +2 -2
  251. package/dist/openapi/models/MultipartCompleteRequest.js +2 -2
  252. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +2 -2
  253. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +2 -2
  254. package/dist/openapi/models/MultipartCompleteResponse.d.ts +2 -2
  255. package/dist/openapi/models/MultipartCompleteResponse.js +2 -2
  256. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +2 -2
  257. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +2 -2
  258. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +2 -2
  259. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +2 -2
  260. package/dist/openapi/models/MultipartInitiateResponse.d.ts +2 -2
  261. package/dist/openapi/models/MultipartInitiateResponse.js +2 -2
  262. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +2 -2
  263. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +2 -2
  264. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +2 -2
  265. package/dist/openapi/models/MultipartKeepaliveResponse.js +2 -2
  266. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +2 -2
  267. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +2 -2
  268. package/dist/openapi/models/MultipartPartListing.d.ts +2 -2
  269. package/dist/openapi/models/MultipartPartListing.js +2 -2
  270. package/dist/openapi/models/MultipartPresignRequest.d.ts +2 -2
  271. package/dist/openapi/models/MultipartPresignRequest.js +2 -2
  272. package/dist/openapi/models/MultipartPresignResponse.d.ts +2 -2
  273. package/dist/openapi/models/MultipartPresignResponse.js +2 -2
  274. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +2 -2
  275. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +2 -2
  276. package/dist/openapi/models/MultipartStatusResponse.d.ts +2 -2
  277. package/dist/openapi/models/MultipartStatusResponse.js +2 -2
  278. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +2 -2
  279. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +2 -2
  280. package/dist/openapi/models/NotifyConfig.d.ts +9 -5
  281. package/dist/openapi/models/NotifyConfig.js +2 -2
  282. package/dist/openapi/models/OperationCapability.d.ts +2 -2
  283. package/dist/openapi/models/OperationCapability.js +2 -2
  284. package/dist/openapi/models/OperationDefinition.d.ts +2 -2
  285. package/dist/openapi/models/OperationDefinition.js +2 -2
  286. package/dist/openapi/models/OperationDownload.d.ts +2 -2
  287. package/dist/openapi/models/OperationDownload.js +2 -2
  288. package/dist/openapi/models/OperationInputModel.d.ts +2 -2
  289. package/dist/openapi/models/OperationInputModel.js +2 -2
  290. package/dist/openapi/models/OperationMessageParamsValue.d.ts +25 -0
  291. package/dist/openapi/models/OperationMessageParamsValue.js +31 -0
  292. package/dist/openapi/models/OperationResponse.d.ts +36 -2
  293. package/dist/openapi/models/OperationResponse.js +8 -2
  294. package/dist/openapi/models/OperationResult.d.ts +2 -2
  295. package/dist/openapi/models/OperationResult.js +2 -2
  296. package/dist/openapi/models/OperationResultMetadata.d.ts +29 -3
  297. package/dist/openapi/models/OperationResultMetadata.js +6 -2
  298. package/dist/openapi/models/OperationResultMetrics.d.ts +2 -2
  299. package/dist/openapi/models/OperationResultMetrics.js +2 -2
  300. package/dist/openapi/models/OperationSchemaDefinition.d.ts +8 -8
  301. package/dist/openapi/models/OperationSchemaDefinition.js +2 -2
  302. package/dist/openapi/models/OperationStatus.d.ts +2 -2
  303. package/dist/openapi/models/OperationStatus.js +2 -2
  304. package/dist/openapi/models/OperationType.d.ts +11 -5
  305. package/dist/openapi/models/OperationType.js +11 -5
  306. package/dist/openapi/models/OperationsSchemaResponse.d.ts +2 -2
  307. package/dist/openapi/models/OperationsSchemaResponse.js +2 -2
  308. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +2 -2
  309. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +2 -2
  310. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +2 -2
  311. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +2 -2
  312. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +2 -2
  313. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +2 -2
  314. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +2 -2
  315. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +2 -2
  316. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +2 -2
  317. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +2 -2
  318. package/dist/openapi/models/OptionSchema.d.ts +36 -2
  319. package/dist/openapi/models/OptionSchema.js +10 -2
  320. package/dist/openapi/models/OutputProperties.d.ts +2 -2
  321. package/dist/openapi/models/OutputProperties.js +2 -2
  322. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +2 -2
  323. package/dist/openapi/models/OutputPropertiesIsAnimated.js +2 -2
  324. package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +2 -2
  325. package/dist/openapi/models/PerClassAvailabilityEntry.js +2 -2
  326. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +2 -2
  327. package/dist/openapi/models/PerRoleCardinalityEntry.js +2 -2
  328. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +2 -2
  329. package/dist/openapi/models/PerValueAvailabilityEntry.js +2 -2
  330. package/dist/openapi/models/PresignedUrlPart.d.ts +2 -2
  331. package/dist/openapi/models/PresignedUrlPart.js +2 -2
  332. package/dist/openapi/models/ProbePendingResponse.d.ts +16 -6
  333. package/dist/openapi/models/ProbePendingResponse.js +2 -2
  334. package/dist/openapi/models/ProcessingClass.d.ts +2 -2
  335. package/dist/openapi/models/ProcessingClass.js +2 -2
  336. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +2 -2
  337. package/dist/openapi/models/ProcessingClassBandViolation.js +2 -2
  338. package/dist/openapi/models/ProcessingClassConstraints.d.ts +2 -2
  339. package/dist/openapi/models/ProcessingClassConstraints.js +2 -2
  340. package/dist/openapi/models/ProcessingClassEntry.d.ts +2 -2
  341. package/dist/openapi/models/ProcessingClassEntry.js +2 -2
  342. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +16 -6
  343. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +2 -2
  344. package/dist/openapi/models/ProcessingClassHint.d.ts +2 -2
  345. package/dist/openapi/models/ProcessingClassHint.js +2 -2
  346. package/dist/openapi/models/ProcessingClassReason.d.ts +2 -2
  347. package/dist/openapi/models/ProcessingClassReason.js +2 -2
  348. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +2 -2
  349. package/dist/openapi/models/ProcessingClassRejectReason.js +2 -2
  350. package/dist/openapi/models/ProcessingPlan.d.ts +2 -2
  351. package/dist/openapi/models/ProcessingPlan.js +2 -2
  352. package/dist/openapi/models/ProcessingPlanJob.d.ts +2 -2
  353. package/dist/openapi/models/ProcessingPlanJob.js +2 -2
  354. package/dist/openapi/models/ReEncodeDecision.d.ts +2 -2
  355. package/dist/openapi/models/ReEncodeDecision.js +2 -2
  356. package/dist/openapi/models/ReadinessResponse.d.ts +2 -2
  357. package/dist/openapi/models/ReadinessResponse.js +2 -2
  358. package/dist/openapi/models/RegisterUser422Response.d.ts +2 -2
  359. package/dist/openapi/models/RegisterUser422Response.js +2 -2
  360. package/dist/openapi/models/RegisterUserRequest.d.ts +2 -2
  361. package/dist/openapi/models/RegisterUserRequest.js +2 -2
  362. package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +2 -2
  363. package/dist/openapi/models/RequestAccountDeletion200Response.js +2 -2
  364. package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +2 -2
  365. package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +2 -2
  366. package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +2 -2
  367. package/dist/openapi/models/RequestAccountDeletionRequest.js +2 -2
  368. package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +2 -2
  369. package/dist/openapi/models/ResendVerificationEmailRequest.js +2 -2
  370. package/dist/openapi/models/ResetPasswordRequest.d.ts +2 -2
  371. package/dist/openapi/models/ResetPasswordRequest.js +2 -2
  372. package/dist/openapi/models/ResponseEnvelope.d.ts +2 -2
  373. package/dist/openapi/models/ResponseEnvelope.js +2 -2
  374. package/dist/openapi/models/RetryResponse.d.ts +2 -2
  375. package/dist/openapi/models/RetryResponse.js +2 -2
  376. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +2 -2
  377. package/dist/openapi/models/RetrySuccessEnvelope.js +2 -2
  378. package/dist/openapi/models/SseCompletionBase.d.ts +2 -2
  379. package/dist/openapi/models/SseCompletionBase.js +2 -2
  380. package/dist/openapi/models/SseConnectionLimitResponse.d.ts +183 -0
  381. package/dist/openapi/models/SseConnectionLimitResponse.js +65 -0
  382. package/dist/openapi/models/SseEventType.d.ts +2 -2
  383. package/dist/openapi/models/SseEventType.js +2 -2
  384. package/dist/openapi/models/SseJobCompletedData.d.ts +2 -2
  385. package/dist/openapi/models/SseJobCompletedData.js +2 -2
  386. package/dist/openapi/models/SseJobFailedData.d.ts +2 -2
  387. package/dist/openapi/models/SseJobFailedData.js +2 -2
  388. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +2 -2
  389. package/dist/openapi/models/SseMultiOutputCompletion.js +2 -2
  390. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +2 -2
  391. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +2 -2
  392. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +2 -2
  393. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +2 -2
  394. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +2 -2
  395. package/dist/openapi/models/SseMultiOutputResultEntry.js +2 -2
  396. package/dist/openapi/models/SseOperationCompletedData.d.ts +2 -2
  397. package/dist/openapi/models/SseOperationCompletedData.js +2 -2
  398. package/dist/openapi/models/SseOperationCompletionResult.d.ts +2 -2
  399. package/dist/openapi/models/SseOperationCompletionResult.js +2 -2
  400. package/dist/openapi/models/SseOperationFailedData.d.ts +33 -2
  401. package/dist/openapi/models/SseOperationFailedData.js +8 -2
  402. package/dist/openapi/models/SseOperationProgressData.d.ts +2 -2
  403. package/dist/openapi/models/SseOperationProgressData.js +2 -2
  404. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +2 -2
  405. package/dist/openapi/models/SseSingleOutputCompletion.js +2 -2
  406. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +2 -2
  407. package/dist/openapi/models/SseWorkflowTerminalData.js +2 -2
  408. package/dist/openapi/models/TierRestrictionKind.d.ts +2 -2
  409. package/dist/openapi/models/TierRestrictionKind.js +2 -2
  410. package/dist/openapi/models/TierRestrictionResponse.d.ts +16 -6
  411. package/dist/openapi/models/TierRestrictionResponse.js +2 -2
  412. package/dist/openapi/models/UpdateProfile200Response.d.ts +2 -2
  413. package/dist/openapi/models/UpdateProfile200Response.js +2 -2
  414. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +2 -2
  415. package/dist/openapi/models/UpdateProfile200ResponseData.js +2 -2
  416. package/dist/openapi/models/UpdateProfile422Response.d.ts +2 -2
  417. package/dist/openapi/models/UpdateProfile422Response.js +2 -2
  418. package/dist/openapi/models/UpdateProfileRequest.d.ts +2 -2
  419. package/dist/openapi/models/UpdateProfileRequest.js +2 -2
  420. package/dist/openapi/models/UploadConstraintsApplied.d.ts +2 -2
  421. package/dist/openapi/models/UploadConstraintsApplied.js +2 -2
  422. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +16 -6
  423. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +2 -2
  424. package/dist/openapi/models/UploadFile403Response.d.ts +2 -2
  425. package/dist/openapi/models/UploadFile403Response.js +2 -2
  426. package/dist/openapi/models/UploadFile422Response.d.ts +2 -2
  427. package/dist/openapi/models/UploadFile422Response.js +2 -2
  428. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +2 -2
  429. package/dist/openapi/models/UploadProbeMediaMetadata.js +2 -2
  430. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +6 -5
  431. package/dist/openapi/models/UploadProbeProcessingClass.js +6 -5
  432. package/dist/openapi/models/UploadProbeResponse.d.ts +2 -2
  433. package/dist/openapi/models/UploadProbeResponse.js +2 -2
  434. package/dist/openapi/models/UploadProbeStatus.d.ts +2 -2
  435. package/dist/openapi/models/UploadProbeStatus.js +2 -2
  436. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +2 -2
  437. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +2 -2
  438. package/dist/openapi/models/UploadResponse.d.ts +2 -2
  439. package/dist/openapi/models/UploadResponse.js +2 -2
  440. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +16 -6
  441. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +2 -2
  442. package/dist/openapi/models/UploadSource.d.ts +2 -2
  443. package/dist/openapi/models/UploadSource.js +2 -2
  444. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +2 -2
  445. package/dist/openapi/models/UploadSuccessEnvelope.js +2 -2
  446. package/dist/openapi/models/UploadThresholds.d.ts +2 -2
  447. package/dist/openapi/models/UploadThresholds.js +2 -2
  448. package/dist/openapi/models/UserTier.d.ts +2 -2
  449. package/dist/openapi/models/UserTier.js +2 -2
  450. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +19 -8
  451. package/dist/openapi/models/ValidationErrorEnvelope.js +2 -2
  452. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +2 -2
  453. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +2 -2
  454. package/dist/openapi/models/VerifyEmailRequest.d.ts +2 -2
  455. package/dist/openapi/models/VerifyEmailRequest.js +2 -2
  456. package/dist/openapi/models/WarningType.d.ts +2 -2
  457. package/dist/openapi/models/WarningType.js +2 -2
  458. package/dist/openapi/models/WebhookOperationContext.d.ts +2 -2
  459. package/dist/openapi/models/WebhookOperationContext.js +2 -2
  460. package/dist/openapi/models/WebhookPayload.d.ts +2 -2
  461. package/dist/openapi/models/WebhookPayload.js +2 -2
  462. package/dist/openapi/models/WorkflowArchiveResponse.d.ts +2 -2
  463. package/dist/openapi/models/WorkflowArchiveResponse.js +2 -2
  464. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +2 -2
  465. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +2 -2
  466. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +7 -6
  467. package/dist/openapi/models/WorkflowCancelBillingEffect.js +7 -6
  468. package/dist/openapi/models/WorkflowCancelResponse.d.ts +2 -2
  469. package/dist/openapi/models/WorkflowCancelResponse.js +2 -2
  470. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +2 -2
  471. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +2 -2
  472. package/dist/openapi/models/WorkflowCreateRequest.d.ts +11 -14
  473. package/dist/openapi/models/WorkflowCreateRequest.js +2 -2
  474. package/dist/openapi/models/WorkflowCreateResponse.d.ts +2 -2
  475. package/dist/openapi/models/WorkflowCreateResponse.js +2 -2
  476. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +2 -2
  477. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +2 -2
  478. package/dist/openapi/models/WorkflowCreditSummary.d.ts +2 -2
  479. package/dist/openapi/models/WorkflowCreditSummary.js +2 -2
  480. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +2 -2
  481. package/dist/openapi/models/WorkflowDownloadResponse.js +2 -2
  482. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +2 -2
  483. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +2 -2
  484. package/dist/openapi/models/WorkflowEdge.d.ts +2 -2
  485. package/dist/openapi/models/WorkflowEdge.js +2 -2
  486. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +16 -6
  487. package/dist/openapi/models/WorkflowExpiredResponse.js +2 -2
  488. package/dist/openapi/models/WorkflowListResponse.d.ts +2 -2
  489. package/dist/openapi/models/WorkflowListResponse.js +2 -2
  490. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +2 -2
  491. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +2 -2
  492. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +2 -2
  493. package/dist/openapi/models/WorkflowPauseRequiredAction.js +2 -2
  494. package/dist/openapi/models/WorkflowPausedDetail.d.ts +2 -2
  495. package/dist/openapi/models/WorkflowPausedDetail.js +2 -2
  496. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +2 -2
  497. package/dist/openapi/models/WorkflowPausedDetailLinks.js +2 -2
  498. package/dist/openapi/models/WorkflowProcessing.d.ts +2 -2
  499. package/dist/openapi/models/WorkflowProcessing.js +2 -2
  500. package/dist/openapi/models/WorkflowRestoreResponse.d.ts +2 -2
  501. package/dist/openapi/models/WorkflowRestoreResponse.js +2 -2
  502. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +2 -2
  503. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +2 -2
  504. package/dist/openapi/models/WorkflowResumeResponse.d.ts +2 -2
  505. package/dist/openapi/models/WorkflowResumeResponse.js +2 -2
  506. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +2 -2
  507. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +2 -2
  508. package/dist/openapi/models/WorkflowSource.d.ts +2 -2
  509. package/dist/openapi/models/WorkflowSource.js +2 -2
  510. package/dist/openapi/models/WorkflowStatus.d.ts +2 -2
  511. package/dist/openapi/models/WorkflowStatus.js +2 -2
  512. package/dist/openapi/models/WorkflowStatusResponse.d.ts +5 -3
  513. package/dist/openapi/models/WorkflowStatusResponse.js +2 -2
  514. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +2 -2
  515. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +2 -2
  516. package/dist/openapi/models/WorkflowSummary.d.ts +2 -2
  517. package/dist/openapi/models/WorkflowSummary.js +2 -2
  518. package/dist/openapi/models/WorkflowSummaryJob.d.ts +2 -2
  519. package/dist/openapi/models/WorkflowSummaryJob.js +2 -2
  520. package/dist/openapi/models/WorkflowWarning.d.ts +2 -2
  521. package/dist/openapi/models/WorkflowWarning.js +2 -2
  522. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +2 -2
  523. package/dist/openapi/models/WorkflowWarningSeverity.js +2 -2
  524. package/dist/openapi/models/index.d.ts +4 -0
  525. package/dist/openapi/models/index.js +4 -0
  526. package/dist/openapi/runtime.d.ts +2 -2
  527. package/dist/openapi/runtime.js +2 -2
  528. package/dist/operations/archive.metadata.js +1 -0
  529. package/dist/operations/audio_overlay.metadata.js +1 -2
  530. package/dist/operations/audio_to_video.metadata.js +1 -0
  531. package/dist/operations/audio_watermark.metadata.js +4 -9
  532. package/dist/operations/compress.metadata.js +0 -1
  533. package/dist/operations/convert.metadata.js +0 -1
  534. package/dist/operations/custom_luma.metadata.js +1 -3
  535. package/dist/operations/image_watermark.metadata.js +1 -0
  536. package/dist/operations/merge.metadata.js +1 -1
  537. package/dist/operations/metadata-types.d.ts +2 -0
  538. package/dist/operations/split.metadata.js +12 -4
  539. package/dist/operations/text_watermark.metadata.js +1 -0
  540. package/dist/operations/thumbnail.metadata.js +0 -1
  541. package/dist/operations/transform.metadata.js +0 -1
  542. package/dist/operations/video_text_watermark.metadata.js +2 -1
  543. package/dist/operations/video_watermark.metadata.js +1 -1
  544. package/openapi/README.md +1 -1
  545. package/openapi/api.yaml +743 -189
  546. package/operation-capabilities/operation-capabilities.json +1 -1
  547. package/operations/schemas/audio_overlay.yaml +2 -4
  548. package/operations/schemas/audio_watermark.yaml +34 -33
  549. package/operations/schemas/compress.yaml +265 -165
  550. package/operations/schemas/convert.yaml +12 -2
  551. package/operations/schemas/custom_luma.yaml +5 -7
  552. package/operations/schemas/merge.yaml +8 -3
  553. package/operations/schemas/split.yaml +223 -21
  554. package/operations/schemas/thumbnail.yaml +35 -28
  555. package/operations/schemas/transform.yaml +1 -2
  556. package/operations/schemas/video_text_watermark.yaml +75 -18
  557. package/operations/schemas/video_watermark.yaml +50 -15
  558. package/package.json +3 -3
@@ -3,12 +3,12 @@ schema_version: "2.0.0"
3
3
  operation:
4
4
  type: custom_luma
5
5
  availability: planned
6
- required_tier: pro
7
6
  description: |
8
7
  Apply a caller-uploaded luma matte (transition-mask) over a base
9
8
  video to produce a custom luma-matte transition effect. Inspired
10
9
  by Cloudinary's deprecated luma-matte custom transitions and
11
- intended as a paid-tier (`pro`+) creative feature.
10
+ intended as a creative feature, metered by credits like every
11
+ other operation (no tier gate — decision 26, 2026-09-23).
12
12
 
13
13
  **NOT** related to the `xfade=custom` expression-mode transition
14
14
  parameter. The `merge.transition.custom` value is tagged `planned`
@@ -52,13 +52,12 @@ operation:
52
52
  - video/webm
53
53
  processing_class:
54
54
  # F8 long-form video tier (per ticket I15-CONS). custom_luma
55
- # is itself `availability: planned` + `required_tier: pro`
56
- # at the operation level; the per-class shape lands now to
55
+ # is itself `availability: planned` at the operation level
56
+ # (no tier gate — decision 26, owner ruling 2026-09-23); the per-class shape lands now to
57
57
  # keep SDK/sidecar shape forward-compatible when the operation
58
58
  # ships.
59
59
  short_form:
60
60
  availability: planned
61
- required_tier: pro
62
61
  constraints:
63
62
  max_input_duration: "PT5M"
64
63
  max_input_size_bytes: 524288000
@@ -68,8 +67,7 @@ operation:
68
67
  # merge.video.long_form_re_encode). Per-tier caps per ADR-0011 —
69
68
  # advertised shape; availability gates execution off (422).
70
69
  availability: planned
71
- required_tier: pro
72
- constraints: # baseline = Pro
70
+ constraints: # baseline = every tier without a per_tier_constraints override
73
71
  max_input_duration: "PT12H"
74
72
  max_input_size_bytes: 5000000000 # 5 GB (Pro)
75
73
  max_output_size_bytes: 5000000000
@@ -41,7 +41,13 @@ operation:
41
41
  max: 5000
42
42
  default: 500
43
43
  depends_on: { output_type: gif }
44
- description: "Milliseconds between frames"
44
+ # GIF stores frame delays in centiseconds (DkucstQG, lambdas MSG
45
+ # 482596c7): 15 ms alternates 20/10 per frame on prod ffmpeg 7.1.1 today;
46
+ # lambdas KbmfS94r rounds uniformly to the nearest 10 ms. Deliberately NOT
47
+ # `multipleOf: 10` — that would 422 values accepted today.
48
+ description: >-
49
+ Milliseconds between frames. GIF timing has a 10 ms resolution, so use
50
+ a multiple of 10 — other values cannot be shown exactly.
45
51
  loop_count:
46
52
  type: integer
47
53
  min: 0
@@ -190,8 +196,7 @@ operation:
190
196
  # max_total_duration (24h single-pass budget, SPIKE-0); size is the
191
197
  # per-tier secondary cap.
192
198
  availability: stable
193
- required_tier: pro
194
- constraints: # baseline = Pro (lowest permitted)
199
+ constraints: # baseline = every tier without a per_tier_constraints override
195
200
  max_total_duration: "PT24H" # 24h (was PT12H) — binding Enterprise ceiling
196
201
  max_total_input_size_bytes: 5000000000 # 5 GB combined (Pro)
197
202
  per_tier_constraints:
@@ -66,7 +66,8 @@ operation:
66
66
 
67
67
  **`precision` flag** (audio + video only): `fast` (default) =
68
68
  packet-boundary approximate cuts; `exact` = re-encode-aligned
69
- precise cuts. Mime_group scoping is the gate — precision does
69
+ precise cuts (`planned` — the API refuses it at create until the
70
+ re-encode path is priced). Mime_group scoping is the gate — precision does
70
71
  NOT apply to GIF or PDF (frame extraction is exact and PDF page
71
72
  selection is exact by definition).
72
73
 
@@ -92,8 +93,9 @@ operation:
92
93
  description: |
93
94
  Silence-detect cut mode for audio (`mode: silence` —
94
95
  server-side silence detection). `beta`: shape-stable + opt-in.
95
- The mode ships dark until the API regenerates enum validation
96
- to accept `mode: silence`. The `silence` enum value carries a
96
+ Accepted at workflow-create by any API build that vendors this
97
+ value, since the validator reads the enum from the vendored
98
+ schema. The `silence` enum value carries a
97
99
  matching `per_value_availability: beta` on `audio.mode`.
98
100
 
99
101
  mime_groups:
@@ -149,12 +151,17 @@ operation:
149
151
  pattern: '^\d+(-\d+)?(,\d+(-\d+)?)*$'
150
152
  required: true
151
153
  depends_on: { mode: page_range }
152
- description: |
153
- Page-range expression (e.g. "1-5", "1,3,5-7", "10-20").
154
- 1-based inclusive. Required when `mode: page_range`.
155
- Resolved page count MUST be <= 200 (`invalid_options`
156
- 422 if exceeded — cross-ref
157
- [`WgCqnMRa`](https://trello.com/c/WgCqnMRa)).
154
+ # AUTHOR NOTES (moved out of the user-facing description, ewOlw35Z,
155
+ # 2026-09-23 — frontend shows option descriptions to users). Preserved verbatim:
156
+ # Page-range expression (e.g. "1-5", "1,3,5-7", "10-20").
157
+ # 1-based inclusive. Required when `mode: page_range`.
158
+ # Resolved page count MUST be <= 200 (`invalid_options`
159
+ # 422 if exceeded — cross-ref
160
+ # [`WgCqnMRa`](https://trello.com/c/WgCqnMRa)).
161
+ description: >-
162
+ Pages to extract, e.g. "1-5", "1,3,5-7" or "10-20" — 1-based and
163
+ inclusive. Required when `mode: page_range`. At most 200 pages;
164
+ more is refused with `invalid_options`.
158
165
 
159
166
  page_groups:
160
167
  type: integer
@@ -172,6 +179,104 @@ operation:
172
179
  # Audio base — three modes + precision flag.
173
180
  audio:
174
181
  availability: beta
182
+
183
+ # 🔴 THE WORKER IMPOSES NO BYTE CEILING ON AUDIO. Declared OUT LOUD rather
184
+ # than left silent, because silence and "no limit" look identical to a
185
+ # consumer and this contract has already been bitten by that: on
186
+ # 2026-08-26 a 128,232,024-byte EPUB was ACCEPTED, BILLED, and then
187
+ # refused by a 104,857,600 worker ceiling that appeared in no schema.
188
+ # Accepted, billed, refused — see FORMAT.md §`input_size_bound`.
189
+ #
190
+ # Confirmed in `compression_lambdas` `crates/split` at 22aec09, by reading
191
+ # rather than inferring: `process_audio` receives `actual_size` and uses it
192
+ # for exactly ONE thing — reporting it back as `original_size_bytes`. It is
193
+ # never compared against anything. The 524,288,000 guard in that crate is
194
+ # on the VIDEO path only (its error text says "split video: input size …
195
+ # exceeds the short-form ceiling"); audio never reaches it.
196
+ #
197
+ # ⚠️ THIS IS A STATEMENT ABOUT THE BOUND'S KIND, NOT A PROMISE OF UNLIMITED
198
+ # INPUT. A large audio file still fails — it fails on a CLOCK, which a
199
+ # consumer cannot pre-validate against and must not be told it can.
200
+ input_size_bound: processing_time
201
+
202
+ # ⛔ NO `max_input_duration` HERE, AND THE ABSENCE IS A DECISION THIS TIME.
203
+ # The two `precision` values have genuinely different duration behaviour
204
+ # and the contract has no primitive that can say so:
205
+ #
206
+ # 🔴 TODAY THE API REFUSES `exact` AT CREATE for every split (audio and
207
+ # video) — the deliberate "re-encode path not yet priced" gate
208
+ # (`compression_api` SplitOptionsValidator, reported 2026-09-23, Q8QsYYNn).
209
+ # So `exact` never reaches a worker, and `per_value_availability` tags it
210
+ # `planned`. The worker behaviour below is what `exact` WILL do once the
211
+ # API admits it:
212
+ #
213
+ # `exact` computes a time budget from the probed duration and refuses
214
+ # when it does not fit — WORKER-SIDE, after download and probe
215
+ # (`processor.rs` reads `probe.duration_secs`), returning a
216
+ # terminal result with `error_code: invalid_options`.
217
+ # `fast` has no check at all. Past the point where its deadline
218
+ # saturates, the budget stops growing while the work keeps
219
+ # growing: it degrades into a TIMEOUT rather than a named
220
+ # refusal.
221
+ #
222
+ # 🔴 **TWO LIMITS EXIST AND THE SMALLER ONE BINDS. THE CRATE NAMES THE
223
+ # LARGER.** The worker carries an internal time budget; the Lambda function
224
+ # carries a platform timeout. **The effective boundary is the LOWER of the
225
+ # two**, and the internal budget sits ABOVE the platform timeout.
226
+ #
227
+ # ⇒ **`exact`'s refusal threshold is calibrated to a limit that is not the
228
+ # one that ends the job.** There is a band of inputs that PASS the budget
229
+ # check — the worker judges them fine — and are then hard-killed by the
230
+ # platform mid-encode, with no named cause. The check does not protect the
231
+ # caller at the top of its own range; it just does not refuse them.
232
+ #
233
+ # ⚠️ **IT DOES NOT MAKE THE REFUSAL UNREACHABLE, AND AN EARLIER DRAFT OF
234
+ # THIS COMMENT SAID IT DID.** `exact_budget_fits` runs immediately after
235
+ # download and probe and BEFORE any re-encode (`processor.rs`, whose own
236
+ # comment says it rejects "upfront rather than timing out mid-run"), so a
237
+ # long-but-small input reaches it in seconds and does return
238
+ # `invalid_options`. **The draft conflated two different quantities:** the
239
+ # PROBED INPUT DURATION the check reads, and the ELAPSED WALL CLOCK the
240
+ # platform timeout measures. Those are different axes — which is the exact
241
+ # error this whole correction exists to fix, committed inside the fix.
242
+ #
243
+ # ⛔ **NO FIGURE IS PUBLISHED HERE, DELIBERATELY** (hub decision 509).
244
+ # v2.205.0 published numbers keyed to the crate constant — the LARGER limit,
245
+ # the one that does not bind — which is the same mistake its own entry warns
246
+ # about: *taking the number the code names without asking what the platform
247
+ # does first*. The figure lands only when lambdas' internal-budget derivation
248
+ # settles AND a job is measured near it. **A number that is wrong is worse
249
+ # than an absent number the shape explains**, because a consumer will
250
+ # pre-validate against it.
251
+ #
252
+ # ⚠️ **THIS IS AN AUDIO-ONLY EXPOSURE, AND THE REASON IS THIS VERY ABSENCE.**
253
+ # The `video` group's `short_form` class declares `max_input_duration`, which
254
+ # the API ENFORCES AT CREATE well below any of these boundaries, so a video
255
+ # job never reaches the inversion; long-form video is a different worker
256
+ # entirely. Audio declares no duration cap — that is what leaves the clock
257
+ # bound reachable here and nowhere else.
258
+ #
259
+ # ⇒ A single group-level number would be wrong in one direction or the
260
+ # other. Declaring one WOULD make the API refuse at CREATE — a declared
261
+ # ceiling is enforced there — withdrawing `fast` jobs that complete today,
262
+ # which is the direction the SVG incident ran in. A higher number would
263
+ # under-state what `exact` refuses.
264
+ # ⚠️ AND NEITHER DURATION BOUND IS ENFORCED AT CREATE TODAY (`exact` is
265
+ # refused at create outright, which is not a duration bound): both are worker-side,
266
+ # after the job is accepted, billed and downloaded. Declaring one would MOVE
267
+ # the refusal earlier, which is a real improvement for the value it fits and
268
+ # a real withdrawal for the value it does not.
269
+ # There is no `per_value_constraints` primitive (only `per_tier_`), so the
270
+ # per-value rule lives on the `precision` option where the caller choosing
271
+ # it reads it — the same placement as every other cross-field rule in this
272
+ # contract. Tracked: the missing `per_value_constraints` vocabulary and the
273
+ # asymmetry that `fast` refuses nothing, both on
274
+ # https://trello.com/c/YsaOzPU1 . The figure itself: 02FfdivD.
275
+ #
276
+ # ⚠️ NOT MEASURED, AND THAT IS THE SECOND REASON FOR NO FIGURE. Every
277
+ # boundary here is READ FROM SOURCE, not observed: lambdas' audio fixtures
278
+ # top out at 145 s, a small fraction of any candidate cap. They say what the
279
+ # code WILL do, not what it DOES near the boundary on a real file.
175
280
  mimes:
176
281
  - audio/mpeg
177
282
  - audio/aac
@@ -278,15 +383,106 @@ operation:
278
383
  type: enum
279
384
  values: [fast, exact]
280
385
  default: fast
386
+ per_value_availability:
387
+ # The API refuses `exact` at create for every split — the deliberate
388
+ # unpriced re-encode gate (Q8QsYYNn). Advertising it as callable
389
+ # was a silent rejection of a spec-valid value.
390
+ exact: { availability: planned }
281
391
  # Don't use "keyframe" language here — that's video-only;
282
392
  # audio drift is packet-boundary.
283
- description: |
284
- Cut precision. Under `fast`, audio cuts are
285
- packet-boundary approximate (drift bounded by codec
286
- packet size — typically <= 23ms for AAC, <= 26ms for
287
- MP3). Under `exact`, the server re-encodes to align cuts
288
- precisely at the requested timestamps (slower, larger
289
- output, but sample-accurate).
393
+ # AUTHOR NOTES (moved out of the user-facing description, ewOlw35Z,
394
+ # 2026-09-23 — frontend shows option descriptions to users). Preserved verbatim:
395
+ # Cut precision. Under `fast`, audio cuts are
396
+ # packet-boundary approximate (drift bounded by codec
397
+ # packet size — typically <= 23ms for AAC, <= 26ms for
398
+ # MP3). Under `exact`, the server re-encodes to align cuts
399
+ # precisely at the requested timestamps (slower, larger
400
+ # output, but sample-accurate).
401
+ #
402
+ # 🔴 **THE TWO VALUES HAVE DIFFERENT DURATION LIMITS, AND ONLY
403
+ # ONE OF THEM REFUSES.** This is stated here, on the option a
404
+ # caller chooses, because the group declares
405
+ # `input_size_bound: processing_time` and no
406
+ # `max_input_duration` — there is no per-value constraint
407
+ # primitive to carry it.
408
+ #
409
+ # 🔴 **TODAY `exact` IS REFUSED AT CREATE** — the API does not
410
+ # yet admit it for any split (the re-encode path is not yet
411
+ # priced), so it is tagged `planned` and a request carrying it
412
+ # is rejected before anything is uploaded, accepted or billed.
413
+ # **Everything below about `exact` describes the worker, i.e.
414
+ # what it will do once the API admits it.**
415
+ #
416
+ # `exact` is refused at create with `feature_not_available` (422),
417
+ # the contract's answer for a `planned` value (api
418
+ # SplitOptionsValidator leaves it to the generic planned-option
419
+ # gate; SplitAudioActivationCreateTest asserts the error_type).
420
+ # A consumer should not send it, as the `planned` tag says.
421
+ #
422
+ # ⛔ **`fast` GIVES NO PRE-FLIGHT SIGNAL, and neither will
423
+ # `exact` once admitted: both fail AFTER THE JOB IS ACCEPTED
424
+ # AND BILLED.** No duration ceiling is declared on this group,
425
+ # so the API cannot enforce one at create; the worker's own
426
+ # check reads a probe result, which means the input has already
427
+ # been uploaded, accepted and downloaded.
428
+ #
429
+ # - **`exact` (once admitted): refused when its computed time
430
+ # budget does not fit** — but WORKER-SIDE, after download and
431
+ # probe. The job
432
+ # returns a terminal `OperationResult` with `error_code:
433
+ # invalid_options`. ⚠️ It is NOT an HTTP 422 and it is not a
434
+ # create-time rejection: a worker cannot emit a status code.
435
+ # The boundary does not move with `count` — once the cap
436
+ # binds, the per-output term stops mattering.
437
+ # - **`fast` (the default): no boundary and no refusal at
438
+ # all.** Past the point where its deadline saturates, the time
439
+ # budget stops growing while the work does, so the job fails
440
+ # as a **TIMEOUT** rather than with any reason a caller can
441
+ # act on.
442
+ #
443
+ # 🔴 **TWO LIMITS EXIST AND THE SMALLER ONE BINDS.** The worker
444
+ # carries an internal time budget and the Lambda function
445
+ # carries a platform timeout; **the effective boundary is the
446
+ # LOWER of the two**, and the internal budget sits ABOVE the
447
+ # platform timeout.
448
+ #
449
+ # ⇒ **`exact`'s refusal threshold is calibrated to a limit that
450
+ # is not the one that ends the job.** Its check does fire, and
451
+ # fires early — it reads the probe result before any re-encode
452
+ # starts, so a long-but-small input is refused within seconds.
453
+ # But there is a band of inputs it judges FINE which the
454
+ # platform then hard-kills mid-encode, with no named cause. **So
455
+ # `exact` refusing is a reliable signal; `exact` NOT refusing is
456
+ # not a promise the job will finish.**
457
+ #
458
+ # ⛔ **NO SECONDS FIGURE IS GIVEN HERE, DELIBERATELY.** v2.205.0
459
+ # published figures keyed to the crate constant — the larger
460
+ # limit, the one that does not bind. The effective number lands
461
+ # only when that derivation settles AND a job is measured near
462
+ # it. **A published number a caller pre-validates against is
463
+ # worse wrong than absent**; the shape above is what a caller can
464
+ # actually act on today, which is: do not rely on either value
465
+ # failing gracefully.
466
+ #
467
+ # ⇒ `exact` (once admitted) at least names a cause when it is
468
+ # reached; `fast` never does. **On today's customer path only
469
+ # `fast` is the accept-then-bill-then-fail shape**,
470
+ # which is the very thing this group's `input_size_bound`
471
+ # declaration exists to stop happening silently on the BYTE
472
+ # axis. On the DURATION axis it is stated here and not yet
473
+ # fixed.
474
+ #
475
+ # ⚠️ Read from `compression_lambdas` `crates/split`. **NOT
476
+ # measured** — their audio fixtures reach 145 s, a small
477
+ # fraction of any candidate cap, so this describes what the code
478
+ # will do rather than observed behaviour at the boundary.
479
+ description: >-
480
+ Cut precision. `fast` (default) cuts at packet boundaries, so each cut
481
+ can drift by a few milliseconds (typically up to about 23 ms for AAC and
482
+ 26 ms for MP3). `exact` re-encodes to cut precisely at the requested
483
+ timestamps; it is not yet available and is refused when the workflow is
484
+ created. Very long audio can run out of processing time and fail rather
485
+ than be refused up front.
290
486
 
291
487
  # Video base — same three modes + precision + processing_class.
292
488
  # Long-form routes to `split-video-fargate` (same OperationType,
@@ -305,14 +501,16 @@ operation:
305
501
  max_input_size_bytes: 524288000
306
502
  max_output_size_bytes: 524288000
307
503
  long_form:
308
- # planned -> beta (rcwvUKhI): split-video-fargate worker deployed +
309
- # wired on staging but NOT yet proven end-to-end (first customer-path
310
- # soak incomplete; 4GB+ speed-up unmeasured; fan-out flag-gated dark).
504
+ # planned -> beta (rcwvUKhI). Stays beta until a PRODUCTION
505
+ # `customer_path` run is recorded in availability/prod-verification-
506
+ # log.yaml; worker-direct staging runs up to 3.99 GiB are in the
507
+ # staging log as partial evidence only (no environment axis). Fan-out admission is
508
+ # the API's LONGFORM_FANOUT_ADMISSION_ENABLED, set per environment in
509
+ # compression_terraform; not restated here.
311
510
  # Routes per ADR-0014 §D10 — same split OperationType, dedicated
312
511
  # stream-copy segmenter binary (NOT the long-form compress worker).
313
512
  availability: beta
314
- required_tier: pro
315
- constraints: # baseline = Pro
513
+ constraints: # baseline = every tier without a per_tier_constraints override
316
514
  max_input_duration: "PT12H"
317
515
  max_input_size_bytes: 5000000000 # 5 GB (Pro)
318
516
  max_output_size_bytes: 5000000000
@@ -379,6 +577,10 @@ operation:
379
577
  type: enum
380
578
  values: [fast, exact]
381
579
  default: fast
580
+ per_value_availability:
581
+ # Refused at create by the API for every split (Q8QsYYNn) as
582
+ # `feature_not_available`; see the note on `audio.options.precision`.
583
+ exact: { availability: planned }
382
584
  description: |
383
585
  Cut precision. Under `fast`, video cuts are keyframe-
384
586
  aligned (drift bounded by GOP size — typically up to 1-2
@@ -66,14 +66,19 @@ operation:
66
66
  max: 100
67
67
  default: 85
68
68
  depends_on: { format: [jpg, webp, png] }
69
+ # AUTHOR NOTES (moved out of the user-facing description, ewOlw35Z,
70
+ # 2026-09-23 — frontend shows option descriptions to users). Preserved verbatim:
71
+ # Output quality for lossy thumbnail formats (jpg / webp / png): higher = better
72
+ # quality, larger file. For PNG, `quality` < 100 applies lossy palette quantization
73
+ # (transparency preserved); `quality: 100` keeps the PNG lossless. Per-format effective
74
+ # default (server-resolved when `quality` is unset, per ADR-0020 D1): PNG → 70 (more
75
+ # aggressive — thumbnails target small files), jpg/webp → 85. The schema `default` is
76
+ # the nominal jpg/webp value (85); the FE shows 70 as the initial PNG slider value.
69
77
  description: >-
70
- Output quality for lossy thumbnail formats (jpg / webp / png): higher =
71
- better quality, larger file. For PNG, `quality` < 100 applies lossy palette
72
- quantization (transparency preserved); `quality: 100` keeps the
73
- PNG lossless. Per-format effective default (server-resolved when `quality`
74
- is unset, per ADR-0020 D1): PNG → 70 (more aggressive — thumbnails target
75
- small files), jpg/webp → 85. The schema `default` is the nominal jpg/webp
76
- value (85); the FE shows 70 as the initial PNG slider value.
78
+ Output quality for jpg, webp and png thumbnails: higher = better quality,
79
+ larger file. For PNG, a value below 100 reduces the colour palette
80
+ (transparency is kept) and 100 keeps it lossless. When unset, PNG
81
+ thumbnails use 70 and jpg/webp use 85.
77
82
  background:
78
83
  type: string
79
84
  pattern: "^#[0-9a-fA-F]{6}$"
@@ -107,8 +112,7 @@ operation:
107
112
  # advertised shape; availability gates execution off (422).
108
113
  # No max_output_size_bytes: thumbnail output is a single bounded image.
109
114
  availability: planned
110
- required_tier: pro
111
- constraints: # baseline = Pro
115
+ constraints: # baseline = every tier without a per_tier_constraints override
112
116
  max_input_duration: "PT12H"
113
117
  max_input_size_bytes: 5000000000 # 5 GB (Pro)
114
118
  per_tier_constraints:
@@ -458,26 +462,29 @@ operation:
458
462
  # Cargo.lock via usvg; `quick-xml` is absent.
459
463
  # The build's real shape lives in the ticket and in lambdas' crate. This
460
464
  # file states the CONTRACT: what is advertised, and what the API gates.
465
+ # AUTHOR NOTES (moved out of the user-facing description, ewOlw35Z,
466
+ # 2026-09-23 — frontend shows option descriptions to users). Preserved verbatim:
467
+ # `cover` (the only supported value) = extract the EPUB's declared cover image — the
468
+ # cheap path, no rendering. Cover lookup supports both mechanisms: the EPUB 3
469
+ # `cover-image` property on an OPF manifest item, AND the legacy EPUB 2 `<meta
470
+ # name="cover" content="..."/>` pointing at a manifest item — supporting only the former
471
+ # would miss a large slice of real-world files. Both are staging-proven (pL16ZfOw Wave
472
+ # 3). A cover image is OPTIONAL per W3C EPUB 3.3, so a cover-less EPUB is a REAL and
473
+ # expected case: it fails with `error_code: processing_failed` and `is_retryable:
474
+ # false`. That is the live behaviour, not an aspiration — the worker classifies it as
475
+ # `CoverError::NoCoverDeclared` and maps it there (`epub/error.rs`), and
476
+ # non-retryability is DERIVED from the code rather than set per-call, so it cannot
477
+ # drift. A cover-less EPUB will not grow a cover, so retrying is always futile. A more
478
+ # specific code would be better, and is NOT promised here: `ErrorCode` (asyncapi) is a
479
+ # CLOSED enum with no "no cover" member, so adding one is a real cross-repo co-land
480
+ # (enum edit -> SDK regen -> lockstep). Until then this description states what actually
481
+ # happens — an undecided-reject note on a STABLE route would leave consumers unable to
482
+ # handle a case they will certainly meet.
461
483
  description: >-
462
- `cover` (the only supported value) = extract the EPUB's declared cover
463
- image — the cheap path, no rendering. Cover lookup supports both
464
- mechanisms: the EPUB 3 `cover-image` property on an OPF manifest item,
465
- AND the legacy EPUB 2 `<meta name="cover" content="..."/>` pointing at a
466
- manifest item — supporting only the former would miss a large slice of
467
- real-world files. Both are staging-proven (pL16ZfOw Wave 3).
468
- A cover image is OPTIONAL per W3C EPUB 3.3, so a cover-less EPUB is a
469
- REAL and expected case: it fails with `error_code: processing_failed`
470
- and `is_retryable: false`. That is the live behaviour, not an aspiration
471
- — the worker classifies it as `CoverError::NoCoverDeclared` and maps it
472
- there (`epub/error.rs`), and non-retryability is DERIVED from the code
473
- rather than set per-call, so it cannot drift. A cover-less EPUB will not
474
- grow a cover, so retrying is always futile.
475
- A more specific code would be better, and is NOT promised here:
476
- `ErrorCode` (asyncapi) is a CLOSED enum with no "no cover" member, so
477
- adding one is a real cross-repo co-land (enum edit -> SDK regen ->
478
- lockstep). Until then this description states what actually happens —
479
- an undecided-reject note on a STABLE route would leave consumers unable
480
- to handle a case they will certainly meet.
484
+ `cover` (the only supported value) uses the EPUB's declared cover image;
485
+ no pages are rendered. Both EPUB 3 and legacy EPUB 2 cover declarations
486
+ are recognised. An EPUB without a cover cannot produce a thumbnail: the
487
+ job fails with `processing_failed` and retrying will not help.
481
488
  width:
482
489
  type: integer
483
490
  min: 1
@@ -146,8 +146,7 @@ operation:
146
146
  max_output_size_bytes: 524288000
147
147
  long_form:
148
148
  availability: planned
149
- required_tier: pro
150
- constraints: # baseline = Pro
149
+ constraints: # baseline = every tier without a per_tier_constraints override
151
150
  max_input_duration: "PT12H"
152
151
  max_input_size_bytes: 5000000000 # 5 GB (Pro)
153
152
  max_output_size_bytes: 5000000000
@@ -55,8 +55,7 @@ operation:
55
55
  max_output_size_bytes: 524288000
56
56
  long_form:
57
57
  availability: planned
58
- required_tier: pro
59
- constraints: # baseline = Pro
58
+ constraints: # baseline = every tier without a per_tier_constraints override
60
59
  max_input_duration: "PT12H"
61
60
  max_input_size_bytes: 5000000000 # 5 GB (Pro)
62
61
  max_output_size_bytes: 5000000000
@@ -102,13 +101,17 @@ operation:
102
101
  ticket).
103
102
 
104
103
  rotation:
104
+ # AUTHOR NOTES: planned, and its -45.0 default REMOVED (clGOsvp2).
105
+ # lambdas' armed-defaults adjudication (D0DwvmjV, 2026-09-24, row 125)
106
+ # found the worker never reads it — drawtext is emitted unrotated — so
107
+ # the default was an armed promise nobody keeps. Marking alone does not
108
+ # disarm a default; it has to go. Restore both when the worker rotates.
105
109
  type: float
106
110
  min: -360.0
107
111
  max: 360.0
108
- default: -45.0
112
+ availability: planned
109
113
  description: |
110
- Rotation angle in degrees. Default -45° suits tiled mode
111
- (angled diagonal pattern). Clamped to range.
114
+ Rotation angle of the watermark text, in degrees. Not available yet.
112
115
 
113
116
  watermark_mode:
114
117
  type: enum
@@ -144,36 +147,90 @@ operation:
144
147
  - bottom_center
145
148
  - bottom_right
146
149
  default: bottom_right
147
- description: |
148
- 9-grid anchor position. For `watermark_mode: single`, the
149
- text label is placed at this anchor + margin_x/margin_y
150
- offset on each frame. For `watermark_mode: tiled`, anchor
151
- is ignored (tiles fill the frame).
150
+ # AUTHOR NOTES (moved out of the user-facing description, ewOlw35Z,
151
+ # 2026-09-23 — frontend shows option descriptions to users). Preserved verbatim:
152
+ # 9-grid anchor position. For `watermark_mode: single`, the
153
+ # text label is placed at this anchor + margin_x/margin_y
154
+ # offset on each frame. For `watermark_mode: tiled`, anchor
155
+ # is ignored (tiles fill the frame).
156
+ #
157
+ # 🔴 **`center` IGNORES `margin_x` / `margin_y` rather than
158
+ # rejecting them. THE REJECTION AS WRITTEN CANNOT SURVIVE A
159
+ # NON-ZERO DEFAULT; IGNORING IS THE REPLACEMENT THAT WAS CHOSEN.**
160
+ # The sibling operations still reject a non-zero
161
+ # margin at `anchor: center` as `invalid_options` (422), and
162
+ # that rule is sound THERE because their margin default is
163
+ # `0px`: a client that materialises the default sends `0px`,
164
+ # which is not non-zero, so only a caller who actually asked
165
+ # for an offset is ever refused.
166
+ #
167
+ # ⛔ **Here the default is `2%`, and that makes the rejection
168
+ # rule unusable as written.** Schema-driven clients fill contract
169
+ # defaults BEFORE sending, so a request with `anchor: center`
170
+ # arrives carrying `margin_x: "2%"` whether the caller chose it
171
+ # or never mentioned margins at all. **After default
172
+ # materialisation an explicit value and a defaulted one are
173
+ # INDISTINGUISHABLE on the wire**, so a rejection cannot
174
+ # separate the mistake it exists to catch from the overwhelming
175
+ # majority of requests that simply accepted the default. It
176
+ # would 422 almost every centred watermark.
177
+ #
178
+ # ⚠️ **Rejection is not the only alternative, and this text does
179
+ # not claim it was forced.** A reject-if-it-differs-from-the-
180
+ # default rule would survive materialisation exactly as the zero
181
+ # rule does for the siblings. **Ignoring is the behaviour CHOSEN**
182
+ # under hub decision 465, because margins are meaningless when the
183
+ # label is centred and a no-op is kinder than a 422 on a request
184
+ # that renders correctly. The cost is stated: a caller who
185
+ # deliberately passes a margin with `anchor: center` gets silence
186
+ # rather than a correction.
187
+ #
188
+ # ⚠️ **DO NOT "align" `text_watermark` or `image_watermark` to
189
+ # this on the strength of the operation NAME.** Their rejection
190
+ # still works because their default is still `0px`. Changing one
191
+ # of THOSE defaults to non-zero is what would force the same move
192
+ # there — the trigger is a non-zero default, never the operation
193
+ # name. (`video_watermark` moved with this operation because its
194
+ # default moved too, under the same decision.)
195
+ description: >-
196
+ Where the text is placed on each frame, on a 3x3 grid. For
197
+ `watermark_mode: single` the text sits at this anchor, offset by
198
+ `margin_x` / `margin_y`. For `watermark_mode: tiled` the anchor is
199
+ ignored. With `center`, the margins are ignored.
152
200
 
153
201
  margin_x:
154
202
  type: string
155
203
  pattern: '^\d+(\.\d+)?(px|%)$'
156
- default: "0px"
204
+ default: "2%"
157
205
  description: |
158
206
  Horizontal offset from the anchor as pixels (e.g. "40px")
159
207
  or percentage of video frame width (e.g. "5%").
160
208
  Anchor-relative. Ignored when `watermark_mode: tiled`.
161
209
 
162
- **`anchor: center` exception** (watermark_mode: single
163
- only). Non-zero `margin_x` combined with `anchor: center`
164
- is rejected by the API at workflow-create time as
165
- `invalid_options` (HTTP 422).
210
+ **Defaults to `2%`, i.e. INSET from the frame edge**, because
211
+ a watermark flush against the edge is the wrong default for
212
+ video: player chrome, safe-area cropping and letterboxing all
213
+ eat the outermost pixels. **A true flush remains available by
214
+ passing `"0px"` explicitly** — the default is a default, not a
215
+ floor.
216
+
217
+ **`anchor: center`: margins are IGNORED** (watermark_mode:
218
+ single only). They are meaningless when the label is centred,
219
+ and this is deliberately a silent no-op rather than a
220
+ rejection. See the `anchor` description for why rejection is
221
+ not available here.
166
222
 
167
223
  margin_y:
168
224
  type: string
169
225
  pattern: '^\d+(\.\d+)?(px|%)$'
170
- default: "0px"
226
+ default: "2%"
171
227
  description: |
172
228
  Vertical offset from the anchor as pixels or percentage of
173
229
  video frame height. Ignored when `watermark_mode: tiled`.
174
230
 
175
- **`anchor: center` exception** (watermark_mode: single
176
- only). Same rejection rule as `margin_x`.
231
+ **Defaults to `2%` (inset), for the reasons on `margin_x`**;
232
+ `"0px"` still gives a true flush. **`anchor: center`: ignored**,
233
+ same as `margin_x`.
177
234
 
178
235
  opacity:
179
236
  type: float