@giveitsmaller/contracts 0.34.0 → 0.36.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 (414) hide show
  1. package/accepted-options/accepted-options.json +58 -1
  2. package/accepted-options/image-output-routes.json +41 -10
  3. package/availability/availability.json +218 -69
  4. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  5. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  6. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  7. package/dist/openapi/models/AccountLimits.js +1 -1
  8. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  9. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  10. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  11. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  12. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  13. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  14. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  15. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  16. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  17. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  18. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  19. package/dist/openapi/models/AuthErrorType.js +1 -1
  20. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  21. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  22. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  23. package/dist/openapi/models/AvailabilityValue.js +1 -1
  24. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  25. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  26. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  27. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  28. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  29. package/dist/openapi/models/CallbackEventType.js +1 -1
  30. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  31. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  32. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  33. package/dist/openapi/models/CompositionPlan.js +1 -1
  34. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  35. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  36. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  37. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  38. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  39. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  40. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  41. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  42. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  43. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  44. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  45. package/dist/openapi/models/ConnectionSource.js +1 -1
  46. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  47. package/dist/openapi/models/ContactRequest.js +1 -1
  48. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  49. package/dist/openapi/models/ContactSubject.js +1 -1
  50. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  51. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  52. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  53. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  54. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  55. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  56. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  57. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  58. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  59. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  60. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  61. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  62. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  63. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  64. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  65. package/dist/openapi/models/CreditTransaction.js +1 -1
  66. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  67. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  68. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  69. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  70. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  71. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  72. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  73. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  74. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  75. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  76. package/dist/openapi/models/Delivery.d.ts +1 -1
  77. package/dist/openapi/models/Delivery.js +1 -1
  78. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  79. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  80. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  81. package/dist/openapi/models/DeliveryPlan.js +1 -1
  82. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  83. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  84. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  85. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  86. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  87. package/dist/openapi/models/DeliverySelection.js +1 -1
  88. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  89. package/dist/openapi/models/DownloadBundle.js +1 -1
  90. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  91. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  92. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  93. package/dist/openapi/models/EndpointProjection.js +1 -1
  94. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  95. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  96. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  97. package/dist/openapi/models/EstimateQuality.js +1 -1
  98. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  99. package/dist/openapi/models/EstimateRange.js +1 -1
  100. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  101. package/dist/openapi/models/ExternalDestination.js +1 -1
  102. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  103. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  104. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  105. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  106. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  107. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  108. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  109. package/dist/openapi/models/ExternalImportToken.js +1 -1
  110. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  111. package/dist/openapi/models/ExternalSource.js +1 -1
  112. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  113. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  114. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  115. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  116. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  117. package/dist/openapi/models/FeatureViolation.js +1 -1
  118. package/dist/openapi/models/ForgotPasswordRequest.d.ts +1 -1
  119. package/dist/openapi/models/ForgotPasswordRequest.js +1 -1
  120. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  121. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  122. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  123. package/dist/openapi/models/JobDefinition.js +1 -1
  124. package/dist/openapi/models/JobDownload.d.ts +1 -1
  125. package/dist/openapi/models/JobDownload.js +1 -1
  126. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  127. package/dist/openapi/models/JobInputV2.js +1 -1
  128. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  129. package/dist/openapi/models/JobMediaClass.js +1 -1
  130. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  131. package/dist/openapi/models/JobOutputSource.js +1 -1
  132. package/dist/openapi/models/JobResponse.d.ts +1 -1
  133. package/dist/openapi/models/JobResponse.js +1 -1
  134. package/dist/openapi/models/JobStatus.d.ts +1 -1
  135. package/dist/openapi/models/JobStatus.js +1 -1
  136. package/dist/openapi/models/JobType.d.ts +1 -1
  137. package/dist/openapi/models/JobType.js +1 -1
  138. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  139. package/dist/openapi/models/LivenessResponse.js +1 -1
  140. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  141. package/dist/openapi/models/LoginUser200Response.js +1 -1
  142. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  143. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  144. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  145. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  146. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  147. package/dist/openapi/models/LoginUserRequest.js +1 -1
  148. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  149. package/dist/openapi/models/MetadataResponse.js +1 -1
  150. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  151. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  152. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  153. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  154. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  155. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  156. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  157. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  158. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  159. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  160. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  161. package/dist/openapi/models/MultiInputSource.js +1 -1
  162. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  163. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  164. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  165. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  166. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  167. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  168. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  169. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  170. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  171. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  172. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  173. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  174. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  175. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  176. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  177. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  178. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  179. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  180. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  181. package/dist/openapi/models/MultipartPartListing.js +1 -1
  182. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  183. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  184. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  185. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  186. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  187. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  188. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  189. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  190. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  191. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  192. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  193. package/dist/openapi/models/OperationDefinition.js +1 -1
  194. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  195. package/dist/openapi/models/OperationDownload.js +1 -1
  196. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  197. package/dist/openapi/models/OperationInputModel.js +1 -1
  198. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  199. package/dist/openapi/models/OperationResponse.js +1 -1
  200. package/dist/openapi/models/OperationResult.d.ts +1 -1
  201. package/dist/openapi/models/OperationResult.js +1 -1
  202. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  203. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  204. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  205. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  206. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  207. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  208. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  209. package/dist/openapi/models/OperationStatus.js +1 -1
  210. package/dist/openapi/models/OperationType.d.ts +1 -1
  211. package/dist/openapi/models/OperationType.js +1 -1
  212. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  213. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  214. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  215. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  216. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  217. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  218. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  219. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  220. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  221. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  222. package/dist/openapi/models/OptionSchema.d.ts +15 -1
  223. package/dist/openapi/models/OptionSchema.js +3 -1
  224. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  225. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  226. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  227. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  228. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  229. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  230. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  231. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  232. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  233. package/dist/openapi/models/ProcessingClass.js +1 -1
  234. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  235. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  236. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  237. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  238. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  239. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  240. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  241. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  242. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  243. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  244. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  245. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  246. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  247. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  248. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  249. package/dist/openapi/models/ProcessingPlan.js +1 -1
  250. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  251. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  252. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  253. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  254. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  255. package/dist/openapi/models/ReadinessResponse.js +1 -1
  256. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  257. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  258. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  259. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  260. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  261. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  262. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  263. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  264. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  265. package/dist/openapi/models/RetryResponse.js +1 -1
  266. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  267. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  268. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  269. package/dist/openapi/models/SseCompletionBase.js +1 -1
  270. package/dist/openapi/models/SseEventType.d.ts +1 -1
  271. package/dist/openapi/models/SseEventType.js +1 -1
  272. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  273. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  274. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  275. package/dist/openapi/models/SseJobFailedData.js +1 -1
  276. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  277. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  278. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  279. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  280. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  281. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  282. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  283. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  284. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  285. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  286. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  287. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  288. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  289. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  290. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  291. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  292. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  293. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  294. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  295. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  296. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  297. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  298. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  299. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  300. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  301. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  302. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  303. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  304. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  305. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  306. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  307. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  308. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  309. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  310. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  311. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  312. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  313. package/dist/openapi/models/UploadFile403Response.js +1 -1
  314. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  315. package/dist/openapi/models/UploadFile422Response.js +1 -1
  316. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  317. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  318. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  319. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  320. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  321. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  322. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  323. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  324. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  325. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  326. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  327. package/dist/openapi/models/UploadResponse.js +1 -1
  328. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  329. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  330. package/dist/openapi/models/UploadSource.d.ts +1 -1
  331. package/dist/openapi/models/UploadSource.js +1 -1
  332. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  333. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  334. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  335. package/dist/openapi/models/UploadThresholds.js +1 -1
  336. package/dist/openapi/models/UserTier.d.ts +1 -1
  337. package/dist/openapi/models/UserTier.js +1 -1
  338. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  339. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  340. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  341. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  342. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  343. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  344. package/dist/openapi/models/WarningType.d.ts +1 -1
  345. package/dist/openapi/models/WarningType.js +1 -1
  346. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  347. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  348. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  349. package/dist/openapi/models/WebhookPayload.js +1 -1
  350. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  351. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  352. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  353. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  354. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  355. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  356. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  357. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  358. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  359. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  360. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  361. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  362. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  363. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  364. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  365. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  366. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  367. package/dist/openapi/models/WorkflowEdge.js +1 -1
  368. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  369. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  370. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  371. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  372. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  373. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  374. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  375. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  376. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  377. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  378. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  379. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  380. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  381. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  382. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  383. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  384. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  385. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  386. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  387. package/dist/openapi/models/WorkflowSource.js +1 -1
  388. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  389. package/dist/openapi/models/WorkflowStatus.js +1 -1
  390. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  391. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  392. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  393. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  394. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  395. package/dist/openapi/models/WorkflowSummary.js +1 -1
  396. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  397. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  398. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  399. package/dist/openapi/models/WorkflowWarning.js +1 -1
  400. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  401. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  402. package/dist/openapi/runtime.d.ts +1 -1
  403. package/dist/openapi/runtime.js +1 -1
  404. package/dist/operations/compress.d.ts +20 -4
  405. package/dist/operations/compress.js +15 -2
  406. package/dist/operations/compress.metadata.js +30 -27
  407. package/dist/operations/convert.d.ts +21 -0
  408. package/dist/operations/convert.js +15 -0
  409. package/dist/operations/convert.metadata.js +25 -0
  410. package/openapi/api.yaml +13 -1
  411. package/operation-capabilities/operation-capabilities.json +28 -1
  412. package/operations/schemas/compress.yaml +217 -118
  413. package/operations/schemas/convert.yaml +89 -2
  414. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "capabilities_version": 116,
