@giveitsmaller/contracts 0.88.0 → 0.90.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 (569) hide show
  1. package/README.md +2 -2
  2. package/accepted-options/accepted-options.json +10 -1
  3. package/accepted-options/image-output-routes.json +1 -1
  4. package/asyncapi/events.yaml +21 -8
  5. package/availability/availability.json +49 -12
  6. package/code-builder/code-builder-metadata.json +54 -10
  7. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  8. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  9. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  10. package/dist/openapi/models/AccountLimits.js +1 -1
  11. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  12. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  13. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  14. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  15. package/dist/openapi/models/AnonymousLimitExceededResponse.d.ts +1 -1
  16. package/dist/openapi/models/AnonymousLimitExceededResponse.js +1 -1
  17. package/dist/openapi/models/AnonymousOperationNotAllowedResponse.d.ts +1 -1
  18. package/dist/openapi/models/AnonymousOperationNotAllowedResponse.js +1 -1
  19. package/dist/openapi/models/AnonymousQuotaExhaustedResponse.d.ts +1 -1
  20. package/dist/openapi/models/AnonymousQuotaExhaustedResponse.js +1 -1
  21. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  22. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  23. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  24. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  25. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  26. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  27. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  28. package/dist/openapi/models/AuthErrorType.js +1 -1
  29. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  30. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  31. package/dist/openapi/models/AuthenticatedIdentity.d.ts +1 -1
  32. package/dist/openapi/models/AuthenticatedIdentity.js +1 -1
  33. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  34. package/dist/openapi/models/AvailabilityValue.js +1 -1
  35. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  36. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  37. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  38. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  39. package/dist/openapi/models/BillingCheckoutRequest.d.ts +1 -1
  40. package/dist/openapi/models/BillingCheckoutRequest.js +1 -1
  41. package/dist/openapi/models/BillingCheckoutSession.d.ts +1 -1
  42. package/dist/openapi/models/BillingCheckoutSession.js +1 -1
  43. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +1 -1
  44. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +1 -1
  45. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  46. package/dist/openapi/models/CallbackEventType.js +1 -1
  47. package/dist/openapi/models/CancelAccountDeletion200Response.d.ts +1 -1
  48. package/dist/openapi/models/CancelAccountDeletion200Response.js +1 -1
  49. package/dist/openapi/models/CancelAccountDeletion200ResponseData.d.ts +1 -1
  50. package/dist/openapi/models/CancelAccountDeletion200ResponseData.js +1 -1
  51. package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
  52. package/dist/openapi/models/CapabilityCondition.js +3 -2
  53. package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
  54. package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
  55. package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
  56. package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
  57. package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
  58. package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
  59. package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
  60. package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
  61. package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
  62. package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
  63. package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +1 -1
  64. package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -1
  65. package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
  66. package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
  67. package/dist/openapi/models/CapabilityConditionOneOf7.d.ts +1 -1
  68. package/dist/openapi/models/CapabilityConditionOneOf7.js +1 -1
  69. package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
  70. package/dist/openapi/models/CapabilityConstraint.js +1 -1
  71. package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
  72. package/dist/openapi/models/CapabilityInputSpec.js +1 -1
  73. package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
  74. package/dist/openapi/models/CapabilityProduces.js +5 -3
  75. package/dist/openapi/models/CapabilityProducesOneOf.d.ts +1 -1
  76. package/dist/openapi/models/CapabilityProducesOneOf.js +1 -1
  77. package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
  78. package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
  79. package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
  80. package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
  81. package/dist/openapi/models/CeilingBasisValue.d.ts +1 -1
  82. package/dist/openapi/models/CeilingBasisValue.js +1 -1
  83. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  84. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  85. package/dist/openapi/models/CheckoutSessionStatusResponse.d.ts +1 -1
  86. package/dist/openapi/models/CheckoutSessionStatusResponse.js +1 -1
  87. package/dist/openapi/models/CheckoutSessionStatusResponseData.d.ts +1 -1
  88. package/dist/openapi/models/CheckoutSessionStatusResponseData.js +1 -1
  89. package/dist/openapi/models/CodegenSource.d.ts +1 -1
  90. package/dist/openapi/models/CodegenSource.js +1 -1
  91. package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
  92. package/dist/openapi/models/CodegenSourceInput.js +1 -1
  93. package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
  94. package/dist/openapi/models/CodegenSourceJob.js +1 -1
  95. package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
  96. package/dist/openapi/models/CodegenSourceJobSource.js +5 -3
  97. package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
  98. package/dist/openapi/models/CodegenSourceOperation.js +1 -1
  99. package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +1 -1
  100. package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
  101. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  102. package/dist/openapi/models/CompositionPlan.js +1 -1
  103. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  104. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  105. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  106. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  107. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  108. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  109. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  110. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  111. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  112. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  113. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  114. package/dist/openapi/models/ConnectionSource.js +1 -1
  115. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  116. package/dist/openapi/models/ContactRequest.js +1 -1
  117. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  118. package/dist/openapi/models/ContactSubject.js +1 -1
  119. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  120. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  121. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  122. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  123. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  124. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  125. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  126. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  127. package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +1 -1
  128. package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +7 -4
  129. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  130. package/dist/openapi/models/CreateExternalImport403Response.js +10 -6
  131. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  132. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  133. package/dist/openapi/models/CreateWorkflow401Response.d.ts +1 -1
  134. package/dist/openapi/models/CreateWorkflow401Response.js +1 -1
  135. package/dist/openapi/models/CreateWorkflow403Response.d.ts +1 -1
  136. package/dist/openapi/models/CreateWorkflow403Response.js +1 -1
  137. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  138. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  139. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  140. package/dist/openapi/models/CreditTransaction.js +1 -1
  141. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  142. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  143. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  144. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  145. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  146. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  147. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  148. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  149. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  150. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  151. package/dist/openapi/models/Delivery.d.ts +1 -1
  152. package/dist/openapi/models/Delivery.js +1 -1
  153. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  154. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  155. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  156. package/dist/openapi/models/DeliveryPlan.js +1 -1
  157. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  158. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  159. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  160. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  161. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  162. package/dist/openapi/models/DeliverySelection.js +1 -1
  163. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  164. package/dist/openapi/models/DownloadBundle.js +1 -1
  165. package/dist/openapi/models/DroppedOption.d.ts +1 -1
  166. package/dist/openapi/models/DroppedOption.js +1 -1
  167. package/dist/openapi/models/EmailNotify.d.ts +1 -1
  168. package/dist/openapi/models/EmailNotify.js +1 -1
  169. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  170. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  171. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  172. package/dist/openapi/models/EndpointProjection.js +1 -1
  173. package/dist/openapi/models/EndpointProjectionServersInner.d.ts +1 -1
  174. package/dist/openapi/models/EndpointProjectionServersInner.js +1 -1
  175. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  176. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  177. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  178. package/dist/openapi/models/EstimateQuality.js +1 -1
  179. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  180. package/dist/openapi/models/EstimateRange.js +1 -1
  181. package/dist/openapi/models/ExportAccountData200Response.d.ts +1 -1
  182. package/dist/openapi/models/ExportAccountData200Response.js +1 -1
  183. package/dist/openapi/models/ExportAccountData200ResponseData.d.ts +1 -1
  184. package/dist/openapi/models/ExportAccountData200ResponseData.js +1 -1
  185. package/dist/openapi/models/ExportAccountData200ResponseDataBilling.d.ts +1 -1
  186. package/dist/openapi/models/ExportAccountData200ResponseDataBilling.js +1 -1
  187. package/dist/openapi/models/ExportAccountData200ResponseDataBillingCheckoutSessionsInner.d.ts +1 -1
  188. package/dist/openapi/models/ExportAccountData200ResponseDataBillingCheckoutSessionsInner.js +1 -1
  189. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  190. package/dist/openapi/models/ExternalDestination.js +1 -1
  191. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  192. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  193. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  194. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  195. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  196. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  197. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  198. package/dist/openapi/models/ExternalImportToken.js +1 -1
  199. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  200. package/dist/openapi/models/ExternalSource.js +1 -1
  201. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  202. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  203. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  204. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  205. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  206. package/dist/openapi/models/FeatureViolation.js +1 -1
  207. package/dist/openapi/models/GetProfile200Response.d.ts +1 -1
  208. package/dist/openapi/models/GetProfile200Response.js +1 -1
  209. package/dist/openapi/models/GetProfile200ResponseData.d.ts +1 -1
  210. package/dist/openapi/models/GetProfile200ResponseData.js +1 -1
  211. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  212. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  213. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  214. package/dist/openapi/models/JobDefinition.js +1 -1
  215. package/dist/openapi/models/JobDownload.d.ts +1 -1
  216. package/dist/openapi/models/JobDownload.js +1 -1
  217. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  218. package/dist/openapi/models/JobInputV2.js +1 -1
  219. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  220. package/dist/openapi/models/JobMediaClass.js +1 -1
  221. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  222. package/dist/openapi/models/JobOutputSource.js +1 -1
  223. package/dist/openapi/models/JobResponse.d.ts +1 -1
  224. package/dist/openapi/models/JobResponse.js +1 -1
  225. package/dist/openapi/models/JobStatus.d.ts +1 -1
  226. package/dist/openapi/models/JobStatus.js +1 -1
  227. package/dist/openapi/models/JobType.d.ts +1 -1
  228. package/dist/openapi/models/JobType.js +1 -1
  229. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  230. package/dist/openapi/models/LivenessResponse.js +1 -1
  231. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  232. package/dist/openapi/models/LoginUser200Response.js +1 -1
  233. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  234. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  235. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  236. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  237. package/dist/openapi/models/LoginUser401Response.d.ts +1 -1
  238. package/dist/openapi/models/LoginUser401Response.js +1 -1
  239. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  240. package/dist/openapi/models/LoginUserRequest.js +1 -1
  241. package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +1 -1
  242. package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
  243. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
  244. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
  245. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  246. package/dist/openapi/models/MetadataResponse.js +1 -1
  247. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  248. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  249. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  250. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  251. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  252. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  253. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  254. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  255. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  256. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  257. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  258. package/dist/openapi/models/MultiInputSource.js +1 -1
  259. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  260. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  261. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  262. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  263. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  264. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  265. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  266. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  267. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  268. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  269. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  270. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  271. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  272. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  273. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  274. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  275. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  276. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  277. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  278. package/dist/openapi/models/MultipartPartListing.js +1 -1
  279. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  280. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  281. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  282. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  283. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  284. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  285. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  286. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  287. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  288. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  289. package/dist/openapi/models/NotifyConfig.d.ts +1 -1
  290. package/dist/openapi/models/NotifyConfig.js +1 -1
  291. package/dist/openapi/models/OperationCapability.d.ts +1 -1
  292. package/dist/openapi/models/OperationCapability.js +1 -1
  293. package/dist/openapi/models/OperationDefinition.d.ts +13 -5
  294. package/dist/openapi/models/OperationDefinition.js +1 -1
  295. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  296. package/dist/openapi/models/OperationDownload.js +1 -1
  297. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  298. package/dist/openapi/models/OperationInputModel.js +1 -1
  299. package/dist/openapi/models/OperationMessageParamsValue.d.ts +1 -1
  300. package/dist/openapi/models/OperationMessageParamsValue.js +1 -1
  301. package/dist/openapi/models/OperationResponse.d.ts +4 -2
  302. package/dist/openapi/models/OperationResponse.js +1 -1
  303. package/dist/openapi/models/OperationResult.d.ts +1 -1
  304. package/dist/openapi/models/OperationResult.js +1 -1
  305. package/dist/openapi/models/OperationResultMetadata.d.ts +6 -2
  306. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  307. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  308. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  309. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  310. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  311. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  312. package/dist/openapi/models/OperationStatus.js +1 -1
  313. package/dist/openapi/models/OperationType.d.ts +2 -2
  314. package/dist/openapi/models/OperationType.js +2 -2
  315. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  316. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  317. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  318. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  319. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  320. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  321. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  322. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  323. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  324. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  325. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
  326. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
  327. package/dist/openapi/models/OptionSchema.d.ts +18 -1
  328. package/dist/openapi/models/OptionSchema.js +4 -1
  329. package/dist/openapi/models/OptionSchemaPerValueConstraintsValue.d.ts +32 -0
  330. package/dist/openapi/models/OptionSchemaPerValueConstraintsValue.js +41 -0
  331. package/dist/openapi/models/OutputProperties.d.ts +1 -1
  332. package/dist/openapi/models/OutputProperties.js +1 -1
  333. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
  334. package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
  335. package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +1 -1
  336. package/dist/openapi/models/PerClassAvailabilityEntry.js +1 -1
  337. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  338. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  339. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  340. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  341. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  342. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  343. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  344. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  345. package/dist/openapi/models/ProbeUpload422Response.d.ts +1 -1
  346. package/dist/openapi/models/ProbeUpload422Response.js +1 -1
  347. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  348. package/dist/openapi/models/ProcessingClass.js +1 -1
  349. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  350. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  351. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  352. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  353. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  354. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  355. package/dist/openapi/models/ProcessingClassEntryInputUniformity.d.ts +1 -1
  356. package/dist/openapi/models/ProcessingClassEntryInputUniformity.js +1 -1
  357. package/dist/openapi/models/ProcessingClassEntryResolutionBands.d.ts +1 -1
  358. package/dist/openapi/models/ProcessingClassEntryResolutionBands.js +1 -1
  359. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  360. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  361. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  362. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  363. package/dist/openapi/models/ProcessingClassReason.d.ts +13 -1
  364. package/dist/openapi/models/ProcessingClassReason.js +13 -1
  365. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  366. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  367. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  368. package/dist/openapi/models/ProcessingPlan.js +1 -1
  369. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  370. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  371. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  372. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  373. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  374. package/dist/openapi/models/ReadinessResponse.js +1 -1
  375. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  376. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  377. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  378. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  379. package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +1 -1
  380. package/dist/openapi/models/RequestAccountDeletion200Response.js +1 -1
  381. package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +1 -1
  382. package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +1 -1
  383. package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +1 -1
  384. package/dist/openapi/models/RequestAccountDeletionRequest.js +1 -1
  385. package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
  386. package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
  387. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  388. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  389. package/dist/openapi/models/ResolutionBand.d.ts +1 -1
  390. package/dist/openapi/models/ResolutionBand.js +1 -1
  391. package/dist/openapi/models/ResolutionBandCeiling.d.ts +1 -1
  392. package/dist/openapi/models/ResolutionBandCeiling.js +1 -1
  393. package/dist/openapi/models/ResolutionBandCeilingConstraints.d.ts +1 -1
  394. package/dist/openapi/models/ResolutionBandCeilingConstraints.js +1 -1
  395. package/dist/openapi/models/ResolutionBandCeilingDerivation.d.ts +1 -1
  396. package/dist/openapi/models/ResolutionBandCeilingDerivation.js +1 -1
  397. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  398. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  399. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  400. package/dist/openapi/models/RetryResponse.js +1 -1
  401. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  402. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  403. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  404. package/dist/openapi/models/SseCompletionBase.js +1 -1
  405. package/dist/openapi/models/SseConnectionLimitResponse.d.ts +1 -1
  406. package/dist/openapi/models/SseConnectionLimitResponse.js +1 -1
  407. package/dist/openapi/models/SseEventType.d.ts +1 -1
  408. package/dist/openapi/models/SseEventType.js +1 -1
  409. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  410. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  411. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  412. package/dist/openapi/models/SseJobFailedData.js +1 -1
  413. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  414. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  415. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  416. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  417. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  418. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  419. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  420. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  421. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  422. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  423. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  424. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  425. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  426. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  427. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  428. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  429. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  430. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  431. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  432. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  433. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  434. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  435. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  436. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  437. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  438. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  439. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  440. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  441. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  442. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  443. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  444. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  445. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  446. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  447. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  448. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  449. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  450. package/dist/openapi/models/UploadFile403Response.js +1 -1
  451. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  452. package/dist/openapi/models/UploadFile422Response.js +1 -1
  453. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  454. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  455. package/dist/openapi/models/UploadProbeNotApplicableResponse.d.ts +1 -1
  456. package/dist/openapi/models/UploadProbeNotApplicableResponse.js +1 -1
  457. package/dist/openapi/models/UploadProbeNotReadyResponse.d.ts +1 -1
  458. package/dist/openapi/models/UploadProbeNotReadyResponse.js +1 -1
  459. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  460. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  461. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  462. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  463. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  464. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  465. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  466. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  467. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  468. package/dist/openapi/models/UploadResponse.js +1 -1
  469. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  470. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  471. package/dist/openapi/models/UploadSource.d.ts +1 -1
  472. package/dist/openapi/models/UploadSource.js +1 -1
  473. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  474. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  475. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  476. package/dist/openapi/models/UploadThresholds.js +1 -1
  477. package/dist/openapi/models/UserTier.d.ts +1 -1
  478. package/dist/openapi/models/UserTier.js +1 -1
  479. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  480. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  481. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  482. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  483. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  484. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  485. package/dist/openapi/models/WarningType.d.ts +1 -1
  486. package/dist/openapi/models/WarningType.js +1 -1
  487. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  488. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  489. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  490. package/dist/openapi/models/WebhookPayload.js +1 -1
  491. package/dist/openapi/models/WorkflowArchiveResponse.d.ts +1 -1
  492. package/dist/openapi/models/WorkflowArchiveResponse.js +1 -1
  493. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
  494. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
  495. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  496. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  497. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  498. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  499. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  500. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  501. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  502. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  503. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  504. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  505. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  506. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  507. package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
  508. package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
  509. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  510. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  511. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  512. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  513. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  514. package/dist/openapi/models/WorkflowEdge.js +1 -1
  515. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  516. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  517. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  518. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  519. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  520. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  521. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  522. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  523. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  524. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  525. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  526. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  527. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  528. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  529. package/dist/openapi/models/WorkflowRestoreResponse.d.ts +1 -1
  530. package/dist/openapi/models/WorkflowRestoreResponse.js +1 -1
  531. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
  532. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
  533. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  534. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  535. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  536. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  537. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  538. package/dist/openapi/models/WorkflowSource.js +1 -1
  539. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  540. package/dist/openapi/models/WorkflowStatus.js +1 -1
  541. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  542. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  543. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  544. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  545. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  546. package/dist/openapi/models/WorkflowSummary.js +1 -1
  547. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  548. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  549. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  550. package/dist/openapi/models/WorkflowWarning.js +1 -1
  551. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  552. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  553. package/dist/openapi/models/index.d.ts +1 -0
  554. package/dist/openapi/models/index.js +1 -0
  555. package/dist/openapi/runtime.d.ts +1 -1
  556. package/dist/openapi/runtime.js +1 -1
  557. package/dist/operations/audio_to_video.metadata.js +1 -1
  558. package/dist/operations/compress.d.ts +4 -0
  559. package/dist/operations/compress.metadata.js +14 -0
  560. package/dist/operations/split.metadata.js +2 -2
  561. package/openapi/README.md +1 -1
  562. package/openapi/api.yaml +127 -18
  563. package/operation-capabilities/operation-capabilities.json +51 -32
  564. package/operations/schemas/audio_to_video.yaml +11 -15
  565. package/operations/schemas/compress.yaml +48 -3
  566. package/operations/schemas/convert.yaml +23 -4
  567. package/operations/schemas/split.yaml +5 -4
  568. package/operations/schemas/thumbnail.yaml +14 -3
  569. package/package.json +3 -3
