@giveitsmaller/contracts 0.63.0 → 0.65.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 (518) hide show
  1. package/README.md +2 -2
  2. package/accepted-options/accepted-options.json +1 -1
  3. package/accepted-options/image-output-routes.json +1 -1
  4. package/asyncapi/events.yaml +179 -7
  5. package/availability/availability.json +15 -3
  6. package/code-builder/code-builder-metadata.json +2 -2
  7. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  8. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  9. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  10. package/dist/openapi/models/AccountLimits.js +1 -1
  11. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  12. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  13. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  14. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  15. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  16. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  17. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  18. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  19. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  20. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  21. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  22. package/dist/openapi/models/AuthErrorType.js +1 -1
  23. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  24. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  25. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  26. package/dist/openapi/models/AvailabilityValue.js +1 -1
  27. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  28. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  29. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  30. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  31. package/dist/openapi/models/BillingCheckoutRequest.d.ts +12 -1
  32. package/dist/openapi/models/BillingCheckoutRequest.js +1 -1
  33. package/dist/openapi/models/BillingCheckoutSession.d.ts +1 -1
  34. package/dist/openapi/models/BillingCheckoutSession.js +1 -1
  35. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +1 -1
  36. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +1 -1
  37. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  38. package/dist/openapi/models/CallbackEventType.js +1 -1
  39. package/dist/openapi/models/CancelAccountDeletion200Response.d.ts +1 -1
  40. package/dist/openapi/models/CancelAccountDeletion200Response.js +1 -1
  41. package/dist/openapi/models/CancelAccountDeletion200ResponseData.d.ts +1 -1
  42. package/dist/openapi/models/CancelAccountDeletion200ResponseData.js +1 -1
  43. package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
  44. package/dist/openapi/models/CapabilityCondition.js +1 -1
  45. package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
  46. package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
  47. package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
  48. package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
  49. package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
  50. package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
  51. package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
  52. package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
  53. package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
  54. package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
  55. package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +1 -1
  56. package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -1
  57. package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
  58. package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
  59. package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
  60. package/dist/openapi/models/CapabilityConstraint.js +1 -1
  61. package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
  62. package/dist/openapi/models/CapabilityInputSpec.js +1 -1
  63. package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
  64. package/dist/openapi/models/CapabilityProduces.js +1 -1
  65. package/dist/openapi/models/CapabilityProducesOneOf.d.ts +1 -1
  66. package/dist/openapi/models/CapabilityProducesOneOf.js +1 -1
  67. package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
  68. package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
  69. package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
  70. package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
  71. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  72. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  73. package/dist/openapi/models/CodegenSource.d.ts +1 -1
  74. package/dist/openapi/models/CodegenSource.js +1 -1
  75. package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
  76. package/dist/openapi/models/CodegenSourceInput.js +1 -1
  77. package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
  78. package/dist/openapi/models/CodegenSourceJob.js +1 -1
  79. package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
  80. package/dist/openapi/models/CodegenSourceJobSource.js +1 -1
  81. package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
  82. package/dist/openapi/models/CodegenSourceOperation.js +1 -1
  83. package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +1 -1
  84. package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
  85. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  86. package/dist/openapi/models/CompositionPlan.js +1 -1
  87. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  88. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  89. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  90. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  91. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  92. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  93. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  94. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  95. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  96. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  97. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  98. package/dist/openapi/models/ConnectionSource.js +1 -1
  99. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  100. package/dist/openapi/models/ContactRequest.js +1 -1
  101. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  102. package/dist/openapi/models/ContactSubject.js +1 -1
  103. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  104. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  105. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  106. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  107. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  108. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  109. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  110. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  111. package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +1 -1
  112. package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +1 -1
  113. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  114. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  115. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  116. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  117. package/dist/openapi/models/CreateWorkflow401Response.d.ts +1 -1
  118. package/dist/openapi/models/CreateWorkflow401Response.js +1 -1
  119. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  120. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  121. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  122. package/dist/openapi/models/CreditTransaction.js +1 -1
  123. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  124. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  125. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  126. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  127. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  128. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  129. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  130. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  131. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  132. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  133. package/dist/openapi/models/Delivery.d.ts +1 -1
  134. package/dist/openapi/models/Delivery.js +1 -1
  135. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  136. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  137. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  138. package/dist/openapi/models/DeliveryPlan.js +1 -1
  139. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  140. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  141. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  142. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  143. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  144. package/dist/openapi/models/DeliverySelection.js +1 -1
  145. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  146. package/dist/openapi/models/DownloadBundle.js +1 -1
  147. package/dist/openapi/models/DroppedOption.d.ts +1 -1
  148. package/dist/openapi/models/DroppedOption.js +1 -1
  149. package/dist/openapi/models/EmailNotify.d.ts +1 -1
  150. package/dist/openapi/models/EmailNotify.js +1 -1
  151. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  152. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  153. package/dist/openapi/models/EndpointProjection.d.ts +44 -9
  154. package/dist/openapi/models/EndpointProjection.js +4 -1
  155. package/dist/openapi/models/EndpointProjectionServersInner.d.ts +57 -0
  156. package/dist/openapi/models/EndpointProjectionServersInner.js +49 -0
  157. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  158. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  159. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  160. package/dist/openapi/models/EstimateQuality.js +1 -1
  161. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  162. package/dist/openapi/models/EstimateRange.js +1 -1
  163. package/dist/openapi/models/ExportAccountData200Response.d.ts +1 -1
  164. package/dist/openapi/models/ExportAccountData200Response.js +1 -1
  165. package/dist/openapi/models/ExportAccountData200ResponseData.d.ts +1 -1
  166. package/dist/openapi/models/ExportAccountData200ResponseData.js +1 -1
  167. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  168. package/dist/openapi/models/ExternalDestination.js +1 -1
  169. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  170. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  171. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  172. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  173. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  174. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  175. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  176. package/dist/openapi/models/ExternalImportToken.js +1 -1
  177. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  178. package/dist/openapi/models/ExternalSource.js +1 -1
  179. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  180. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  181. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  182. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  183. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  184. package/dist/openapi/models/FeatureViolation.js +1 -1
  185. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  186. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  187. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  188. package/dist/openapi/models/JobDefinition.js +1 -1
  189. package/dist/openapi/models/JobDownload.d.ts +1 -1
  190. package/dist/openapi/models/JobDownload.js +1 -1
  191. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  192. package/dist/openapi/models/JobInputV2.js +1 -1
  193. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  194. package/dist/openapi/models/JobMediaClass.js +1 -1
  195. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  196. package/dist/openapi/models/JobOutputSource.js +1 -1
  197. package/dist/openapi/models/JobResponse.d.ts +1 -1
  198. package/dist/openapi/models/JobResponse.js +1 -1
  199. package/dist/openapi/models/JobStatus.d.ts +1 -1
  200. package/dist/openapi/models/JobStatus.js +1 -1
  201. package/dist/openapi/models/JobType.d.ts +1 -1
  202. package/dist/openapi/models/JobType.js +1 -1
  203. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  204. package/dist/openapi/models/LivenessResponse.js +1 -1
  205. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  206. package/dist/openapi/models/LoginUser200Response.js +1 -1
  207. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  208. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  209. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  210. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  211. package/dist/openapi/models/LoginUser401Response.d.ts +1 -1
  212. package/dist/openapi/models/LoginUser401Response.js +1 -1
  213. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  214. package/dist/openapi/models/LoginUserRequest.js +1 -1
  215. package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +1 -1
  216. package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
  217. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
  218. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
  219. package/dist/openapi/models/MediaCategory.d.ts +1 -1
  220. package/dist/openapi/models/MediaCategory.js +1 -1
  221. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  222. package/dist/openapi/models/MetadataResponse.js +1 -1
  223. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  224. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  225. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  226. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  227. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  228. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  229. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  230. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  231. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  232. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  233. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  234. package/dist/openapi/models/MultiInputSource.js +1 -1
  235. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  236. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  237. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  238. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  239. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  240. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  241. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  242. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  243. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  244. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  245. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  246. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  247. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  248. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  249. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  250. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  251. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  252. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  253. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  254. package/dist/openapi/models/MultipartPartListing.js +1 -1
  255. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  256. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  257. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  258. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  259. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  260. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  261. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  262. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  263. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  264. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  265. package/dist/openapi/models/NotifyConfig.d.ts +1 -1
  266. package/dist/openapi/models/NotifyConfig.js +1 -1
  267. package/dist/openapi/models/OperationCapability.d.ts +1 -1
  268. package/dist/openapi/models/OperationCapability.js +1 -1
  269. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  270. package/dist/openapi/models/OperationDefinition.js +1 -1
  271. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  272. package/dist/openapi/models/OperationDownload.js +1 -1
  273. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  274. package/dist/openapi/models/OperationInputModel.js +1 -1
  275. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  276. package/dist/openapi/models/OperationResponse.js +1 -1
  277. package/dist/openapi/models/OperationResult.d.ts +1 -1
  278. package/dist/openapi/models/OperationResult.js +1 -1
  279. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  280. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  281. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  282. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  283. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  284. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  285. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  286. package/dist/openapi/models/OperationStatus.js +1 -1
  287. package/dist/openapi/models/OperationType.d.ts +1 -1
  288. package/dist/openapi/models/OperationType.js +1 -1
  289. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  290. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  291. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  292. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  293. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  294. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  295. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  296. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  297. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  298. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  299. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
  300. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
  301. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  302. package/dist/openapi/models/OptionSchema.js +1 -1
  303. package/dist/openapi/models/OutputProperties.d.ts +1 -1
  304. package/dist/openapi/models/OutputProperties.js +1 -1
  305. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
  306. package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
  307. package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +1 -1
  308. package/dist/openapi/models/PerClassAvailabilityEntry.js +1 -1
  309. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  310. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  311. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  312. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  313. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  314. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  315. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  316. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  317. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  318. package/dist/openapi/models/ProcessingClass.js +1 -1
  319. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  320. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  321. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  322. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  323. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  324. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  325. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  326. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  327. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  328. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  329. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  330. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  331. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  332. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  333. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  334. package/dist/openapi/models/ProcessingPlan.js +1 -1
  335. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  336. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  337. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  338. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  339. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  340. package/dist/openapi/models/ReadinessResponse.js +1 -1
  341. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  342. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  343. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  344. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  345. package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +1 -1
  346. package/dist/openapi/models/RequestAccountDeletion200Response.js +1 -1
  347. package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +1 -1
  348. package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +1 -1
  349. package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +1 -1
  350. package/dist/openapi/models/RequestAccountDeletionRequest.js +1 -1
  351. package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
  352. package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
  353. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  354. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  355. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  356. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  357. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  358. package/dist/openapi/models/RetryResponse.js +1 -1
  359. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  360. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  361. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  362. package/dist/openapi/models/SseCompletionBase.js +1 -1
  363. package/dist/openapi/models/SseEventType.d.ts +1 -1
  364. package/dist/openapi/models/SseEventType.js +1 -1
  365. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  366. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  367. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  368. package/dist/openapi/models/SseJobFailedData.js +1 -1
  369. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  370. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  371. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  372. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  373. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  374. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  375. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  376. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  377. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  378. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  379. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  380. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  381. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  382. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  383. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  384. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  385. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  386. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  387. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  388. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  389. package/dist/openapi/models/TierDefaultLimits.d.ts +1 -1
  390. package/dist/openapi/models/TierDefaultLimits.js +1 -1
  391. package/dist/openapi/models/TierDefaults.d.ts +1 -1
  392. package/dist/openapi/models/TierDefaults.js +1 -1
  393. package/dist/openapi/models/TierDefaultsByAudience.d.ts +1 -1
  394. package/dist/openapi/models/TierDefaultsByAudience.js +1 -1
  395. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  396. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  397. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  398. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  399. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  400. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  401. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  402. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  403. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  404. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  405. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  406. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  407. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  408. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  409. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  410. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  411. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  412. package/dist/openapi/models/UploadFile403Response.js +1 -1
  413. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  414. package/dist/openapi/models/UploadFile422Response.js +1 -1
  415. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  416. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  417. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  418. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  419. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  420. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  421. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  422. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  423. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  424. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  425. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  426. package/dist/openapi/models/UploadResponse.js +1 -1
  427. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  428. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  429. package/dist/openapi/models/UploadSource.d.ts +1 -1
  430. package/dist/openapi/models/UploadSource.js +1 -1
  431. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  432. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  433. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  434. package/dist/openapi/models/UploadThresholds.js +1 -1
  435. package/dist/openapi/models/UserTier.d.ts +1 -1
  436. package/dist/openapi/models/UserTier.js +1 -1
  437. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  438. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  439. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  440. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  441. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  442. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  443. package/dist/openapi/models/WarningType.d.ts +1 -1
  444. package/dist/openapi/models/WarningType.js +1 -1
  445. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  446. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  447. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  448. package/dist/openapi/models/WebhookPayload.js +1 -1
  449. package/dist/openapi/models/WorkflowArchiveResponse.d.ts +1 -1
  450. package/dist/openapi/models/WorkflowArchiveResponse.js +1 -1
  451. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
  452. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
  453. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  454. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  455. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  456. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  457. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  458. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  459. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  460. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  461. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  462. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  463. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  464. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  465. package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
  466. package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
  467. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  468. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  469. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  470. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  471. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  472. package/dist/openapi/models/WorkflowEdge.js +1 -1
  473. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  474. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  475. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  476. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  477. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  478. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  479. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  480. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  481. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  482. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  483. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  484. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  485. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  486. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  487. package/dist/openapi/models/WorkflowRestoreResponse.d.ts +1 -1
  488. package/dist/openapi/models/WorkflowRestoreResponse.js +1 -1
  489. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
  490. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
  491. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  492. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  493. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  494. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  495. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  496. package/dist/openapi/models/WorkflowSource.js +1 -1
  497. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  498. package/dist/openapi/models/WorkflowStatus.js +1 -1
  499. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  500. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  501. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  502. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  503. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  504. package/dist/openapi/models/WorkflowSummary.js +1 -1
  505. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  506. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  507. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  508. package/dist/openapi/models/WorkflowWarning.js +1 -1
  509. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  510. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  511. package/dist/openapi/models/index.d.ts +1 -0
  512. package/dist/openapi/models/index.js +1 -0
  513. package/dist/openapi/runtime.d.ts +1 -1
  514. package/dist/openapi/runtime.js +1 -1
  515. package/openapi/README.md +1 -1
  516. package/openapi/api.yaml +236 -10
  517. package/operation-capabilities/operation-capabilities.json +1 -1
  518. package/package.json +3 -3
