@giveitsmaller/contracts 0.36.0 → 0.37.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 (415) hide show
  1. package/accepted-options/accepted-options.json +206 -1
  2. package/accepted-options/image-output-routes.json +33 -14
  3. package/asyncapi/events.yaml +8 -4
  4. package/availability/availability.json +329 -59
  5. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  6. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  7. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  8. package/dist/openapi/models/AccountLimits.js +1 -1
  9. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  10. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  11. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  12. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  13. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  14. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  15. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  16. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  17. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  18. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  19. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  20. package/dist/openapi/models/AuthErrorType.js +1 -1
  21. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  22. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  23. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  24. package/dist/openapi/models/AvailabilityValue.js +1 -1
  25. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  26. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  27. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  28. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  29. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  30. package/dist/openapi/models/CallbackEventType.js +1 -1
  31. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  32. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  33. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  34. package/dist/openapi/models/CompositionPlan.js +1 -1
  35. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  36. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  37. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  38. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  39. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  40. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  41. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  42. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  43. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  44. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  45. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  46. package/dist/openapi/models/ConnectionSource.js +1 -1
  47. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  48. package/dist/openapi/models/ContactRequest.js +1 -1
  49. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  50. package/dist/openapi/models/ContactSubject.js +1 -1
  51. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  52. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  53. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  54. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  55. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  56. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  57. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  58. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  59. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  60. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  61. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  62. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  63. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  64. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  65. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  66. package/dist/openapi/models/CreditTransaction.js +1 -1
  67. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  68. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  69. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  70. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  71. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  72. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  73. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  74. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  75. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  76. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  77. package/dist/openapi/models/Delivery.d.ts +1 -1
  78. package/dist/openapi/models/Delivery.js +1 -1
  79. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  80. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  81. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  82. package/dist/openapi/models/DeliveryPlan.js +1 -1
  83. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  84. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  85. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  86. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  87. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  88. package/dist/openapi/models/DeliverySelection.js +1 -1
  89. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  90. package/dist/openapi/models/DownloadBundle.js +1 -1
  91. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  92. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  93. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  94. package/dist/openapi/models/EndpointProjection.js +1 -1
  95. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  96. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  97. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  98. package/dist/openapi/models/EstimateQuality.js +1 -1
  99. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  100. package/dist/openapi/models/EstimateRange.js +1 -1
  101. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  102. package/dist/openapi/models/ExternalDestination.js +1 -1
  103. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  104. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  105. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  106. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  107. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  108. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  109. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  110. package/dist/openapi/models/ExternalImportToken.js +1 -1
  111. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  112. package/dist/openapi/models/ExternalSource.js +1 -1
  113. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  114. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  115. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  116. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  117. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  118. package/dist/openapi/models/FeatureViolation.js +1 -1
  119. package/dist/openapi/models/ForgotPasswordRequest.d.ts +1 -1
  120. package/dist/openapi/models/ForgotPasswordRequest.js +1 -1
  121. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  122. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  123. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  124. package/dist/openapi/models/JobDefinition.js +1 -1
  125. package/dist/openapi/models/JobDownload.d.ts +1 -1
  126. package/dist/openapi/models/JobDownload.js +1 -1
  127. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  128. package/dist/openapi/models/JobInputV2.js +1 -1
  129. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  130. package/dist/openapi/models/JobMediaClass.js +1 -1
  131. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  132. package/dist/openapi/models/JobOutputSource.js +1 -1
  133. package/dist/openapi/models/JobResponse.d.ts +1 -1
  134. package/dist/openapi/models/JobResponse.js +1 -1
  135. package/dist/openapi/models/JobStatus.d.ts +1 -1
  136. package/dist/openapi/models/JobStatus.js +1 -1
  137. package/dist/openapi/models/JobType.d.ts +1 -1
  138. package/dist/openapi/models/JobType.js +1 -1
  139. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  140. package/dist/openapi/models/LivenessResponse.js +1 -1
  141. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  142. package/dist/openapi/models/LoginUser200Response.js +1 -1
  143. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  144. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  145. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  146. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  147. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  148. package/dist/openapi/models/LoginUserRequest.js +1 -1
  149. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  150. package/dist/openapi/models/MetadataResponse.js +1 -1
  151. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  152. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  153. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  154. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  155. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  156. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  157. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  158. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  159. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  160. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  161. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  162. package/dist/openapi/models/MultiInputSource.js +1 -1
  163. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  164. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  165. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  166. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  167. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  168. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  169. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  170. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  171. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  172. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  173. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  174. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  175. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  176. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  177. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  178. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  179. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  180. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  181. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  182. package/dist/openapi/models/MultipartPartListing.js +1 -1
  183. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  184. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  185. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  186. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  187. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  188. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  189. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  190. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  191. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  192. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  193. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  194. package/dist/openapi/models/OperationDefinition.js +1 -1
  195. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  196. package/dist/openapi/models/OperationDownload.js +1 -1
  197. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  198. package/dist/openapi/models/OperationInputModel.js +1 -1
  199. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  200. package/dist/openapi/models/OperationResponse.js +1 -1
  201. package/dist/openapi/models/OperationResult.d.ts +24 -1
  202. package/dist/openapi/models/OperationResult.js +3 -1
  203. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  204. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  205. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  206. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  207. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  208. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  209. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  210. package/dist/openapi/models/OperationStatus.js +1 -1
  211. package/dist/openapi/models/OperationType.d.ts +1 -1
  212. package/dist/openapi/models/OperationType.js +1 -1
  213. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  214. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  215. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  216. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  217. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  218. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  219. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  220. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  221. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  222. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  223. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  224. package/dist/openapi/models/OptionSchema.js +1 -1
  225. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  226. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  227. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  228. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  229. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  230. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  231. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  232. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  233. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  234. package/dist/openapi/models/ProcessingClass.js +1 -1
  235. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  236. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  237. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  238. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  239. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  240. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  241. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  242. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  243. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  244. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  245. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  246. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  247. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  248. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  249. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  250. package/dist/openapi/models/ProcessingPlan.js +1 -1
  251. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  252. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  253. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  254. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  255. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  256. package/dist/openapi/models/ReadinessResponse.js +1 -1
  257. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  258. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  259. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  260. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  261. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  262. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  263. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  264. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  265. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  266. package/dist/openapi/models/RetryResponse.js +1 -1
  267. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  268. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  269. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  270. package/dist/openapi/models/SseCompletionBase.js +1 -1
  271. package/dist/openapi/models/SseEventType.d.ts +1 -1
  272. package/dist/openapi/models/SseEventType.js +1 -1
  273. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  274. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  275. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  276. package/dist/openapi/models/SseJobFailedData.js +1 -1
  277. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  278. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  279. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  280. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  281. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  282. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  283. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  284. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  285. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  286. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  287. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  288. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  289. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  290. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  291. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  292. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  293. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +24 -1
  294. package/dist/openapi/models/SseSingleOutputCompletion.js +3 -1
  295. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  296. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  297. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  298. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  299. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  300. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  301. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  302. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  303. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  304. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  305. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  306. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  307. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  308. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  309. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  310. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  311. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  312. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  313. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  314. package/dist/openapi/models/UploadFile403Response.js +1 -1
  315. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  316. package/dist/openapi/models/UploadFile422Response.js +1 -1
  317. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  318. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  319. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  320. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  321. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  322. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  323. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  324. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  325. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  326. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  327. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  328. package/dist/openapi/models/UploadResponse.js +1 -1
  329. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  330. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  331. package/dist/openapi/models/UploadSource.d.ts +1 -1
  332. package/dist/openapi/models/UploadSource.js +1 -1
  333. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  334. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  335. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  336. package/dist/openapi/models/UploadThresholds.js +1 -1
  337. package/dist/openapi/models/UserTier.d.ts +1 -1
  338. package/dist/openapi/models/UserTier.js +1 -1
  339. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  340. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  341. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  342. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  343. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  344. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  345. package/dist/openapi/models/WarningType.d.ts +1 -1
  346. package/dist/openapi/models/WarningType.js +1 -1
  347. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  348. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  349. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  350. package/dist/openapi/models/WebhookPayload.js +1 -1
  351. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  352. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  353. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  354. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  355. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  356. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  357. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  358. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  359. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  360. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  361. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  362. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  363. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  364. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  365. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  366. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  367. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  368. package/dist/openapi/models/WorkflowEdge.js +1 -1
  369. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  370. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  371. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  372. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  373. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  374. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  375. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  376. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  377. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  378. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  379. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  380. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  381. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  382. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  383. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  384. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  385. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  386. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  387. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  388. package/dist/openapi/models/WorkflowSource.js +1 -1
  389. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  390. package/dist/openapi/models/WorkflowStatus.js +1 -1
  391. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  392. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  393. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  394. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  395. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  396. package/dist/openapi/models/WorkflowSummary.js +1 -1
  397. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  398. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  399. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  400. package/dist/openapi/models/WorkflowWarning.js +1 -1
  401. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  402. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  403. package/dist/openapi/runtime.d.ts +1 -1
  404. package/dist/openapi/runtime.js +1 -1
  405. package/dist/operations/compress.d.ts +42 -14
  406. package/dist/operations/compress.js +28 -4
  407. package/dist/operations/compress.metadata.js +95 -25
  408. package/dist/operations/convert.d.ts +33 -0
  409. package/dist/operations/convert.js +27 -0
  410. package/dist/operations/convert.metadata.js +40 -0
  411. package/openapi/api.yaml +23 -1
  412. package/operation-capabilities/operation-capabilities.json +19 -2
  413. package/operations/schemas/compress.yaml +266 -89
  414. package/operations/schemas/convert.yaml +115 -6
  415. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "capabilities_version": 123,