@@ -2,7 +2,7 @@
2
2
  * GISL Compression API
3
3
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
4
4
  *
5
- * The version of the OpenAPI document: 2.224.0
5
+ * The version of the OpenAPI document: 2.227.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * GISL Compression API
5
5
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
6
6
  *
7
- * The version of the OpenAPI document: 2.224.0
7
+ * The version of the OpenAPI document: 2.227.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -2,7 +2,7 @@
2
2
  * GISL Compression API
3
3
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
4
4
  *
5
- * The version of the OpenAPI document: 2.224.0
5
+ * The version of the OpenAPI document: 2.227.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * GISL Compression API
5
5
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
6
6
  *
7
- * The version of the OpenAPI document: 2.224.0
7
+ * The version of the OpenAPI document: 2.227.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -2,7 +2,7 @@
2
2
  * GISL Compression API
3
3
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
4
4
  *
5
- * The version of the OpenAPI document: 2.224.0
5
+ * The version of the OpenAPI document: 2.227.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * GISL Compression API
5
5
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
6
6
  *
7
- * The version of the OpenAPI document: 2.224.0
7
+ * The version of the OpenAPI document: 2.227.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -2,7 +2,7 @@
2
2
  * GISL Compression API
3
3
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
4
4
  *
5
- * The version of the OpenAPI document: 2.224.0
5
+ * The version of the OpenAPI document: 2.227.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * GISL Compression API
5
5
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
6
6
  *