package/README.md CHANGED
@@ -5,8 +5,8 @@
5
5
 
6
6
  | | |
7
7
  |---|---|
8
- | Package version | `0.63.0` |
9
- | Generated from spec | **`v2.192.0`** |
8
+ | Package version | `0.65.0` |
9
+ | Generated from spec | **`v2.194.0`** |
10
10
 
11
11
  ## Two version lines, and they are not comparable
12
12
 
@@ -1200,5 +1200,5 @@
1200
1200
  }
1201
1201
  }
1202
1202
  },
1203
- "schema_version": "2.192.0"
1203
+ "schema_version": "2.194.0"
1204
1204
  }
@@ -246,5 +246,5 @@
246
246
  "source_op": "compress"
247
247
  }
248
248
  },
249
- "schema_version": "2.192.0"
249
+ "schema_version": "2.194.0"
250
250
  }
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.0.0
2
2
  info:
3
3
  title: GISL Compression Events
4
- version: 3.25.3
4
+ version: 3.26.0
5
5
  description: |
6
6
  Asynchronous event contracts for the GISL (Give It Smaller) compression service.
7
7
 
@@ -4054,7 +4054,150 @@ components:
4054
4054
  Stored in database as part of the Operation entity.
4055
4055
 
4056
4056
  **Important**: This message MUST always be sent, whether the operation