2
+ "capabilities_version": 123,
3
3
  "endpoints": {
4
4
  "DELETE /api/auth/api-keys/{apiKeyId}": {
5
5
  "auth": "required",
@@ -930,14 +930,12 @@
930
930
  ]
931
931
  },
932
932
  "trim_end": {
933
- "availability": "planned",
934
- "description": "Trim from end in seconds. Gated `planned` (qZI5EK9j) \u2014 see `trim_start`.",
933
+ "description": "Trim from end in seconds (absent = to the end). Removes this many seconds from the end; with `trim_start` the kept clip is [`trim_start`, input_duration \u2212 `trim_end`]. STABLE \u2014 see `trim_start`.\n",
935
934
  "min": 0,
936
935
  "type": "float"
937
936
  },
938
937
  "trim_start": {
939
- "availability": "planned",
940
- "description": "Trim from beginning in seconds. Gated `planned` (qZI5EK9j): no compression worker implements per-clip trim yet, so the server returns `feature_not_available` rather than accepting and silently ignoring it. Flips to `stable` when a worker lands; to trim today, chain a `split` op.\n",
938
+ "description": "Trim from beginning in seconds (absent = from the start). STABLE (qZI5EK9j) \u2014 the compress-audio worker cuts the clip before encoding (input-side ffmpeg `-ss`/`-t`; lambdas PR #259), SAME FROM-END semantic as compress.video / convert / merge: the kept clip is [`trim_start`, input_duration \u2212 `trim_end`].\n",
941
939
  "min": 0,
942
940
  "type": "float"
943
941
  }