2
+ "capabilities_version": 130,
3
3
  "endpoints": {
4
4
  "DELETE /api/auth/api-keys/{apiKeyId}": {
5
5
  "auth": "required",
@@ -1147,25 +1147,56 @@
1147
1147
  "min": 1,
1148
1148
  "type": "integer"
1149
1149
  },
1150
+ "keep_metadata": {
1151
+ "availability": "planned",
1152
+ "depends_on": {
1153
+ "metadata": "strip"
1154
+ },
1155
+ "description": "Selective per-category metadata keep (optimiser/same_format route): preserve ONLY these categories and strip the rest \u2014 refines the strip path (`metadata: strip`). Valid categories: `copyright`, `gps` (location), `date` (capture time); combinable. `planned` \u2014 the worker does not yet do selective keep (use `metadata: keep` to preserve everything), so the API returns feature_not_available until lambdas proves it.",
1156
+ "honored_on": [
1157
+ "same_format"
1158
+ ],
1159
+ "items": {
1160
+ "type": "string"
1161
+ },
1162
+ "type": "array",
1163
+ "uniqueItems": true
1164
+ },
1150
1165
  "metadata": {
1151
- "default": "all",
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.",
1166
+ "default": "strip",
1167
+ "description": "Metadata handling (optimiser/same_format route). `strip` = remove all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token; `all` reading as \"strip all\" was counterintuitive) \u2014 still accepted, emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`\u2192`all` at the worker boundary. Any other value is rejected as invalid_options.",
1153
1168
  "honored_on": [
1154
1169
  "same_format"
1155
1170
  ],
1171
+ "per_value_availability": {
1172
+ "all": {
1173
+ "availability": "deprecated"
1174
+ }
1175
+ },
1156
1176
  "type": "enum",
1157
1177
  "values": [
1158
- "all",
1159
- "keep"
1178
+ "strip",
1179
+ "keep",
1180
+ "all"
1160
1181
  ]
1161
1182
  },
1162
1183
  "output_format": {
1163
1184
  "default": "original",
1164
- "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Other format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. See FORMAT.md.",
1185
+ "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Concrete format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. `auto` / `smallest` are PLANNED auto-format directives \u2014 the server encodes to several candidate formats and returns the best (`auto` = the most suitable; `smallest` = the absolute fewest bytes), reporting the chosen format via the result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert cannot express \"pick the smallest\"), so they live here and stay `planned` until the API try-all-return-smallest logic + worker proof land. See FORMAT.md.",
1186
+ "per_value_availability": {
1187
+ "auto": {
1188
+ "availability": "planned"
1189
+ },
1190
+ "smallest": {
1191
+ "availability": "planned"
1192
+ }
1193
+ },
1165
1194
  "type": "enum",
1166
1195
  "values": [
1167
1196
  "original",
1168
- "webp"
1197
+ "webp",
1198
+ "auto",
1199
+ "smallest"
1169
1200
  ]
1170
1201
  },
1171
1202
  "quality": {
@@ -1209,15 +1240,10 @@
1209
1240
  },
1210
1241
  "encoding_mode": {
1211
1242
  "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.",
1243
+ "description": "Compression mode (mirrors compress.video). `quality` = the `quality` slider drives the encode (default). `target_size` = hit a byte budget via the worker's encode-measure-binary-search loop \u2014 STABLE (worker-proven on staging, lambdas git-870a7c2: re-encode under target + best-effort + original-wins). AVIF encodes are slow, so the loop caps iterations (a 6-iteration cap, ~18s worst case). Optimiser (same_format) route.",
1213
1244
  "honored_on": [
1214
1245
  "same_format"
1215
1246
  ],
1216
- "per_value_availability": {
1217
- "target_size": {
1218
- "availability": "planned"
1219
- }
1220
- },
1221
1247
  "type": "enum",
1222
1248
  "values": [
1223
1249
  "quality",
@@ -1254,23 +1280,39 @@
1254
1280
  "type": "integer"
1255
1281
  },
1256
1282
  "metadata": {
1257
- "default": "all",
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).",
1283
+ "default": "strip",
1284
+ "description": "Metadata handling. `strip` = remove all EXIF/IPTC/XMP (default, the only supported behaviour). `all` is a DEPRECATED alias of `strip` (migrate to `strip`; the API lowers it at the worker boundary). `keep` is NOT offered for AVIF \u2014 ravif re-encodes from pixels and cannot preserve metadata (the worker rejects `keep` as invalid_options).",
1259
1285
  "honored_on": [
1260
1286
  "same_format"
1261
1287
  ],
1288
+ "per_value_availability": {
1289
+ "all": {
1290
+ "availability": "deprecated"
1291
+ }
1292
+ },
1262
1293
  "type": "enum",
1263
1294
  "values": [
1295
+ "strip",
1264
1296
  "all"
1265
1297
  ]
1266
1298
  },
1267
1299
  "output_format": {
1268
1300
  "default": "original",
1269
- "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Other format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. See FORMAT.md.",
1301
+ "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Concrete format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. `auto` / `smallest` are PLANNED auto-format directives \u2014 the server encodes to several candidate formats and returns the best (`auto` = the most suitable; `smallest` = the absolute fewest bytes), reporting the chosen format via the result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert cannot express \"pick the smallest\"), so they live here and stay `planned` until the API try-all-return-smallest logic + worker proof land. See FORMAT.md.",
1302
+ "per_value_availability": {
1303
+ "auto": {
1304
+ "availability": "planned"
1305
+ },
1306
+ "smallest": {
1307
+ "availability": "planned"
1308
+ }
1309
+ },
1270
1310
  "type": "enum",
1271
1311
  "values": [
1272
1312
  "original",
1273
- "webp"
1313
+ "webp",
1314
+ "auto",
1315
+ "smallest"
1274
1316
  ]
1275
1317
  },
1276
1318
  "quality": {
@@ -1287,11 +1329,10 @@
1287
1329
  "type": "integer"
1288
1330
  },
1289
1331
  "target_size_bytes": {
1290
- "availability": "planned",
1291
1332
  "depends_on": {
1292
1333
  "encoding_mode": "target_size"
1293
1334
  },
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.",
1335
+ "description": "Target output size in bytes (min 1024 = 1 KiB). 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). STABLE (worker-proven, lambdas git-870a7c2). Optimiser (same_format) route.",
1295
1336
  "honored_on": [
1296
1337
  "same_format"
1297
1338
  ],
@@ -1316,17 +1357,24 @@
1316
1357
  "image/jpeg"
1317
1358
  ],
1318
1359
  "options": {
1360
+ "chroma_subsampling": {
1361
+ "description": "JPEG chroma subsampling \u2014 the colour-resolution/size trade-off. `420` (4:2:0) = smallest, chroma at quarter resolution (default-ish for web photos); `422` (4:2:2) = half-horizontal; `444` (4:4:4) = full chroma (largest, best for sharp colour edges / text). JPEG ONLY (declared on image_jpeg only \u2014 ravif hardcodes 4:4:4, libwebp lossy locks 4:2:0). String values (the worker strict-matches strings). STABLE \u2014 worker-proven on staging (lambdas PR #264, deployed git-f2bef85: output JPEG SOF luma sampling bytes verified 0x22/0x21/0x11 for 420/422/444). INCOMPATIBLE with `lossless` (any chroma value): lossless JPEG is a DCT-coefficient copy and cannot resample chroma \u2014 see the chroma_subsampling.lossless_conflict constraint.",
1362
+ "honored_on": [
1363
+ "same_format"
1364
+ ],
1365
+ "type": "enum",
1366
+ "values": [
1367
+ "420",
1368
+ "422",
1369
+ "444"
1370
+ ]
1371
+ },
1319
1372
  "encoding_mode": {
1320
1373
  "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.",
1374
+ "description": "Compression mode (mirrors compress.video). `quality` = the `quality` slider drives the encode (default). `target_size` = hit a byte budget via the worker's encode-measure-binary-search loop \u2014 STABLE (worker-proven on staging, lambdas git-870a7c2: re-encode under target + best-effort below floor + original-wins, all proven). Optimiser (same_format) route.",
1322
1375
  "honored_on": [
1323
1376
  "same_format"
1324
1377
  ],
1325
- "per_value_availability": {
1326
- "target_size": {
1327
- "availability": "planned"
1328
- }
1329
- },
1330
1378
  "type": "enum",
1331
1379
  "values": [
1332
1380
  "quality",
@@ -1362,6 +1410,21 @@
1362
1410
  "min": 1,
1363
1411
  "type": "integer"
1364
1412
  },
1413
+ "keep_metadata": {
1414
+ "availability": "planned",
1415
+ "depends_on": {
1416
+ "metadata": "strip"
1417
+ },
1418
+ "description": "Selective per-category metadata keep (optimiser/same_format route): preserve ONLY these categories and strip the rest \u2014 refines the strip path (`metadata: strip`). Valid categories: `copyright`, `gps` (location), `date` (capture time); combinable. `planned` \u2014 the worker does not yet do selective keep (use `metadata: keep` to preserve everything), so the API returns feature_not_available until lambdas proves it.",
1419
+ "honored_on": [
1420
+ "same_format"
1421
+ ],
1422
+ "items": {
1423
+ "type": "string"
1424
+ },
1425
+ "type": "array",
1426
+ "uniqueItems": true
1427
+ },
1365
1428
  "lossless": {
1366
1429
  "default": false,
1367
1430
  "depends_on": {
@@ -1374,24 +1437,40 @@
1374
1437
  "type": "boolean"
1375
1438
  },
1376
1439
  "metadata": {
1377
- "default": "all",
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.",
1440
+ "default": "strip",
1441
+ "description": "Metadata handling (optimiser/same_format route). `strip` = remove all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token; `all` reading as \"strip all\" was counterintuitive) \u2014 still accepted, emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`\u2192`all` at the worker boundary. Any other value is rejected as invalid_options.",
1379
1442
  "honored_on": [
1380
1443
  "same_format"
1381
1444
  ],
1445
+ "per_value_availability": {
1446
+ "all": {
1447
+ "availability": "deprecated"
1448
+ }
1449
+ },
1382
1450
  "type": "enum",
1383
1451
  "values": [
1384
- "all",
1385
- "keep"
1452
+ "strip",
1453
+ "keep",
1454
+ "all"
1386
1455
  ]
1387
1456
  },
1388
1457
  "output_format": {
1389
1458
  "default": "original",
1390
- "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Other format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. See FORMAT.md.",
1459
+ "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Concrete format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. `auto` / `smallest` are PLANNED auto-format directives \u2014 the server encodes to several candidate formats and returns the best (`auto` = the most suitable; `smallest` = the absolute fewest bytes), reporting the chosen format via the result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert cannot express \"pick the smallest\"), so they live here and stay `planned` until the API try-all-return-smallest logic + worker proof land. See FORMAT.md.",
1460
+ "per_value_availability": {
1461
+ "auto": {
1462
+ "availability": "planned"
1463
+ },
1464
+ "smallest": {
1465
+ "availability": "planned"
1466
+ }
1467
+ },
1391
1468
  "type": "enum",
1392
1469
  "values": [
1393
1470
  "original",
1394
- "webp"
1471
+ "webp",
1472
+ "auto",
1473
+ "smallest"
1395
1474
  ]
1396
1475
  },
1397
1476
  "progressive": {
@@ -1416,11 +1495,10 @@
1416
1495
  "type": "integer"
1417
1496
  },
1418
1497
  "target_size_bytes": {
1419
- "availability": "planned",
1420
1498
  "depends_on": {
1421
1499
  "encoding_mode": "target_size"
1422
1500
  },
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.",
1501
+ "description": "Target output size in bytes (min 1024 = 1 KiB). 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). STABLE (worker-proven, lambdas git-870a7c2). Optimiser (same_format) route.",
1424
1502
  "honored_on": [
1425
1503
  "same_format"
1426
1504
  ],
@@ -1474,6 +1552,21 @@
1474
1552
  "min": 1,
1475
1553
  "type": "integer"
1476
1554
  },
1555
+ "keep_metadata": {
1556
+ "availability": "planned",
1557
+ "depends_on": {
1558
+ "metadata": "strip"
1559
+ },
1560
+ "description": "Selective per-category metadata keep (optimiser/same_format route): preserve ONLY these categories and strip the rest \u2014 refines the strip path (`metadata: strip`). Valid categories: `copyright`, `gps` (location), `date` (capture time); combinable. `planned` \u2014 the worker does not yet do selective keep (use `metadata: keep` to preserve everything), so the API returns feature_not_available until lambdas proves it.",
1561
+ "honored_on": [
1562
+ "same_format"
1563
+ ],
1564
+ "items": {
1565
+ "type": "string"
1566
+ },
1567
+ "type": "array",
1568
+ "uniqueItems": true
1569
+ },
1477
1570
  "lossy": {
1478
1571
  "availability": "planned",
1479
1572
  "default": false,
@@ -1484,15 +1577,21 @@
1484
1577
  "type": "boolean"
1485
1578
  },
1486
1579
  "metadata": {
1487
- "default": "all",
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.",
1580
+ "default": "strip",
1581
+ "description": "Metadata handling (optimiser/same_format route). `strip` = remove all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token; `all` reading as \"strip all\" was counterintuitive) \u2014 still accepted, emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`\u2192`all` at the worker boundary. Any other value is rejected as invalid_options.",
1489
1582
  "honored_on": [
1490
1583
  "same_format"
1491
1584
  ],
1585
+ "per_value_availability": {
1586
+ "all": {
1587
+ "availability": "deprecated"
1588
+ }
1589
+ },
1492
1590
  "type": "enum",
1493
1591
  "values": [
1494
- "all",
1495
- "keep"
1592
+ "strip",
1593
+ "keep",
1594
+ "all"
1496
1595
  ]
1497
1596
  },
1498
1597
  "optimization_level": {
@@ -1507,11 +1606,21 @@
1507
1606
  },
1508
1607
  "output_format": {
1509
1608
  "default": "original",
1510
- "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Other format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. See FORMAT.md.",
1609
+ "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Concrete format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. `auto` / `smallest` are PLANNED auto-format directives \u2014 the server encodes to several candidate formats and returns the best (`auto` = the most suitable; `smallest` = the absolute fewest bytes), reporting the chosen format via the result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert cannot express \"pick the smallest\"), so they live here and stay `planned` until the API try-all-return-smallest logic + worker proof land. See FORMAT.md.",
1610
+ "per_value_availability": {
1611
+ "auto": {
1612
+ "availability": "planned"
1613
+ },
1614
+ "smallest": {
1615
+ "availability": "planned"
1616
+ }
1617
+ },
1511
1618
  "type": "enum",
1512
1619
  "values": [
1513
1620
  "original",
1514
- "webp"
1621
+ "webp",
1622
+ "auto",
1623
+ "smallest"
1515
1624
  ]
1516
1625
  },
1517
1626
  "quality": {
@@ -1542,23 +1651,39 @@
1542
1651
  ],
1543
1652
  "options": {
1544
1653
  "metadata": {
1545
- "default": "all",
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).",
1654
+ "default": "strip",
1655
+ "description": "Metadata handling. `strip` = remove all metadata (default, the only supported behaviour). `all` is a DEPRECATED alias of `strip` (migrate to `strip`; the API lowers it at the worker boundary). `keep` is NOT offered for SVG \u2014 SVGO optimises the markup and cannot preserve a metadata block (the worker rejects `keep` as invalid_options).",
1547
1656
  "honored_on": [
1548
1657
  "same_format"
1549
1658
  ],
1659
+ "per_value_availability": {
1660
+ "all": {
1661
+ "availability": "deprecated"
1662
+ }
1663
+ },
1550
1664
  "type": "enum",
1551
1665
  "values": [
1666
+ "strip",
1552
1667
  "all"
1553
1668
  ]
1554
1669
  },
1555
1670
  "output_format": {
1556
1671
  "default": "original",
1557
- "description": "Output format. original = keep input format (default); webp = recompress to WebP. Other format changes are the convert operation's job. See FORMAT.md.",
1672
+ "description": "Output format. original = keep input format (default); webp = recompress to WebP. Concrete format changes are the convert operation's job. `auto` / `smallest` are PLANNED auto-format directives (server picks the best/smallest candidate format, reported via the result `mime_type`) \u2014 selection strategies, not concrete targets, planned until the API logic + worker proof land. See FORMAT.md.",
1673
+ "per_value_availability": {
1674
+ "auto": {
1675
+ "availability": "planned"
1676
+ },
1677
+ "smallest": {
1678
+ "availability": "planned"
1679
+ }
1680
+ },
1558
1681
  "type": "enum",
1559
1682
  "values": [
1560
1683
  "original",
1561
- "webp"
1684
+ "webp",
1685
+ "auto",
1686
+ "smallest"
1562
1687
  ]
1563
1688
  },
1564
1689
  "quality": {
@@ -1581,15 +1706,10 @@
1581
1706
  "options": {
1582
1707
  "encoding_mode": {
1583
1708
  "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.",
1709
+ "description": "Compression mode (mirrors compress.video). `quality` = the `quality` slider drives the encode (default). `target_size` = hit a byte budget via the worker's encode-measure-binary-search loop \u2014 STABLE (worker-proven on staging, lambdas git-870a7c2: re-encode under target + best-effort below floor + original-wins, all proven). Optimiser (same_format) route.",
1585
1710
  "honored_on": [
1586
1711
  "same_format"
1587
1712
  ],
1588
- "per_value_availability": {
1589
- "target_size": {
1590
- "availability": "planned"
1591
- }
1592
- },
1593
1713
  "type": "enum",
1594
1714
  "values": [
1595
1715
  "quality",
@@ -1625,6 +1745,21 @@
1625
1745
  "min": 1,
1626
1746
  "type": "integer"
1627
1747
  },
1748
+ "keep_metadata": {
1749
+ "availability": "planned",
1750
+ "depends_on": {
1751
+ "metadata": "strip"
1752
+ },
1753
+ "description": "Selective per-category metadata keep (optimiser/same_format route): preserve ONLY these categories and strip the rest \u2014 refines the strip path (`metadata: strip`). Valid categories: `copyright`, `gps` (location), `date` (capture time); combinable. `planned` \u2014 the worker does not yet do selective keep (use `metadata: keep` to preserve everything), so the API returns feature_not_available until lambdas proves it.",
1754
+ "honored_on": [
1755
+ "same_format"
1756
+ ],
1757
+ "items": {
1758
+ "type": "string"
1759
+ },
1760
+ "type": "array",
1761
+ "uniqueItems": true
1762
+ },
1628
1763
  "lossless": {
1629
1764
  "default": false,
1630
1765
  "depends_on": {
@@ -1637,24 +1772,40 @@
1637
1772
  "type": "boolean"
1638
1773
  },
1639
1774
  "metadata": {
1640
- "default": "all",
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.",
1775
+ "default": "strip",
1776
+ "description": "Metadata handling (optimiser/same_format route). `strip` = remove all EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP \u2014 STABLE (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token; `all` reading as \"strip all\" was counterintuitive) \u2014 still accepted, emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`\u2192`all` at the worker boundary. Any other value is rejected as invalid_options.",
1642
1777
  "honored_on": [
1643
1778
  "same_format"
1644
1779
  ],
1780
+ "per_value_availability": {
1781
+ "all": {
1782
+ "availability": "deprecated"
1783
+ }
1784
+ },
1645
1785
  "type": "enum",
1646
1786
  "values": [
1647
- "all",
1648
- "keep"
1787
+ "strip",
1788
+ "keep",
1789
+ "all"
1649
1790
  ]
1650
1791
  },
1651
1792
  "output_format": {
1652
1793
  "default": "original",
1653
- "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Other format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. See FORMAT.md.",
1794
+ "description": "Output format. original = keep input format (default); webp = recompress to WebP \u2014 the one live compress+format target (proven on staging). Concrete format changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress. `auto` / `smallest` are PLANNED auto-format directives \u2014 the server encodes to several candidate formats and returns the best (`auto` = the most suitable; `smallest` = the absolute fewest bytes), reporting the chosen format via the result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert cannot express \"pick the smallest\"), so they live here and stay `planned` until the API try-all-return-smallest logic + worker proof land. See FORMAT.md.",
1795
+ "per_value_availability": {
1796
+ "auto": {
1797
+ "availability": "planned"
1798
+ },
1799
+ "smallest": {
1800
+ "availability": "planned"
1801
+ }
1802
+ },
1654
1803
  "type": "enum",
1655
1804
  "values": [
1656
1805
  "original",
1657
- "webp"
1806
+ "webp",
1807
+ "auto",
1808
+ "smallest"
1658
1809
  ]
1659
1810
  },
1660
1811
  "quality": {
@@ -1671,11 +1822,10 @@
1671
1822
  "type": "integer"
1672
1823
  },
1673
1824
  "target_size_bytes": {
1674
- "availability": "planned",
1675
1825
  "depends_on": {
1676
1826
  "encoding_mode": "target_size"
1677
1827
  },
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.",
1828
+ "description": "Target output size in bytes (min 1024 = 1 KiB). 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). STABLE (worker-proven, lambdas git-870a7c2). Optimiser (same_format) route.",
1679
1829
  "honored_on": [
1680
1830
  "same_format"
1681
1831
  ],
@@ -1971,7 +2121,6 @@
1971
2121
  "mimes": [
1972
2122
  "image/jpeg",
1973
2123
  "image/png",
1974
- "image/gif",
1975
2124
  "image/webp",
1976
2125
  "image/tiff",
1977
2126
  "image/bmp",
@@ -2018,6 +2167,19 @@
2018
2167
  "min": 1,
2019
2168
  "type": "integer"
2020
2169
  },
2170
+ "metadata": {
2171
+ "availability": "planned",
2172
+ "default": "strip",
2173
+ "description": "Metadata handling on the format-change (convert/transcoder) route. `strip` = remove all EXIF/IPTC/XMP (default), `keep` = preserve. `planned` \u2014 the convert worker re-encodes from pixels and does not yet preserve metadata across a format change, so the API returns feature_not_available (rather than \"Unknown option\" on a format-change request \u2014 e2e/api flagged 2026-06-23). This is a new (planned) surface, so it carries no deprecated `all` alias \u2014 unlike compress.image.metadata, which keeps `all` for its existing callers. Stable-flip gated on lambdas proving convert-route metadata preservation; the honoured target subset may narrow (avif/heic targets re-encode and cannot keep).",
2174
+ "honored_on": [
2175
+ "format_change"
2176
+ ],
2177
+ "type": "enum",
2178
+ "values": [
2179
+ "strip",
2180
+ "keep"
2181
+ ]
2182
+ },
2021
2183
  "output_format": {
2022
2184
  "description": "Target format",
2023
2185
  "required": true,
@@ -2067,6 +2229,114 @@
2067
2229
  }
2068
2230
  }
2069
2231
  },
2232
+ "image_gif": {
2233
+ "max_output_pixels": 16000000,
2234
+ "mimes": [
2235
+ "image/gif"
2236
+ ],
2237
+ "options": {
2238
+ "background": {
2239
+ "depends_on": {
2240
+ "output_format": "jpeg"
2241
+ },
2242
+ "description": "Background colour as a 6-digit hex (`#RRGGBB`) for a transparent GIF flattened to JPEG (alpha-flatten). HEX ONLY \u2014 non-hex is rejected as `invalid_options` (see convert.image.background).",
2243
+ "honored_on": [
2244
+ "format_change"
2245
+ ],
2246
+ "pattern": "^#[0-9a-fA-F]{6}$",
2247
+ "type": "string"
2248
+ },
2249
+ "fit": {
2250
+ "default": "max",
2251
+ "depends_on": {
2252
+ "height": "set",
2253
+ "logic": "or",
2254
+ "width": "set"
2255
+ },
2256
+ "description": "Resize mode. `max` (default) = fit within bounds, preserving aspect ratio and never upscaling; `crop`/`scale` = exact dimensions. Applies only when width or height is set.",
2257
+ "honored_on": [
2258
+ "format_change"
2259
+ ],
2260
+ "type": "enum",
2261
+ "values": [
2262
+ "max",
2263
+ "crop",
2264
+ "scale"
2265
+ ]
2266
+ },
2267
+ "height": {
2268
+ "description": "Resize-inside-Output: target height in pixels (1-16384; width*height <= max_output_pixels). See `width`.",
2269
+ "honored_on": [
2270
+ "format_change"
2271
+ ],
2272
+ "max": 16384,
2273
+ "min": 1,
2274
+ "type": "integer"
2275
+ },
2276
+ "metadata": {
2277
+ "availability": "planned",
2278
+ "default": "strip",
2279
+ "description": "Metadata handling on the format-change route (still-image targets). `planned` \u2014 mirrors convert.image.metadata (the convert worker does not yet preserve metadata across a format change). The video targets carry no EXIF/IPTC/XMP.",
2280
+ "honored_on": [
2281
+ "format_change"
2282
+ ],
2283
+ "type": "enum",
2284
+ "values": [
2285
+ "strip",
2286
+ "keep"
2287
+ ]
2288
+ },
2289
+ "output_format": {
2290
+ "description": "Target format. The still-image targets (jpeg/png/webp/avif/gif/tiff) take the first frame / rasterise (stable, today's gif-convert behaviour). `mp4` / `webm` are the NEW (planned) GIF\u2192VIDEO transcode targets \u2014 the animated GIF becomes a muted, play-once video (`mp4` = H.264 / yuv420p / +faststart, plays everywhere; `webm` = VP9, smaller). GIFs are silent (no audio stream); the GIF infinite-loop becomes a playback attribute (`<video loop>`) the player sets, NOT baked into the file. mp4 and webm flip planned\u2192stable independently on worker proof.",
2291
+ "per_value_availability": {
2292
+ "mp4": {
2293
+ "availability": "planned"
2294
+ },
2295
+ "webm": {
2296
+ "availability": "planned"
2297
+ }
2298
+ },
2299
+ "required": true,
2300
+ "type": "enum",
2301
+ "values": [
2302
+ "jpeg",
2303
+ "png",
2304
+ "webp",
2305
+ "avif",
2306
+ "gif",
2307
+ "tiff",
2308
+ "mp4",
2309
+ "webm"
2310
+ ]
2311
+ },
2312
+ "quality": {
2313
+ "default": 85,
2314
+ "depends_on": {
2315
+ "output_format": [
2316
+ "jpeg",
2317
+ "webp",
2318
+ "avif"
2319
+ ]
2320
+ },
2321
+ "description": "Output quality for the lossy STILL-IMAGE targets (jpeg/webp/avif). The video targets (mp4/webm) use a sensible default encode quality in v1 \u2014 there is no exposed CRF knob yet (planned-first; may be added later).",
2322
+ "honored_on": [
2323
+ "format_change"
2324
+ ],
2325
+ "max": 100,
2326
+ "min": 1,
2327
+ "type": "integer"
2328
+ },
2329
+ "width": {
2330
+ "description": "Resize-inside-Output: target width in pixels (1-16384; width*height <= max_output_pixels). Applies to the still-image targets; for the planned mp4/webm video targets, resize applicability is settled at the worker flip.",
2331
+ "honored_on": [
2332
+ "format_change"
2333
+ ],
2334
+ "max": 16384,
2335
+ "min": 1,
2336
+ "type": "integer"
2337
+ }
2338
+ }
2339
+ },
2070
2340
  "image_svg": {
2071
2341
  "mimes": [
2072
2342
  "image/svg+xml"
@@ -4127,7 +4397,7 @@
4127
4397
  "sole_op": true
4128
4398
  }
4129
4399
  },
4130
- "schema_version": "2.104.0",
4400
+ "schema_version": "2.111.0",
4131
4401
  "source_commit": null,
4132
4402
  "user_tier": null,
4133
4403
  "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.104.0
5
+ * The version of the OpenAPI document: 2.111.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).