7
- * The version of the OpenAPI document: 2.224.0
7
+ * The version of the OpenAPI document: 2.227.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -159,6 +159,7 @@ export * from './OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js';
159
159
  export * from './OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js';
160
160
  export * from './OperationsSchemaResponseWorkflowFeaturesProcessing.js';
161
161
  export * from './OptionSchema.js';
162
+ export * from './OptionSchemaPerValueConstraintsValue.js';
162
163
  export * from './OutputProperties.js';
163
164
  export * from './OutputPropertiesIsAnimated.js';
164
165
  export * from './PerClassAvailabilityEntry.js';
@@ -161,6 +161,7 @@ export * from './OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js';
161
161
  export * from './OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js';
162
162
  export * from './OperationsSchemaResponseWorkflowFeaturesProcessing.js';
163
163
  export * from './OptionSchema.js';
164
+ export * from './OptionSchemaPerValueConstraintsValue.js';
164
165
  export * from './OutputProperties.js';
165
166
  export * from './OutputPropertiesIsAnimated.js';
166
167
  export * from './PerClassAvailabilityEntry.js';
@@ -2,7 +2,7 @@
2
2
  * GISL Compression API
3
3
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
4
4
  *
5
- * The version of the OpenAPI document: 2.224.0
5
+ * The version of the OpenAPI document: 2.227.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * GISL Compression API
5
5
  * REST API for the GISL (Give It Smaller) file compression and processing service. **Architecture:** - Upload files to get a `file_id` - Create workflows referencing uploaded files with operations (compress, thumbnail, image_watermark, text_watermark, merge, archive, convert, custom_luma, audio_overlay, audio_watermark) - Poll status, stream SSE events, or receive webhook callbacks - Download results per operation output **Response envelope:** All mutation and query endpoints return `{ success: true, data: {...} }` on success and `{ success: false, error: \"...\", details: [...] }` on failure. Exceptions: `GET /api/operations/schema` returns raw JSON (per-tier private caching with ETag revalidation per ADR-0002 + I3), health probes return flat objects, and `POST /api/contact` returns 204 with no body. **Availability metadata.** This spec uses the `x-availability` vendor extension as **decorative documentation only**. Per [ADR-0001](../docs/decisions/0001-contract-first-availability.md) §1.5, the runtime endpoint `GET /api/operations/schema` (ticket I3) is the authoritative source; the sidecar `availability.json` (ticket I3b) is the authoritative companion (generated, never hand-edited; CI cross-checks runtime ⇄ sidecar). SDKs MUST NOT depend on `x-availability` reaching generated code — code-generators that surface vendor extensions may emit it as documentation, but consumers read availability from the runtime endpoint, not from the generated bindings. The 5-value vocabulary (`stable | beta | experimental | planned | deprecated`) is defined in the `AvailabilityValue` schema. See `schemas/FORMAT.md` §Availability Taxonomy for the operational rules (parser obligation: absent = stable; per-enum-value granularity is the `per_value_availability` primitive landed via ticket I17). **Free-text string fields: `x-string-vocabulary` (ticket [`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field with no `enum` that names example values says, as data, what a client may do with them (the same marker is used in the AsyncAPI document): - `open` — a vocabulary that grows. Each published value keeps its meaning, the SET is not closed: switch on the values you know and handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`). - `advisory` — explanatory text. Display or log it; **never switch on it** (e.g. `SseWorkflowTerminalData.reason`). - `none` — not a vocabulary at all (an expression or an identifier, e.g. `OptionSchema.pattern`). A field whose description hedges with \"common values\" or \"free-form\" must carry the marker; a test enforces it. **Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).** Error responses + paused/blocked workflow statuses carry a localised human-readable `message` alongside a stable, never-localised `message_key`. Machine-readable fields (`error`, enum values, status codes) stay canonical English. - **Currently committed locales:** `en-GB` only (per ticket [`4GKyuYo6`](https://trello.com/c/4GKyuYo6)). The I26 carrier shape (`Accept-Language` + `Content-Language` + `Vary` headers + `locale` envelope field + `message_key` + `message_params`) is stable and exercised; the **catalog** of translated `message` strings is en-GB-only at runtime today. Additional locales (e.g. `pt-PT`) will be advertised by name when their catalogs ship — the request/response carrier shape does NOT change when a new locale lands. Treat unrequested locales as \"machine-code + `message_key` path is committed; localised `message` prose is not\" until this prose enumerates them by name. - **Request:** `Accept-Language` header per RFC 9110 §12.5.4 (q-value negotiation supported). The server selects the best-match locale from its supported list; falls back to `en-GB` when no match — which, until additional catalogs land, is every non-`en-GB` `Accept-Language`. - **Response:** `Content-Language: <locale>` echo on every localised response; `Vary: Accept-Language` on every response (CDN/cache correctness — different `Accept-Language` requests produce different responses). `Vary` is emitted unconditionally so the header contract does not flip when a second locale ships. - **Fallback locale:** `en-GB` (also the canonical locale for `message_key` translations and English `message` prose). - **SDK guidance:** switch on `error` (machine code) for typed error branches; surface `message_key` to client-side i18n catalogs (SDK companion work tracked at X19, cross-repo); display `message` for end-user UI; **never parse `message` for control flow** — it changes per locale. Carrier shape lives on `ErrorEnvelope` (envelope-level optional `message_key` + `message` + `locale` + `message_params`) and `ValidationErrorEnvelope` (also per-`details[]` entry). Existing 402 / 403 / 422 envelopes (`BalanceExhaustedResponse`, `FeatureNotAvailableResponse`, `FeatureTierRestrictedResponse`, `WorkflowPausedDetail`) inherit the convention. **Upload thresholds (per tickets [u0ar7Yye](https://trello.com/c/u0ar7Yye) + [58nBQLWQ](https://trello.com/c/58nBQLWQ)).** Canonical upload constants (single-shot cap, multipart chunk size, multipart concurrency default, multipart first-chunk size) live on the `UploadThresholds` schema with `const:`-pinned values. SDK generators emit these as typed binding constants so frontend / API / SDKs reference one source of truth instead of hardcoding magic numbers. A runtime `GET /api/uploads/limits` endpoint for dynamic discovery (per-tier / per-environment overrides) is a deferred follow-up.
6
6
  *
7
- * The version of the OpenAPI document: 2.224.0
7
+ * The version of the OpenAPI document: 2.227.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -9,7 +9,7 @@ export const audioToVideoMetadata = {
9
9
  short_form: {
10
10
  availability: 'planned',
11
11
  constraints: {
12
- max_input_duration: 'PT11M35S',
12
+ max_input_duration: 'PT29M43S',
13
13
  },
14
14
  },
15
15
  long_form: {
@@ -315,6 +315,10 @@ export interface CompressVideoOptions {
315
315
  trim_end?: number;
316
316
  speed?: number;
317
317
  }
318
+ export interface CompressDocumentPdfOptions {
319
+ quality?: number;
320
+ max_image_dimension?: number;
321
+ }
318
322
  export interface CompressDocumentOfficeOptions {
319
323
  quality?: number;
320
324
  strip_macros?: boolean;
@@ -396,6 +396,20 @@ export const compressMetadata = {
396
396
  },
397
397
  per_input_options: {},
398
398
  },
399
+ document_pdf: {
400
+ availability: 'planned',
401
+ processing_class: {},
402
+ per_mime_availability: {},
403
+ options: {
404
+ quality: {
405
+ per_value_availability: {},
406
+ },
407
+ max_image_dimension: {
408
+ per_value_availability: {},
409
+ },
410
+ },
411
+ per_input_options: {},
412
+ },
399
413
  document_office: {
400
414
  processing_class: {},
401
415
  per_mime_availability: {},
@@ -1,6 +1,6 @@
1
1
  // Auto-generated from split.yaml -- do not edit
2
2
  export const splitMetadata = {
3
- availability: 'beta',
3
+ availability: 'stable',
4
4
  sole_op: true,
5
5
  features: {
6
6
  silence_mode_audio: {
@@ -23,7 +23,7 @@ export const splitMetadata = {
23
23
  per_input_options: {},
24
24
  },
25
25
  document_pdf: {
26
- availability: 'beta',
26
+ availability: 'stable',
27
27
  processing_class: {},
28
28
  per_mime_availability: {},
29
29
  options: {
package/openapi/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  - **Generator:** [openapi-generator-cli](https://openapi-generator.tech/) v7.21.0
11
11
  (Docker image: `openapitools/openapi-generator-cli:v7.21.0`)
12
12
  - **Generator preset:** `typescript-fetch`, models only
13
- - **Files:** 275
13
+ - **Files:** 276
14
14
 
15
15
  ## Contents
16
16
 
package/openapi/api.yaml CHANGED
@@ -103,7 +103,7 @@ info:
103
103
  of truth instead of hardcoding magic numbers. A runtime
104
104
  `GET /api/uploads/limits` endpoint for dynamic discovery
105
105
  (per-tier / per-environment overrides) is a deferred follow-up.
106
- version: 2.224.0
106
+ version: 2.227.0
107
107
  contact:
108
108
  name: API Support
109
109
 
@@ -1228,11 +1228,21 @@ paths:
1228
1228
  - `probe_not_ready` → `UploadProbeNotReadyResponse`: the probe
1229
1229
  has not landed YET. **Retry** (`Retry-After` when present).
1230
1230
  - `probe_not_applicable` → `UploadProbeNotApplicableResponse`:
1231
- this upload's type is never probed (e.g. an image, whose
1232
- metadata is read inline at upload). **Terminal — do not
1231
+ this upload's type is never probed. **Terminal — do not
1233
1232
  retry**; no result will ever exist.
1233
+
1234
+ **Which uploads are probed:** every `video/*`, every `audio/*`,
1235
+ and the documents PDF, EPUB, DOCX, XLSX, PPTX, ODT, ODS, ODP.
1236
+ **Images are never probed** (their metadata is read inline at
1237
+ upload), so for an image NO answer will ever become a result:
1238
+ `probe_not_applicable`, or the transitional arm below, are both
1239
+ final. A client that knows it uploaded an image stops at the
1240
+ first 422; the transitional arm's "retry with a ceiling" is for a
1241
+ client that cannot tell which case it is in.
1234
1242
  - `feature_not_available` → `FeatureNotAvailableResponse`
1235
- with `violations[].availability: planned`:
1243
+ with `violations[].availability: planned` (the API sends
1244
+ `planned` on this arm; the shared schema does not constrain it,
1245
+ and the arm is removed once the typed arms ship):
1236
1246
  **TRANSITIONAL.** What the server sends today for BOTH
1237
1247
  causes above. It predates this endpoint's move to `beta`
1238
1248
  and does NOT mean the endpoint is unavailable. Retry it
@@ -2084,6 +2094,27 @@ paths:
2084
2094
  Caller resolves by switching to `re_encode_mode: auto`
2085
2095
  or `always`. The compatibility-probe algorithm is
2086
2096
  server-side and deliberately opaque per plan v5 §F8.2.
2097
+ - GIF too long (ticket `zfFnNYRY`, hub decision 715). A
2098
+ `convert` of video with `output_format: gif` whose KEPT window
2099
+ (input duration minus `trim_start` and `trim_end`) exceeds the
2100
+ option's `per_value_constraints.gif.max_kept_duration` (`PT10S`).
2101
+ `ValidationErrorEnvelope` with `error: "GIF_TOO_LONG"`; one
2102
+ `details[]` entry `{operation: "convert", option:
2103
+ "output_format", field: "kept_duration", message: "..."}`. The
2104
+ message steers: trim to 10 s, or choose `mp4` / `webm`. **The
2105
+ API waits for the upload probe** for a video->GIF convert whose
2106
+ source is an `upload`, for EVERY caller, signed in or not (owner
2107
+ decision 734): until the
2108
+ duration is known the create is answered `probe_pending` (retry
2109
+ it); after `video.probe_wait_bound_seconds` from the upload
2110
+ (`schemas/anonymous-policy.yaml`), or once the probe lands
2111
+ `ok` without a duration or `missing_metadata`, it proceeds and
2112
+ the worker enforces the same limit. A probe that lands `corrupt` or `unsupported_codec`
2113
+ keeps its terminal handling (surface it; do not retry), as
2114
+ `ProbePendingResponse` describes. Same `ProbePendingResponse` shape (`job_ref`,
2115
+ `Retry-After`). A source with no upload probe (`job_output`,
2116
+ `external_import`, `connection`) is not waited on: it is admitted
2117
+ and the worker enforces the limit.
2087
2118
  - Inputs not concat-uniform (ticket `MjzzPCWt`). Returned for a
2088
2119
  job that routes to a processing class declaring
2089
2120
  `input_uniformity` (today `merge.video.long_form_re_encode`,
@@ -2136,7 +2167,11 @@ paths:
2136
2167
  `ProcessingClassExceedsBandResponse` (`violations[]`).
2137
2168
  - `probe_pending` → `ProbePendingResponse` (`job_ref`, no
2138
2169
  `violations[]`/`details[]`), emitted when the probe-pending
2139
- gate is on and a job's upload has not yet been probed.
2170
+ gate is on and a job's upload has not yet been probed. The gate
2171
+ is on for a guest's video create, and for EVERY caller's
2172
+ video->GIF `convert` of an `upload` source (owner decision 734,
2173
+ so `GIF_TOO_LONG` is decided at create); in both cases only until
2174
+ `video.probe_wait_bound_seconds` after the upload.
2140
2175
 
2141
2176
  The prior 422 shape is otherwise preserved unchanged — the
2142
2177
  `details[]` / `violations[]` / `job_ref` required-field shapes
@@ -2269,6 +2304,17 @@ paths:
2269
2304
  actual: 54000
2270
2305
  ceiling: 43200
2271
2306
  required_tier: "enterprise"
2307
+ gif_too_long:
2308
+ summary: convert video -> gif with a kept window over 10 s (zfFnNYRY)
2309
+ value:
2310
+ success: false
2311
+ error_type: "validation_error"
2312
+ error: "GIF_TOO_LONG"
2313
+ details:
2314
+ - operation: "convert"
2315
+ option: "output_format"
2316
+ field: "kept_duration"
2317
+ message: "A GIF can be at most 10 seconds; this keeps 42 seconds. Trim it to 10 seconds, or choose mp4 or webm."
2272
2318
  inputs_not_concat_uniform:
2273
2319
  summary: merge.video long_form_re_encode with one input lacking audio (MjzzPCWt)
2274
2320
  value:
@@ -2940,11 +2986,22 @@ paths:
2940
2986
  if added later it will be a separate, explicitly-specified feature.
2941
2987
 
2942
2988
  **`id:` field (SSE event id):** emitted **only on operation frames**
2943
- (`operation.progress` / `operation.completed` / `operation.failed`),
2944
- where it carries the underlying stream's event id. **Transition frames**
2945
- (`job.completed` / `job.failed`, `workflow.*`) carry **no `id:`**.
2946
- Because there is no `Last-Event-ID` resume, any emitted `id:` is
2947
- informational only — clients cannot use it to resume a stream.
2989
+ (`operation.progress` / `operation.completed` / `operation.failed`)
2990
+ read from a JOB's event stream (one stream per job, shared by that
2991
+ job's operations) — NOT on the long-form fan-out's
2992
+ public-row frames, which carry none (§"LONG-FORM FAN-OUT" below). Where
2993
+ a frame has an `id:`, it is **that frame's own** event id in the
2994
+ underlying stream — never another entry's. So within ONE job's stream
2995
+ every `id:` is **distinct** and the ids **increase** in the order its
2996
+ frames are sent (a replayed history keeps the ids its events had). Ids
2997
+ come from SEPARATE per-job streams, so across jobs they are neither
2998
+ ordered nor guaranteed distinct. An operation belongs to exactly one
2999
+ job, so the identity of a frame is **`operation_id` + `id:`**.
3000
+ **Transition frames** (`job.completed` / `job.failed`, `workflow.*`)
3001
+ carry **no `id:`**. Because there is no `Last-Event-ID` resume, an
3002
+ emitted `id:` is still informational — a client may dedupe frames
3003
+ across reconnects by `operation_id` + `id:`, but cannot use it to
3004
+ resume a stream.
2948
3005
 
2949
3006
  **Framing vs payload:** the `Sse*Data` component schemas describe only
2950
3007
  the `data:` JSON payload of each event. The SSE envelope framing itself
@@ -10756,7 +10813,7 @@ components:
10756
10813
  - audio_to_video: Produce a video from an audio input plus an OPTIONAL still image overlay. Multi-input role-based with the first OPTIONAL role on the contract (`role: base` audio required, `role: overlay` image 0..1 — see `per_role_cardinality`). When overlay is omitted, the video uses a solid background colour. `availability: planned` — WITHDRAWN 2026-09-15: the measured encode cost (a per-second rate PLUS A FIXED COST) puts the advertised PT2H at more than twice the 900 s platform maximum (dropping the fixed cost moves the in-flight boundary by tens of seconds; figures in the CHANGELOG entry for 2.203.0, derived and tested from the divergence register). Returns `feature_not_available` (422) at workflow-create. An already-accepted workflow is not cancelled (availability is checked at create) and fails only when its output duration exceeds the derived ceiling (divergence register `evidence.derived.ceiling_s`) ON THE INPUT THE RATE WAS MEASURED WITH (a real photographic 1080p still plus looped real audio), where the measured rate plus the fixed cost reaches the worker's 600 s cap — the 60 s and 120 s measured cells both COMPLETED. The driver is the STILL'S RESOLUTION, not duration alone: a 4K still is roughly 4x the rate (unmeasured), which would put the boundary near a quarter of that, and this schema places no constraint on the overlay's resolution. Per ticket [`SlluxMBN`](https://trello.com/c/SlluxMBN) + ADR-0015 (introduces `per_role_cardinality` vocab).
10757
10814
  - video_watermark: Apply an image overlay onto a base video via FFmpeg's `overlay` filter. Multi-input role-based (`role: base` video + `role: overlay` image, exactly one of each per `per_role_cardinality`). Re-encode required; audio stream-copy passthrough. Distinct from `image_watermark` (pure-Rust/image-only). `availability: planned` — WITHDRAWN 2026-09-15, operation AND `short_form`: a real 1080p source at the advertised PT5M / 500 MB was killed just past the worker's 600 s encode cap, no output. Returns `feature_not_available` (422) at workflow-create; an already-accepted workflow is not cancelled and fails only if it exceeds that cap; the kill is ONE measured point and nothing measured says where the boundary is. `long_form` and `multi_overlay_stack` were already `planned`. Per ticket [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) + ADR-0013.
10758
10815
  - video_text_watermark: Render a text overlay onto a base video via FFmpeg's `drawtext` filter. Single-input — text and styling in options. Same `watermark_mode` (single/tiled), anchor + margin vocab as `text_watermark`. Re-encode required; audio stream-copy passthrough. `availability: planned` — WITHDRAWN 2026-09-15, operation AND `short_form`: a real 1080p source at the advertised PT5M was killed just past the worker's 600 s encode cap. Returns `feature_not_available` (422) at workflow-create. ⚠️ This entry previously read "until Lambda ships", which was wrong in a way that mattered: the worker SHIPPED and runs — it is the CEILING that cannot be served. Per ticket [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) + ADR-0013.
10759
- - split: Fan one input file into N outputs across GIF / PDF / audio / video MIME families. Single-input per-mime-group catalog (mirrors merge/convert): GIF uses `frame_range` (REQUIRED) + `output_format`; PDF uses `page_range` OR `page_groups` (mutually exclusive); audio + video use a `mode` discriminator (interval/count/cut_points) + numeric-seconds wire format + `precision` flag (fast/exact). 200-output hard cap per ADR-0009 §D5 with per-mode preflight math; output naming `output-001..output-200`. Long-form video routes to a separate `split-video-fargate` worker via `processing_class`. `availability: beta` for the `audio` and `video` mime_groups (workers live on staging — shape-stable + opt-in, MUST NOT 422); video activates BOTH classes (`video.processing_class.short_form: beta` AND `long_form: beta` — `split-video-fargate` deployed + wired on staging; it stays `beta` until a PRODUCTION `customer_path` run is recorded in `availability/prod-verification-log.yaml` per [`rcwvUKhI`](https://trello.com/c/rcwvUKhI)). The `image_gif` mime_group is `stable` and `document_pdf` is `beta` (2026-10-01). Per ticket [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) + ADR-0014.
10816
+ - split: Fan one input file into N outputs across GIF / PDF / audio / video MIME families. Single-input per-mime-group catalog (mirrors merge/convert): GIF uses `frame_range` (REQUIRED) + `output_format`; PDF uses `page_range` OR `page_groups` (mutually exclusive); audio + video use a `mode` discriminator (interval/count/cut_points) + numeric-seconds wire format + `precision` flag (fast/exact). 200-output hard cap per ADR-0009 §D5 with per-mode preflight math; output naming `output-001..output-200`. Long-form video routes to a separate `split-video-fargate` worker via `processing_class`. `availability: beta` for the `audio` and `video` mime_groups (workers live on staging — shape-stable + opt-in, MUST NOT 422); video activates BOTH classes (`video.processing_class.short_form: beta` AND `long_form: beta` — `split-video-fargate` deployed + wired on staging; it stays `beta` until a PRODUCTION `customer_path` run is recorded in `availability/prod-verification-log.yaml` per [`rcwvUKhI`](https://trello.com/c/rcwvUKhI)). The operation, the `image_gif` mime_group and `document_pdf` are `stable` (prod-proven, owner decision 729, 2026-10-08); `audio` and `video` stay `beta` by their own tags. Per ticket [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) + ADR-0014.
10760
10817
  - passthrough: Inert lossless source operation. A single-input source job whose SOLE operation is `passthrough` emits its source bytes UNCHANGED — no compression, no Lambda. The API self-completes the job at publish (terminal output = the upload `{bucket, key}` unchanged). Its purpose is to feed an uploaded file into a multi-input operation LOSSLESSLY: because `JobInputV2.source` is narrowed to exclude upload-direct, an upload that must enter a `merge` / `archive` / `image_watermark` op enters via a `passthrough` source job referenced downstream by `{type: job_output, from: <id>}` — preserving billing / DAG / lineage. Distinct from `operations: []` (which keeps its implicit-compress meaning on a single-input upload job); `passthrough` is the EXPLICIT lossless path via the "non-empty `operations[]` without `compress` = compression opt-out" rule. Media-agnostic; no options. `availability: beta` — activated (the inputs[]-narrowing + passthrough self-complete mechanism is deployed API-side); workflow-create accepts `passthrough` source jobs and MUST NOT return `feature_not_available`. **Never published to SNS** — deliberately absent from the AsyncAPI routing enums (API self-completes; no `ops-passthrough` queue). Per ticket [`4som89Uh`](https://trello.com/c/4som89Uh) + ADR-0004 (planned→beta flip).
10761
10818
 
10762
10819
  - transform: Geometric/orientation transform — v1 = rotate (0/90/180/270) + flip (none/horizontal/vertical/both), ADR-0026. Single-input; `produces: same_as_input` (geometry preserves format/container). Chainable (NOT sole_op); canonical single-job chain order is `transform → convert → compress → thumbnail` (geometry before encode/derive so downstream width/height/fit refer to the final frame). Media groups: image (still jpeg/png/webp + animated `image_gif`), video (mp4/webm), document (PDF page-rotate only — no flip); audio not supported. ALL groups `availability: planned` (epic `fhiWebI0`) — workflow-create returns `feature_not_available` (422) until per-media Lambdas ship. A no-op transform (`rotate: 0` + `flip: none`) is rejected as `invalid_options`. The public operation type is `transform`; the API resolves an internal per-media SNS routing sub-type (`transform_image` / `transform_video` / `transform_document`) — those sub-types are routing-only and are NOT part of this public enum. Per ADR-0026.
@@ -12128,15 +12185,22 @@ components:
12128
12185
  enum:
12129
12186
  - processed_base
12130
12187
  - original
12131
- default: processed_base
12132
12188
  description: |
12133
12189
  For **derived artifacts** (`thumbnail`, `split`): which canonical
12134
12190
  composition node this artifact branches from. Symbolic-only for
12135
12191
  v1 (no per-operation references — caller-visible op ids do not
12136
- exist at submit time).
12137
- - `processed_base` (default): the fully-processed base —
12138
- post-everything, so the artifact carries the watermark + encode.
12139
- - `original`: the untouched source file.
12192
+ exist at submit time). **The default depends on the operation**
12193
+ (owner decision 720, 2026-10-08): `thumbnail` defaults to
12194
+ `original`; `split` defaults to `processed_base`.
12195
+ - `processed_base`: the fully-processed base — post-everything,
12196
+ so the artifact carries the watermark + encode, and it runs
12197
+ after the chain.
12198
+ - `original`: the untouched source file. The artifact runs
12199
+ ALONGSIDE the chain (it does not wait for it). Each operation is
12200
+ judged at create against its own ceilings on its own input: a
12201
+ `base: original` thumbnail against the thumbnail ceilings on the
12202
+ original upload. The job still completes when every operation
12203
+ finishes and fails if any fails.
12140
12204
  Ignored for chain operations (compress, convert, watermark, merge,
12141
12205
  audio). The resolved branch point is echoed as
12142
12206
  `CompositionPlanOperation.derived_from` (a `node_id`) in
@@ -12520,6 +12584,17 @@ components:
12520
12584
  - `input_size_exceeds_short_form` /
12521
12585
  `input_duration_exceeds_short_form`: input-driven escalation
12522
12586
  to `long_form`.
12587
+ - `resolution_band_exceeds_short_form`: escalation to `long_form` because
12588
+ the input's resolution band is one `short_form` does not serve
12589
+ (`processing_class.short_form.resolution_bands`, a band marked not
12590
+ served), whatever its duration or size. A band that IS served but
12591
+ whose duration or size is exceeded still reports
12592
+ `input_duration_exceeds_short_form` / `input_size_exceeds_short_form`.
12593
+ Emitted only once an operation pairs banded `short_form` with an
12594
+ enterable `long_form` (api `W6Y0dbg7`). Deliberately NOT spelled
12595
+ `resolution_band_not_served`: that is the REJECT reason
12596
+ (`ProcessingClassRejectReason`, no long_form to escalate to), and the
12597
+ two enums are kept disjoint.
12523
12598
  - `merge_re_encode_long_form` / `requires_reencode`: merge
12524
12599
  inputs require re-encoding so concat-fast-path is
12525
12600
  unavailable; `requires_reencode` cross-references ticket
@@ -12614,6 +12689,7 @@ components:
12614
12689
  - within_short_form_limits
12615
12690
  - input_size_exceeds_short_form
12616
12691
  - input_duration_exceeds_short_form
12692
+ - resolution_band_exceeds_short_form
12617
12693
  - merge_re_encode_long_form
12618
12694
  - requires_reencode
12619
12695
  - tier_policy
@@ -12625,6 +12701,15 @@ components:
12625
12701
  Per-job entry in the workflow's `processing_plan`. Server
12626
12702
  emits one entry per job in the workflow (including jobs that
12627
12703
  run on `short_form`).
12704
+ # A band-driven escalation names the band it escalated on (codex #687),
12705
+ # as the reject envelope does for resolution_band_not_served.
12706
+ if:
12707
+ properties:
12708
+ reason:
12709
+ const: resolution_band_exceeds_short_form
12710
+ required: [reason]
12711
+ then:
12712
+ required: [resolution_band]
12628
12713
  required:
12629
12714
  - job_id
12630
12715
  - processing_class
@@ -14426,7 +14511,9 @@ components:
14426
14511
  `decode_failed` (input unreadable/corrupt),
14427
14512
  `output_too_large` (output exceeded the size limit; NOT for a
14428
14513
  same-format `compress`, which returns the original with
14429
- `already_optimal` instead — owner decision 645(4)),
14514
+ `already_optimal` instead — owner decision 645(4) — but only when
14515
+ the original satisfies EVERY option the request set; see
14516
+ `OperationMetrics.already_optimal` in the AsyncAPI contract),
14430
14517
  `missing_source` (source not found — fail-fast),
14431
14518
  `invalid_key` (storage key invalid),
14432
14519
  `processing_failed` (non-specific processing failure),
@@ -14532,7 +14619,11 @@ components:
14532
14619
  resolved `same_format` route (`output_format` original, absent, or
14533
14620
  equal to the input's format; not the format-change facade, where
14534
14621
  the original is not what was asked for). A same-format compress
14535
- that cannot shrink the file returns this, never `output_too_large`.
14622
+ that cannot shrink the file returns this, not `output_too_large` —
14623
+ but ONLY when the original satisfies EVERY option the request set
14624
+ (e.g. not when it asks for a trim, a different channel count, sample
14625
+ rate or bitrate, or new image dimensions); otherwise the failure is
14626
+ `output_too_large` (CvaZWNzO).
14536
14627
  ⚠️ **Today this holds for SHORT-FORM compress only.** Long-form
14537
14628
  compress still fails `output_too_large` until lambdas ships its
14538
14629
  long-form copy path; do not promise "already optimised" or "no
@@ -16848,6 +16939,24 @@ components:
16848
16939
  by `make check-per-value-availability` (CI guard, ticket
16849
16940
  [I17 `0gwtwCav`](https://trello.com/c/0gwtwCav)). Runtime
16850
16941
  emission lands with I3.
16942
+ per_value_constraints:
16943
+ type: object
16944
+ description: |
16945
+ Per-enum-value limits, only meaningful when `type: enum`. Keys
16946
+ MUST be a subset of `values[]`; each entry holds limits that
16947
+ apply only when the request selects that value. Today one
16948
+ constraint: `max_kept_duration` (ISO 8601) — the input's
16949
+ duration minus `trim_start` and `trim_end` may not exceed it;
16950
+ refused at create with `GIF_TOO_LONG` for `convert` video
16951
+ `output_format: gif` (card `zfFnNYRY`). See FORMAT.md
16952
+ §`per_value_constraints`.
16953
+ additionalProperties:
16954
+ type: object
16955
+ additionalProperties: false
16956
+ properties:
16957
+ max_kept_duration:
16958
+ type: string
16959
+ format: duration
16851
16960
  per_value_depends_on:
16852
16961
  type: object
16853
16962
  description: |