@@ -1127,7 +1125,7 @@
1127
1125
  "logic": "or",
1128
1126
  "width": "set"
1129
1127
  },
1130
- "description": "Resize mode. max = fit within bounds (preserves aspect ratio, no crop), crop/scale = exact dimensions. Applies only when width or height is set, on whichever Output route runs.",
1128
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and NEVER upscaling \u2014 it caps at the source dimensions. This IS the \"no-enlarge\" behaviour (there is no separate `no_enlarge` flag \u2014 the worker has no such key). `crop`/`scale` = exact dimensions (`scale` deliberately enlarges past source). Applies only when width or height is set, on whichever Output route runs.",
1131
1129
  "honored_on": [
1132
1130
  "same_format",
1133
1131
  "format_change"
@@ -1151,15 +1149,10 @@
1151
1149
  },
1152
1150
  "metadata": {
1153
1151
  "default": "all",
1154
- "description": "Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only live behaviour \u2014 the compress worker hardcodes keep_metadata=false). `keep` = preserve metadata \u2014 `planned` (the worker cannot preserve it yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle). Optimiser (same_format) route \u2014 the format-change transcoder has no metadata-preservation control today.",
1152
+ "description": "Metadata handling (optimiser/same_format route). `all` = strip all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). Any other value is rejected as invalid_options.",
1155
1153
  "honored_on": [
1156
1154
  "same_format"
1157
1155
  ],
1158
- "per_value_availability": {
1159
- "keep": {
1160
- "availability": "planned"
1161
- }
1162
- },
1163
1156
  "type": "enum",
1164
1157
  "values": [
1165
1158
  "all",
@@ -1186,7 +1179,7 @@
1186
1179
  "type": "integer"
1187
1180
  },
1188
1181
  "width": {
1189
- "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven image resize engine (Lanczos, shared with thumbnail-images) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1182
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven convert resize engine (Lanczos; the API routes Output resize through the convert worker, BOTH routes \u2014 the compress optimiser has no resize) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1190
1183
  "honored_on": [
1191
1184
  "same_format",
1192
1185
  "format_change"
@@ -1214,6 +1207,23 @@
1214
1207
  "min": 1,
1215
1208
  "type": "integer"
1216
1209
  },
1210
+ "encoding_mode": {
1211
+ "default": "quality",
1212
+ "description": "Compression mode (mirrors compress.video). `quality` = the `quality` slider drives the encode (default, live). `target_size` = `planned` \u2014 hit a byte budget via the worker's encode-measure-binary-search loop (lambdas building; jpeg/webp/avif only). AVIF encodes are slow, so the loop caps iterations. Optimiser (same_format) route.",
1213
+ "honored_on": [
1214
+ "same_format"
1215
+ ],
1216
+ "per_value_availability": {
1217
+ "target_size": {
1218
+ "availability": "planned"
1219
+ }
1220
+ },
1221
+ "type": "enum",
1222
+ "values": [
1223
+ "quality",
1224
+ "target_size"
1225
+ ]
1226
+ },
1217
1227
  "fit": {
1218
1228
  "default": "max",
1219
1229
  "depends_on": {
@@ -1221,7 +1231,7 @@
1221
1231
  "logic": "or",
1222
1232
  "width": "set"
1223
1233
  },
1224
- "description": "Resize mode. max = fit within bounds (preserves aspect ratio, no crop), crop/scale = exact dimensions. Applies only when width or height is set, on whichever Output route runs.",
1234
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and NEVER upscaling \u2014 it caps at the source dimensions. This IS the \"no-enlarge\" behaviour (there is no separate `no_enlarge` flag \u2014 the worker has no such key). `crop`/`scale` = exact dimensions (`scale` deliberately enlarges past source). Applies only when width or height is set, on whichever Output route runs.",
1225
1235
  "honored_on": [
1226
1236
  "same_format",
1227
1237
  "format_change"
@@ -1245,19 +1255,13 @@
1245
1255
  },
1246
1256
  "metadata": {
1247
1257
  "default": "all",
1248
- "description": "Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only live behaviour \u2014 the compress worker hardcodes keep_metadata=false). `keep` = preserve metadata \u2014 `planned` (the worker cannot preserve it yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle). Optimiser (same_format) route \u2014 the format-change transcoder has no metadata-preservation control today.",
1258
+ "description": "Metadata handling. `all` = strip all EXIF/IPTC/XMP (the only supported value). `keep` is NOT offered for AVIF \u2014 ravif re-encodes from pixels and cannot preserve metadata (the worker rejects `keep` as invalid_options).",
1249
1259
  "honored_on": [
1250
1260
  "same_format"
1251
1261
  ],
1252
- "per_value_availability": {
1253
- "keep": {
1254
- "availability": "planned"
1255
- }
1256
- },
1257
1262
  "type": "enum",
1258
1263
  "values": [
1259
- "all",
1260
- "keep"
1264
+ "all"
1261
1265
  ]
1262
1266
  },
1263
1267
  "output_format": {
@@ -1271,7 +1275,10 @@
1271
1275
  },
1272
1276
  "quality": {
1273
1277
  "default": 80,
1274
- "description": "Compression quality (1 = smallest file, 100 = best quality).",
1278
+ "depends_on": {
1279
+ "encoding_mode": "quality"
1280
+ },
1281
+ "description": "Compression quality (1 = smallest file, 100 = best quality). Active in `quality` mode (default); in `target_size` mode the encode-measure loop owns quality, so this option is inactive.",
1275
1282
  "honored_on": [
1276
1283
  "same_format"
1277
1284
  ],
@@ -1279,8 +1286,20 @@
1279
1286
  "min": 1,
1280
1287
  "type": "integer"
1281
1288
  },
1289
+ "target_size_bytes": {
1290
+ "availability": "planned",
1291
+ "depends_on": {
1292
+ "encoding_mode": "target_size"
1293
+ },
1294
+ "description": "Target output size in bytes (min 1024 = 1 KiB). `planned` \u2014 the image encode-measure loop binary-searches quality to land at or under the target; best-effort if the target is unreachable at min quality (the result reports the chosen quality + whether the target was met). Optimiser (same_format) route.",
1295
+ "honored_on": [
1296
+ "same_format"
1297
+ ],
1298
+ "min": 1024,
1299
+ "type": "integer"
1300
+ },
1282
1301
  "width": {
1283
- "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven image resize engine (Lanczos, shared with thumbnail-images) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1302
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven convert resize engine (Lanczos; the API routes Output resize through the convert worker, BOTH routes \u2014 the compress optimiser has no resize) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1284
1303
  "honored_on": [
1285
1304
  "same_format",
1286
1305
  "format_change"
@@ -1297,6 +1316,23 @@
1297
1316
  "image/jpeg"
1298
1317
  ],
1299
1318
  "options": {
1319
+ "encoding_mode": {
1320
+ "default": "quality",
1321
+ "description": "Compression mode (mirrors compress.video). `quality` = the `quality` slider drives the encode (default, live). `target_size` = `planned` \u2014 hit a byte budget via the worker's encode-measure-binary-search loop (lambdas building; jpeg/webp/avif only). Optimiser (same_format) route.",
1322
+ "honored_on": [
1323
+ "same_format"
1324
+ ],
1325
+ "per_value_availability": {
1326
+ "target_size": {
1327
+ "availability": "planned"
1328
+ }
1329
+ },
1330
+ "type": "enum",
1331
+ "values": [
1332
+ "quality",
1333
+ "target_size"
1334
+ ]
1335
+ },
1300
1336
  "fit": {
1301
1337
  "default": "max",
1302
1338
  "depends_on": {
@@ -1304,7 +1340,7 @@
1304
1340
  "logic": "or",
1305
1341
  "width": "set"
1306
1342
  },
1307
- "description": "Resize mode. max = fit within bounds (preserves aspect ratio, no crop), crop/scale = exact dimensions. Applies only when width or height is set, on whichever Output route runs.",
1343
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and NEVER upscaling \u2014 it caps at the source dimensions. This IS the \"no-enlarge\" behaviour (there is no separate `no_enlarge` flag \u2014 the worker has no such key). `crop`/`scale` = exact dimensions (`scale` deliberately enlarges past source). Applies only when width or height is set, on whichever Output route runs.",
1308
1344
  "honored_on": [
1309
1345
  "same_format",
1310
1346
  "format_change"
@@ -1327,9 +1363,11 @@
1327
1363
  "type": "integer"
1328
1364
  },
1329
1365
  "lossless": {
1330
- "availability": "planned",
1331
1366
  "default": false,
1332
- "description": "Encode losslessly (JPEG optimiser path). `planned` \u2014 the worker carries a `lossless` bool the API has never emitted (product-parked: a lossless output can be LARGER than lossy). Optimiser (same_format) route only.",
1367
+ "depends_on": {
1368
+ "encoding_mode": "quality"
1369
+ },
1370
+ "description": "Lossless JPEG re-optimisation (optimiser path): optimises the Huffman tables WITHOUT re-encoding pixels \u2014 bit-preserving on the pixel data, no quality loss (it cannot recover detail a lossy JPEG already lost). STABLE \u2014 the compress-image worker honours the `lossless` bool (un-parked 2026-06-23). Only in `quality` mode \u2014 incompatible with `target_size` (the byte-budget loop is inherently lossy). Optimiser (same_format) route only.",
1333
1371
  "honored_on": [
1334
1372
  "same_format"
1335
1373
  ],
@@ -1337,15 +1375,10 @@
1337
1375
  },
1338
1376
  "metadata": {
1339
1377
  "default": "all",
1340
- "description": "Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only live behaviour \u2014 the compress worker hardcodes keep_metadata=false). `keep` = preserve metadata \u2014 `planned` (the worker cannot preserve it yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle). Optimiser (same_format) route \u2014 the format-change transcoder has no metadata-preservation control today.",
1378
+ "description": "Metadata handling (optimiser/same_format route). `all` = strip all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). Any other value is rejected as invalid_options.",
1341
1379
  "honored_on": [
1342
1380
  "same_format"
1343
1381
  ],
1344
- "per_value_availability": {
1345
- "keep": {
1346
- "availability": "planned"
1347
- }
1348
- },
1349
1382
  "type": "enum",
1350
1383
  "values": [
1351
1384
  "all",
@@ -1371,7 +1404,10 @@
1371
1404
  },
1372
1405
  "quality": {
1373
1406
  "default": 80,
1374
- "description": "Compression quality (1 = smallest file, 100 = best quality).",
1407
+ "depends_on": {
1408
+ "encoding_mode": "quality"
1409
+ },
1410
+ "description": "Compression quality (1 = smallest file, 100 = best quality). Active in `quality` mode (default); in `target_size` mode the encode-measure loop owns quality, so this option is inactive.",
1375
1411
  "honored_on": [
1376
1412
  "same_format"
1377
1413
  ],
@@ -1379,8 +1415,20 @@
1379
1415
  "min": 1,
1380
1416
  "type": "integer"
1381
1417
  },
1418
+ "target_size_bytes": {
1419
+ "availability": "planned",
1420
+ "depends_on": {
1421
+ "encoding_mode": "target_size"
1422
+ },
1423
+ "description": "Target output size in bytes (min 1024 = 1 KiB). `planned` \u2014 the image encode-measure loop binary-searches quality to land at or under the target; best-effort if the target is unreachable at min quality (the result reports the chosen quality + whether the target was met). Optimiser (same_format) route.",
1424
+ "honored_on": [
1425
+ "same_format"
1426
+ ],
1427
+ "min": 1024,
1428
+ "type": "integer"
1429
+ },
1382
1430
  "width": {
1383
- "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven image resize engine (Lanczos, shared with thumbnail-images) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1431
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven convert resize engine (Lanczos; the API routes Output resize through the convert worker, BOTH routes \u2014 the compress optimiser has no resize) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1384
1432
  "honored_on": [
1385
1433
  "same_format",
1386
1434
  "format_change"
@@ -1404,7 +1452,7 @@
1404
1452
  "logic": "or",
1405
1453
  "width": "set"
1406
1454
  },
1407
- "description": "Resize mode. max = fit within bounds (preserves aspect ratio, no crop), crop/scale = exact dimensions. Applies only when width or height is set, on whichever Output route runs.",
1455
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and NEVER upscaling \u2014 it caps at the source dimensions. This IS the \"no-enlarge\" behaviour (there is no separate `no_enlarge` flag \u2014 the worker has no such key). `crop`/`scale` = exact dimensions (`scale` deliberately enlarges past source). Applies only when width or height is set, on whichever Output route runs.",
1408
1456
  "honored_on": [
1409
1457
  "same_format",
1410
1458
  "format_change"
@@ -1437,15 +1485,10 @@
1437
1485
  },
1438
1486
  "metadata": {
1439
1487
  "default": "all",
1440
- "description": "Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only live behaviour \u2014 the compress worker hardcodes keep_metadata=false). `keep` = preserve metadata \u2014 `planned` (the worker cannot preserve it yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle). Optimiser (same_format) route \u2014 the format-change transcoder has no metadata-preservation control today.",
1488
+ "description": "Metadata handling (optimiser/same_format route). `all` = strip all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). Any other value is rejected as invalid_options.",
1441
1489
  "honored_on": [
1442
1490
  "same_format"
1443
1491
  ],
1444
- "per_value_availability": {
1445
- "keep": {
1446
- "availability": "planned"
1447
- }
1448
- },
1449
1492
  "type": "enum",
1450
1493
  "values": [
1451
1494
  "all",
@@ -1482,7 +1525,7 @@
1482
1525
  "type": "integer"
1483
1526
  },
1484
1527
  "width": {
1485
- "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven image resize engine (Lanczos, shared with thumbnail-images) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1528
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven convert resize engine (Lanczos; the API routes Output resize through the convert worker, BOTH routes \u2014 the compress optimiser has no resize) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1486
1529
  "honored_on": [
1487
1530
  "same_format",
1488
1531
  "format_change"
@@ -1500,19 +1543,13 @@
1500
1543
  "options": {
1501
1544
  "metadata": {
1502
1545
  "default": "all",
1503
- "description": "Metadata handling. `all` = strip all metadata (default, live). `keep` = preserve metadata \u2014 `planned` (worker cannot preserve yet). Optimiser (same_format) route.",
1546
+ "description": "Metadata handling. `all` = strip all metadata (the only supported value). `keep` is NOT offered for SVG \u2014 SVGO optimises the markup and cannot preserve a metadata block (the worker rejects `keep` as invalid_options).",
1504
1547
  "honored_on": [
1505
1548
  "same_format"
1506
1549
  ],
1507
- "per_value_availability": {
1508
- "keep": {
1509
- "availability": "planned"
1510
- }
1511
- },
1512
1550
  "type": "enum",
1513
1551
  "values": [
1514
- "all",
1515
- "keep"
1552
+ "all"
1516
1553
  ]
1517
1554
  },
1518
1555
  "output_format": {
@@ -1542,6 +1579,23 @@
1542
1579
  "image/webp"
1543
1580
  ],
1544
1581
  "options": {
1582
+ "encoding_mode": {
1583
+ "default": "quality",
1584
+ "description": "Compression mode (mirrors compress.video). `quality` = the `quality` slider drives the encode (default, live). `target_size` = `planned` \u2014 hit a byte budget via the worker's encode-measure-binary-search loop (lambdas building; jpeg/webp/avif only). Optimiser (same_format) route.",
1585
+ "honored_on": [
1586
+ "same_format"
1587
+ ],
1588
+ "per_value_availability": {
1589
+ "target_size": {
1590
+ "availability": "planned"
1591
+ }
1592
+ },
1593
+ "type": "enum",
1594
+ "values": [
1595
+ "quality",
1596
+ "target_size"
1597
+ ]
1598
+ },
1545
1599
  "fit": {
1546
1600
  "default": "max",
1547
1601
  "depends_on": {
@@ -1549,7 +1603,7 @@
1549
1603
  "logic": "or",
1550
1604
  "width": "set"
1551
1605
  },
1552
- "description": "Resize mode. max = fit within bounds (preserves aspect ratio, no crop), crop/scale = exact dimensions. Applies only when width or height is set, on whichever Output route runs.",
1606
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and NEVER upscaling \u2014 it caps at the source dimensions. This IS the \"no-enlarge\" behaviour (there is no separate `no_enlarge` flag \u2014 the worker has no such key). `crop`/`scale` = exact dimensions (`scale` deliberately enlarges past source). Applies only when width or height is set, on whichever Output route runs.",
1553
1607
  "honored_on": [
1554
1608
  "same_format",
1555
1609
  "format_change"
@@ -1572,9 +1626,11 @@
1572
1626
  "type": "integer"
1573
1627
  },
1574
1628
  "lossless": {
1575
- "availability": "planned",
1576
1629
  "default": false,
1577
- "description": "Encode WebP losslessly (optimiser path). `planned` \u2014 the worker carries a `lossless` bool the API has never emitted (product-parked: lossless can be LARGER). Optimiser (same_format) route only.",
1630
+ "depends_on": {
1631
+ "encoding_mode": "quality"
1632
+ },
1633
+ "description": "Encode WebP losslessly (optimiser path): a genuine lossless WebP encode. STABLE \u2014 the compress-image worker honours the `lossless` bool (un-parked 2026-06-23). Note a lossless encode can be LARGER than a lossy one at the same visual quality. Only in `quality` mode \u2014 incompatible with `target_size` (the byte-budget loop is inherently lossy). Optimiser (same_format) route only.",
1578
1634
  "honored_on": [
1579
1635
  "same_format"
1580
1636
  ],
@@ -1582,15 +1638,10 @@
1582
1638
  },
1583
1639
  "metadata": {
1584
1640
  "default": "all",
1585
- "description": "Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only live behaviour \u2014 the compress worker hardcodes keep_metadata=false). `keep` = preserve metadata \u2014 `planned` (the worker cannot preserve it yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle). Optimiser (same_format) route \u2014 the format-change transcoder has no metadata-preservation control today.",
1641
+ "description": "Metadata handling (optimiser/same_format route). `all` = strip all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). Any other value is rejected as invalid_options.",
1586
1642
  "honored_on": [
1587
1643
  "same_format"
1588
1644
  ],
1589
- "per_value_availability": {
1590
- "keep": {
1591
- "availability": "planned"
1592
- }
1593
- },
1594
1645
  "type": "enum",
1595
1646
  "values": [
1596
1647
  "all",
@@ -1608,7 +1659,10 @@
1608
1659
  },
1609
1660
  "quality": {
1610
1661
  "default": 80,
1611
- "description": "Compression quality (1 = smallest file, 100 = best quality).",
1662
+ "depends_on": {
1663
+ "encoding_mode": "quality"
1664
+ },
1665
+ "description": "Compression quality (1 = smallest file, 100 = best quality). Active in `quality` mode (default); in `target_size` mode the encode-measure loop owns quality, so this option is inactive.",
1612
1666
  "honored_on": [
1613
1667
  "same_format"
1614
1668
  ],
@@ -1616,8 +1670,20 @@
1616
1670
  "min": 1,
1617
1671
  "type": "integer"
1618
1672
  },
1673
+ "target_size_bytes": {
1674
+ "availability": "planned",
1675
+ "depends_on": {
1676
+ "encoding_mode": "target_size"
1677
+ },
1678
+ "description": "Target output size in bytes (min 1024 = 1 KiB). `planned` \u2014 the image encode-measure loop binary-searches quality to land at or under the target; best-effort if the target is unreachable at min quality (the result reports the chosen quality + whether the target was met). Optimiser (same_format) route.",
1679
+ "honored_on": [
1680
+ "same_format"
1681
+ ],
1682
+ "min": 1024,
1683
+ "type": "integer"
1684
+ },
1619
1685
  "width": {
1620
- "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven image resize engine (Lanczos, shared with thumbnail-images) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1686
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Resize the image as part of Output (replace semantics, ONE transformed output) using the proven convert resize engine (Lanczos; the API routes Output resize through the convert worker, BOTH routes \u2014 the compress optimiser has no resize) \u2014 it is NOT the derivative `thumbnail` op. Optional; omit to keep the source dimensions.",
1621
1687
  "honored_on": [
1622
1688
  "same_format",
1623
1689
  "format_change"
@@ -1776,14 +1842,12 @@
1776
1842
  "type": "integer"
1777
1843
  },
1778
1844
  "trim_end": {
1779
- "availability": "planned",
1780
- "description": "Trim from end in seconds. Gated `planned` (qZI5EK9j) \u2014 see `trim_start`.",
1845
+ "description": "Trim from end in seconds (absent = to the end). Removes this many seconds from the end; with `trim_start` the kept clip is [`trim_start`, input_duration \u2212 `trim_end`]. STABLE \u2014 see `trim_start` (short-form only; long-form \u2192 `feature_not_available`).\n",
1781
1846
  "min": 0,
1782
1847
  "type": "float"
1783
1848
  },
1784
1849
  "trim_start": {
1785
- "availability": "planned",
1786
- "description": "Trim from beginning in seconds. Gated `planned` (qZI5EK9j): no compression worker implements per-clip trim yet, so the server returns `feature_not_available` rather than accepting and silently ignoring it. Flips to `stable` when a worker lands; to trim today, chain a `split` op.\n",
1850
+ "description": "Trim from beginning in seconds (absent = from the start). STABLE (qZI5EK9j) \u2014 the compress-video worker cuts the clip before encoding (input-side ffmpeg `-ss`/`-t`; lambdas PR #258), SAME FROM-END semantic as convert/merge: the kept clip is [`trim_start`, input_duration \u2212 `trim_end`]. SHORT-FORM only \u2014 for long-form video the server returns `feature_not_available` (trim a short clip, or chain a `split`); see the compress.video.trim.longform constraint.\n",
1787
1851
  "min": 0,
1788
1852
  "type": "float"
1789
1853
  },
@@ -1903,12 +1967,12 @@
1903
1967
  }
1904
1968
  },
1905
1969
  "image": {
1970
+ "max_output_pixels": 16000000,
1906
1971
  "mimes": [
1907
1972
  "image/jpeg",
1908
1973
  "image/png",
1909
1974
  "image/gif",
1910
1975
  "image/webp",
1911
- "image/svg+xml",
1912
1976
  "image/tiff",
1913
1977
  "image/bmp",
1914
1978
  "image/vnd.microsoft.icon",
@@ -1920,12 +1984,40 @@
1920
1984
  "depends_on": {
1921
1985
  "output_format": "jpeg"
1922
1986
  },
1923
- "description": "Background colour (hex, e.g. '#ffffff') for transparent images converted to JPEG (the format-change\u2192JPEG alpha-flatten \u2014 Output's transparency fill control).",
1987
+ "description": "Background colour as a 6-digit hex (`#RRGGBB`, e.g. `#ffffff`) for transparent images converted to JPEG (the format-change\u2192JPEG alpha-flatten \u2014 Output's transparency fill control). HEX ONLY: the worker honours only `#RRGGBB` and silently drops a CSS named colour (e.g. `magenta`) to the white default, so the `pattern` rejects a non-hex value as `invalid_options` rather than advertising an inert free-form string (e2e staging-verified 2026-06-22).",
1924
1988
  "honored_on": [
1925
1989
  "format_change"
1926
1990
  ],
1991
+ "pattern": "^#[0-9a-fA-F]{6}$",
1927
1992
  "type": "string"
1928
1993
  },
1994
+ "fit": {
1995
+ "default": "max",
1996
+ "depends_on": {
1997
+ "height": "set",
1998
+ "logic": "or",
1999
+ "width": "set"
2000
+ },
2001
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and NEVER upscaling \u2014 it caps at the source dimensions. This IS the \"no-enlarge\" behaviour (there is no separate `no_enlarge` flag \u2014 the worker has no such key). `crop`/`scale` = exact dimensions (`scale` deliberately enlarges past source). Applies only when width or height is set.",
2002
+ "honored_on": [
2003
+ "format_change"
2004
+ ],
2005
+ "type": "enum",
2006
+ "values": [
2007
+ "max",
2008
+ "crop",
2009
+ "scale"
2010
+ ]
2011
+ },
2012
+ "height": {
2013
+ "description": "Resize-inside-Output: target height in pixels (1-16384; width*height <= max_output_pixels). Not honored for SVG input. See `width`.",
2014
+ "honored_on": [
2015
+ "format_change"
2016
+ ],
2017
+ "max": 16384,
2018
+ "min": 1,
2019
+ "type": "integer"
2020
+ },
1929
2021
  "output_format": {
1930
2022
  "description": "Target format",
1931
2023
  "required": true,
@@ -1955,6 +2047,15 @@
1955
2047
  "max": 100,
1956
2048
  "min": 1,
1957
2049
  "type": "integer"
2050
+ },
2051
+ "width": {
2052
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). The convert worker resizes (Lanczos) before encode; single transformed output. NOT honored for SVG input (the worker rejects svg resize). Input-gated \u2014 see the resize comment above.",
2053
+ "honored_on": [
2054
+ "format_change"
2055
+ ],
2056
+ "max": 16384,
2057
+ "min": 1,
2058
+ "type": "integer"
1958
2059
  }
1959
2060
  },
1960
2061
  "per_mime_availability": {
@@ -1966,6 +2067,54 @@
1966
2067
  }
1967
2068
  }
1968
2069
  },
2070
+ "image_svg": {
2071
+ "mimes": [
2072
+ "image/svg+xml"
2073
+ ],
2074
+ "options": {
2075
+ "background": {
2076
+ "depends_on": {
2077
+ "output_format": "jpeg"
2078
+ },
2079
+ "description": "Background colour as a 6-digit hex (`#RRGGBB`) for transparent SVG rasterised to JPEG (alpha-flatten). HEX ONLY \u2014 non-hex is rejected as `invalid_options` (see convert.image.background).",
2080
+ "honored_on": [
2081
+ "format_change"
2082
+ ],
2083
+ "pattern": "^#[0-9a-fA-F]{6}$",
2084
+ "type": "string"
2085
+ },
2086
+ "output_format": {
2087
+ "description": "Target raster format (SVG is rasterised, then encoded).",
2088
+ "required": true,
2089
+ "type": "enum",
2090
+ "values": [
2091
+ "jpeg",
2092
+ "png",
2093
+ "webp",
2094
+ "avif",
2095
+ "gif",
2096
+ "tiff"
2097
+ ]
2098
+ },
2099
+ "quality": {
2100
+ "default": 85,
2101
+ "depends_on": {
2102
+ "output_format": [
2103
+ "jpeg",
2104
+ "webp",
2105
+ "avif"
2106
+ ]
2107
+ },
2108
+ "description": "Output quality for lossy formats",
2109
+ "honored_on": [
2110
+ "format_change"
2111
+ ],
2112
+ "max": 100,
2113
+ "min": 1,
2114
+ "type": "integer"
2115
+ }
2116
+ }
2117
+ },
1969
2118
  "video": {
1970
2119
  "mimes": [
1971
2120
  "video/mp4",
@@ -3978,7 +4127,7 @@
3978
4127
  "sole_op": true
3979
4128
  }
3980
4129
  },
3981
- "schema_version": "2.97.0",
4130
+ "schema_version": "2.104.0",
3982
4131
  "source_commit": null,
3983
4132
  "user_tier": null,
3984
4133
  "workflow_features": {
@@ -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). **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.97.0
5
+ * The version of the OpenAPI document: 2.104.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). **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.97.0
7
+ * The version of the OpenAPI document: 2.104.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). **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.97.0
5
+ * The version of the OpenAPI document: 2.104.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). **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.97.0
7
+ * The version of the OpenAPI document: 2.104.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).