4057
- succeeds or fails. It is the definitive signal that processing is complete.
4057
+ succeeds or fails. It is the signal that an ATTEMPT at processing has
4058
+ finished.
4059
+
4060
+ ⚠️ **It was previously described as "the definitive signal that
4061
+ processing is complete". That is no longer accurate and the correction
4062
+ matters:** a terminal result is definitive about the attempt that
4063
+ produced it, not about the operation, because a second attempt can
4064
+ follow and produce a second terminal result. See the supersession rule
4065
+ below.
4066
+
4067
+ ## ⚠️ AN OPERATION MAY DELIVER MORE THAN ONE TERMINAL RESULT
4068
+
4069
+ Delivery is **at least once**, and that applies to the terminal event
4070
+ itself. A consumer MUST be prepared for a second `OperationResult`
4071
+ carrying the same `operation_id`.
4072
+
4073
+ **The known mechanism** (`compression_lambdas`, CODE READ re-verified at
4074
+ HEAD 2026-08-11 — **not a staging measurement**, and contracts has not
4075
+ measured it either): `SqsHandler` publishes a terminal `failed` result
4076
+ and *then* returns a `BatchItemFailure`. SQS redelivers, the operation
4077
+ reruns, and a second terminal event lands — `completed` if the retry
4078
+ succeeds. **The first `failed` is never retracted.**
4079
+
4080
+ **FIFO deduplication does not collapse the pair**, and the reason is the
4081
+ 5-minute dedup window against the queue visibility timeouts: measured in
4082
+ `compression_terraform` on 2026-08-13, those are **6× the Lambda
4083
+ timeout — 1620s (27 min) fast, 3240s (54 min) medium, 4860s (81 min)
4084
+ slow**. The smallest is over five times the dedup window, so redelivery
4085
+ cannot land inside it.
4086
+
4087
+ ⚠️ **Two corrections to how this was first written here, both from
4088
+ numbers relayed rather than run.** It said the redelivery interval is
4089
+ "≥90 minutes" — **the maximum is 81 and the image/document path is 27**.
4090
+ And it said the payloads "are not byte-identical anyway because COGS
4091
+ metrics are stamped per invocation" — **per-invocation stamping does not
4092
+ GUARANTEE difference**, since two runs can measure the same duration and
4093
+ memory. The dedup argument rests on the window alone; the byte
4094
+ difference is a likelihood, not a mechanism, and it is not load-bearing.
4095
+
4096
+ ### The rule: `completed` supersedes `failed`, REGARDLESS OF ARRIVAL ORDER
4097
+
4098
+ For a given `operation_id`:
4099
+
4100
+ 1. **A `completed` result supersedes a `failed` result**, whichever
4101
+ arrives first. A consumer that has recorded a failure and then
4102
+ receives a completion MUST treat the operation as completed.
4103
+ 2. **A `completed` never supersedes another `completed`.** Keep the
4104
+ first; a second is a duplicate delivery of the same outcome.
4105
+ 3. **Two `failed` results are NOT ordered by this contract.** Keep the
4106
+ first `error_code` and record that another arrived. See the limit
4107
+ below — this is the case the contract cannot yet decide, and saying
4108
+ so is deliberate.
4109
+
4110
+ ### Supersession replaces the WHOLE result, not just the status
4111
+
4112
+ When a `completed` supersedes a `failed`, the superseding result is
4113
+ authoritative **in its entirety**:
4114
+
4115
+ - `error_code`, `error_message` and `is_retryable` from the superseded
4116
+ failure are **discarded**. ⚠️ Retaining them is the obvious bug: an
4117
+ operation reading `status: completed` next to a stale
4118
+ `error_code: timeout` is a record no consumer can interpret, and each
4119
+ one would invent a different reconciliation.
4120
+ - `metrics`, `outputs` and every output field are **the superseding
4121
+ result's**. They are **not merged and not aggregated** — the two sets
4122
+ describe two different invocations, and averaging or summing them
4123
+ would produce a number that describes neither.
4124
+ - If the superseded result is retained for audit, it must be stored
4125
+ **as a separate record**, never merged field-wise into the surviving
4126
+ one.
4127
+
4128
+ ⚠️ **NOT by arrival order, and not by any clock.** Rule 1 is decidable
4129
+ from `status` alone, which is why it works today with no new field: the
4130
+ only known producer of a second terminal is a retry *after* a failure,
4131
+ so `failed` → `completed` is the only transition it generates. A rule
4132
+ that depended on ordering would be undecidable on this message today —
4133
+ see below.
4134
+
4135
+ ### Metric disagreement is NOT evidence of supersession
4136
+
4137
+ Two terminal results for one operation **may disagree on `metrics`**, and
4138
+ that is expected rather than anomalous: COGS fields (`billed_duration_ms`,
4139
+ `memory_mb`, `fargate_runtime_ms`, `duration_ms`) are stamped **per
4140
+ invocation**, so a retry legitimately reports different numbers for the
4141
+ same logical work.
4142
+
4143
+ **A consumer MUST NOT read metric disagreement as evidence that one
4144
+ result supersedes the other.** Supersession is decided by the rule above
4145
+ and by nothing else. Using metrics to arbitrate would make the answer
4146
+ depend on how long a machine happened to take.
4147
+
4148
+ ### 🔴 THE MISSING FIELD, RECORDED AS A FINDING
4149
+
4150
+ **There is no producer-stamped ordering field on `OperationResult`
4151
+ today.** No attempt counter, no producer timestamp, no sequence number —
4152
+ `job_id`, `operation_id`, `operation_type`, `status` and the payload, and
4153
+ nothing that says *which invocation produced this*.
4154
+
4155
+ That absence is why rule 3 exists: **two failures cannot be ordered, and
4156
+ the contract does not pretend otherwise.** Telling consumers to fall back
4157
+ on arrival order would be worse than admitting it — SNS/SQS ordering is a
4158
+ transport property, and a rule that reads it as producer intent is wrong
4159
+ in a way no consumer can detect.
4160
+
4161
+ **The field this needs is an `attempt` counter** — monotonically
4162
+ increasing per `operation_id`, stamped by the producer — because it does
4163
+ not depend on a clock, and two invocations are tens of minutes apart in
4164
+ wall time (27–81 minutes of visibility timeout, measured above) but
4165
+ ADJACENT in attempt number. **Not declared here**: the producer
4166
+ must confirm it can supply it (SQS exposes `ApproximateReceiveCount` to
4167
+ the handler, which is a candidate, not a decision). Specifying a field
4168
+ the producer has not agreed to emit is how a contract acquires a
4169
+ promise nothing keeps.
4170
+
4171
+ Once `attempt` exists, higher wins, and it subsumes rules 1–3.
4172
+
4173
+ ### 🔴 THE PARENT IS NOT COVERED BY THIS RULE, AND THAT IS A GAP
4174
+
4175
+ Consuming an `OperationResult` does not stop at the operation: it
4176
+ derives Job and Workflow status, and `GET /api/workflows/{id}/events`
4177
+ **closes the SSE stream once the workflow reaches a terminal state**.
4178
+
4179
+ ⇒ **A first `failed` can terminalise the parent and disconnect the
4180
+ client BEFORE the superseding `completed` arrives.** Operation-level
4181
+ supersession then repairs the record while the caller who was watching
4182
+ has already been told the workflow failed and has had its stream closed.
4183
+
4184
+ **This contract does NOT specify:**
4185
+
4186
+ - whether a workflow that reached a terminal state may return to a
4187
+ non-terminal one when a superseding `completed` lands;
4188
+ - what a closed SSE stream owes a client afterwards — **nothing here
4189
+ reopens it**, and a client that did not poll will not learn;
4190
+ - whether a re-derived parent status emits any event at all.
4191
+
4192
+ **Those are api's to decide** (their `U8G8ECRD` / `cfaGq9Xt`), and the
4193
+ gap is recorded here rather than resolved, because a rule invented in
4194
+ this repo for behaviour implemented in another is the shape that
4195
+ produced the false paragraph corrected above.
4196
+
4197
+ ⚠️ **Until it is decided, a consumer that treats a workflow-level
4198
+ `failed` as final is CORRECT per this contract and may still be wrong in
4199
+ fact.** Saying so is the honest position; implying the operation-level
4200
+ rule fixes the parent would not be.
4058
4201
 
4059
4202
  ## Single-output vs multi-output completion
4060
4203
 
@@ -5452,10 +5595,29 @@ components:
5452
5595
  Machine-readable operation error code for categorization and retry logic.
5453
5596
  CLOSED typed set (the worker's `ErrorCode` enum); consumers SHOULD map known
5454
5597
  values and MUST degrade an unknown value to a generic reason (a future
5455
- contract version MAY add a variant; additive). Retryable codes are
5456
- auto-redriven (SQS) and EXHAUSTED before a failure surfaces to a consumer, so
5457
- a reported failure is always terminal — `is_retryable` only signals whether
5458
- re-submitting is worthwhile.
5598
+ contract version MAY add a variant; additive).
5599
+
5600
+ 🔴 **A REPORTED FAILURE IS NOT NECESSARILY THE LAST WORD.** This paragraph
5601
+ previously said retryable codes are "auto-redriven (SQS) and EXHAUSTED
5602
+ before a failure surfaces to a consumer, so a reported failure is always
5603
+ terminal". **That is normative and it does not match the worker.**
5604
+ `SqsHandler` publishes a terminal `failed` result and *then* returns a
5605
+ `BatchItemFailure`; SQS redelivers, the operation reruns, and a second
5606
+ terminal event lands — `completed` if the retry succeeds. **The first
5607
+ `failed` is never retracted.**
5608
+
5609
+ ⚠️ **Source and its limit, stated so it is not laundered into something
5610
+ stronger:** that mechanism is a **CODE READ of the worker, re-verified at
5611
+ HEAD 2026-08-11 by `compression_lambdas` and relayed to this repo. It is
5612
+ NOT a staging measurement, and contracts has not measured it either.**
5613
+ The consumer rule below is written to be correct whether or not the
5614
+ sequence occurs — a consumer that never receives a second terminal loses
5615
+ nothing by following it.
5616
+
5617
+ **`is_retryable` is unchanged and still means what it says:** whether
5618
+ re-submitting this operation is worthwhile. It is a property of the
5619
+ error, not a statement about how many times the platform has already
5620
+ tried. See `OperationResult` for the supersession rule.
5459
5621
 
5460
5622
  **Retryable errors** (transient — re-submitting may succeed):
5461
5623
  - s3_download_failed: Source file download failed
@@ -5463,7 +5625,17 @@ components:
5463
5625
  - out_of_memory: Worker ran out of memory
5464
5626
  - timeout: Operation exceeded its time cap
5465
5627
 
5466
- **Non-retryable errors** (terminal — won't clear on retry):
5628
+ **Non-retryable errors** — and `is_retryable` IS the redelivery
5629
+ condition, which makes these effectively final. `SqsHandler` returns a
5630
+ `BatchItemFailure` **only when `error_code.is_retryable()`**; a
5631
+ non-retryable failure is acknowledged and never redelivered, so no second
5632
+ terminal result can follow it. ⇒ **A second terminal result can only
5633
+ follow a RETRYABLE failure.** (Verified in
5634
+ `compression_lambdas` `crates/shared/src/infra/handlers/sqs_handler.rs`
5635
+ at `98309eba901fce4efd82908c143ba2b93002df51`. An earlier draft of this
5636
+ paragraph said redelivery "is not conditioned on this field" — that was
5637
+ wrong, and it was wrong in the direction that would have made consumers
5638
+ defend against a case that cannot occur.)
5467
5639
  - invalid_format: Unsupported or corrupted file
5468
5640
  - format_mismatch: MIME type doesn't match content
5469
5641
  - decode_failed: Cannot decode/parse file
@@ -1,5 +1,5 @@
1
1
  {
2
- "capabilities_version": 180,
2
+ "capabilities_version": 181,
3
3
  "endpoints": {
4
4
  "DELETE /api/auth/account": {
5
5
  "auth": "required",
@@ -83,7 +83,19 @@
83
83
  "availability": "stable",
84
84
  "identity_scoped": true,
85
85
  "operation_id": "streamWorkflowEvents",
86
- "required_tier": null
86
+ "required_tier": null,
87
+ "servers": [
88
+ {
89
+ "description": "Local development. Same origin as the rest of the API \u2014 local runs\ndo NOT reproduce the split-host topology, so a client that works\nlocally has **not** exercised the cross-origin path. Treat a local\npass as evidence about your code and not about the routing.\n",
90
+ "replaces": "http://localhost:8080",
91
+ "url": "http://localhost:8080"
92
+ },
93
+ {
94
+ "description": "Staging stream host. A SEPARATE PUBLIC ENTRY POINT from\n`api.staging.giveitsmaller.com`, which is why it is declared here\nrather than inherited: the API host fronts an integration with no\nresponse-streaming mode, and this is the only endpoint that needs\nstreaming.\n\n\u26a0\ufe0f **THIS HOST ALLOWS EXACTLY ONE CORS ORIGIN, AND IT IS A\nDIFFERENT POLICY FROM THE API HOST.** The stream stack sets\n`cors_allow_origin` (**singular**) to the frontend host alone, in\n**both** environments. The API host sets `cors_allow_origins`\n(**plural**) \u2014 and **the list differs BY ENVIRONMENT**:\n\n staging api host localhost:5173, localhost:3000, www.staging\u2026\n prod api host www.giveitsmaller.com \u2190 NO localhost, never had\n both stream the frontend host only (singular)\n\n\u21d2 **A BROWSER ON localhost CAN CALL THE STAGING API HOST AND\nCANNOT CALL EITHER STREAM HOST.** The break is **conditional on a\nlocal build choosing this host**: the frontend's local build leaves\n`VITE_SSE_BASE_URL` unset and falls back to the API host, so nothing\nbreaks today (measured by `compression_frontend`, 2026-08-14). **A\nclient that DOES point a localhost browser here is blocked, and the\nfailure arrives as a CORS error that reads as a configuration\nmistake in their own app.**\n\n**This is a local-development concern only; prod never permitted\nlocalhost on any host** (measured by `compression_terraform`,\n2026-08-14 \u2014 an earlier version of this note gave the staging list\nwithout saying it was staging's, which would have read as universal\nand turned a dev-experience issue into an apparent launch one).\n\n\u26a0\ufe0f **\"Just add another origin\" is not a CONFIG CHANGE here, and\nthe reason is our implementation rather than an AWS limit.** An API\nGateway **HTTP** API has a native, declarative CORS configuration\nthat takes a LIST and echoes whichever origin matches. A **REST**\nAPI has no equivalent declarative feature \u2014 the value is whatever\nthe preflight MOCK integration and the backend return \u2014 so\nmulti-origin support is possible but must be **built**\n(validate-the-Origin-then-echo), which is a change with its own\ncorrectness risk rather than an extra list entry.\n\n*(An earlier version of this note said a REST API simply cannot do\nit. That is wrong: AWS documents that for proxy integrations the\nBACKEND returns `Access-Control-Allow-Origin`, so per-origin\nresponses are available to anyone willing to implement them.\nStating a platform prohibition where an implementation choice\nexists closes a door that is open.)*\n\nThe credentialed case does foreclose the other escape: with\n`Allow-Credentials: true` the origin header cannot be `*`.\n\nThe same applies to embedded and third-party consumers, and to any\n**browser build of a published SDK**: `@giveitsmaller/sdk` ships a\nbrowser entry point whose client carries `streamEvents`, so this is\na published-surface limit rather than an internal one.\n\nA server-side caller is unaffected. **The origin list is a property\nof the deployed stack, not of this contract** \u2014 it is stated here\nbecause a client author reading only the URL cannot discover it, and\nit changes only in `compression_terraform`.\n\n\u26a0\ufe0f **AUTH ON THIS HOST IS CROSS-ORIGIN, AND `sessionAuth` IS THE\nONE THAT MAY NOT SURVIVE IT.** This operation advertises\n`bearerAuth`, `sessionAuth` and anonymous access \u2014 but the security\nlist describes what the ENDPOINT accepts, not what a browser can\ndeliver to a different origin.\n\n**Cookie domain scope is necessary and NOT sufficient.** A\ncredentialed cross-origin request additionally requires the client\nto opt in (`EventSource { withCredentials: true }`, or `fetch`\nwith `credentials: 'include'`) **and** the server to answer with\n`Access-Control-Allow-Credentials` and a non-wildcard origin. Bearer\nand capability headers likewise need the header to be permitted by\nthe preflight response.\n\n**None of that is verified by this contract, and contracts has not\nmeasured it.** \u21d2 **A browser client SHOULD prefer `bearerAuth` or\nthe anonymous capability header on this host**, and should treat\ncookie-based session auth over it as unproven until somebody\nmeasures a credentialed cross-origin stream.\n",
95
+ "replaces": "https://api.staging.giveitsmaller.com",
96
+ "url": "https://stream.staging.giveitsmaller.com"
97
+ }
98
+ ]
87
99
  },
88
100
  "GET /api/workflows/{id}/status": {
89
101
  "auth": "optional",
@@ -5118,7 +5130,7 @@
5118
5130
  "sole_op": true
5119
5131
  }
5120
5132
  },
5121
- "schema_version": "2.192.0",
5133
+ "schema_version": "2.194.0",
5122
5134
  "source_commit": null,
5123
5135
  "user_tier": null,
5124
5136
  "workflow_features": {
@@ -7188,7 +7188,7 @@
7188
7188
  }
7189
7189
  },
7190
7190
  "preset_config_hash": "sha256:354814f7906f85be6a6ca5ede6c0722c83cdc058fd658a9bb2b0996520466c6d",
7191
- "schema_version": "2.192.0",
7191
+ "schema_version": "2.194.0",
7192
7192
  "sdk_spec_version": "2.3.0",
7193
- "source_hash": "sha256:97fa926554386fafbbb2dcdf0da046d58cd6646b347c16dd0eefe89f679394db"
7193
+ "source_hash": "sha256:d7ff190cf08026ff0029b37b31ca48f6dcaa67827dfc46e1328a9cbb43aada31"
7194
7194
  }
@@ -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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.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.192.0
7
+ * The version of the OpenAPI document: 2.194.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.192.0
5
+ * The version of the OpenAPI document: 2.194.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).