@giveitsmaller/contracts 0.63.0 → 0.67.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 (517) 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 +20 -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 +15 -7
  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/{MediaCategory.js → EndpointProjectionServersInner.d.ts} +42 -34
  156. package/dist/openapi/models/{TierDefaultLimits.js → EndpointProjectionServersInner.js} +17 -15
  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/MetadataResponse.d.ts +1 -1
  220. package/dist/openapi/models/MetadataResponse.js +1 -1
  221. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  222. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  223. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  224. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  225. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  226. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  227. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  228. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  229. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  230. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  231. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  232. package/dist/openapi/models/MultiInputSource.js +1 -1
  233. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  234. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  235. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  236. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  237. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  238. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  239. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  240. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  241. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  242. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  243. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  244. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  245. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  246. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  247. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  248. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  249. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  250. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  251. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  252. package/dist/openapi/models/MultipartPartListing.js +1 -1
  253. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  254. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  255. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  256. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  257. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  258. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  259. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  260. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  261. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  262. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  263. package/dist/openapi/models/NotifyConfig.d.ts +1 -1
  264. package/dist/openapi/models/NotifyConfig.js +1 -1
  265. package/dist/openapi/models/OperationCapability.d.ts +1 -1
  266. package/dist/openapi/models/OperationCapability.js +1 -1
  267. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  268. package/dist/openapi/models/OperationDefinition.js +1 -1
  269. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  270. package/dist/openapi/models/OperationDownload.js +1 -1
  271. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  272. package/dist/openapi/models/OperationInputModel.js +1 -1
  273. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  274. package/dist/openapi/models/OperationResponse.js +1 -1
  275. package/dist/openapi/models/OperationResult.d.ts +1 -1
  276. package/dist/openapi/models/OperationResult.js +1 -1
  277. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  278. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  279. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  280. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  281. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  282. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  283. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  284. package/dist/openapi/models/OperationStatus.js +1 -1
  285. package/dist/openapi/models/OperationType.d.ts +1 -1
  286. package/dist/openapi/models/OperationType.js +1 -1
  287. package/dist/openapi/models/OperationsSchemaResponse.d.ts +22 -11
  288. package/dist/openapi/models/OperationsSchemaResponse.js +1 -4
  289. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  290. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  291. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  292. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  293. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  294. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  295. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  296. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  297. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
  298. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
  299. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  300. package/dist/openapi/models/OptionSchema.js +1 -1
  301. package/dist/openapi/models/OutputProperties.d.ts +1 -1
  302. package/dist/openapi/models/OutputProperties.js +1 -1
  303. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
  304. package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
  305. package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +1 -1
  306. package/dist/openapi/models/PerClassAvailabilityEntry.js +1 -1
  307. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  308. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  309. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  310. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  311. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  312. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  313. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  314. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  315. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  316. package/dist/openapi/models/ProcessingClass.js +1 -1
  317. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  318. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  319. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  320. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  321. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  322. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  323. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  324. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  325. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  326. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  327. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  328. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  329. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  330. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  331. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  332. package/dist/openapi/models/ProcessingPlan.js +1 -1
  333. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  334. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  335. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  336. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  337. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  338. package/dist/openapi/models/ReadinessResponse.js +1 -1
  339. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  340. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  341. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  342. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  343. package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +1 -1
  344. package/dist/openapi/models/RequestAccountDeletion200Response.js +1 -1
  345. package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +1 -1
  346. package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +1 -1
  347. package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +1 -1
  348. package/dist/openapi/models/RequestAccountDeletionRequest.js +1 -1
  349. package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
  350. package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
  351. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  352. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  353. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  354. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  355. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  356. package/dist/openapi/models/RetryResponse.js +1 -1
  357. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  358. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  359. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  360. package/dist/openapi/models/SseCompletionBase.js +1 -1
  361. package/dist/openapi/models/SseEventType.d.ts +1 -1
  362. package/dist/openapi/models/SseEventType.js +1 -1
  363. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  364. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  365. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  366. package/dist/openapi/models/SseJobFailedData.js +1 -1
  367. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  368. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  369. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  370. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  371. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  372. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  373. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  374. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  375. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  376. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  377. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  378. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  379. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  380. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  381. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  382. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  383. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  384. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  385. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  386. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  387. package/dist/openapi/models/TierRestrictionKind.d.ts +19 -5
  388. package/dist/openapi/models/TierRestrictionKind.js +19 -5
  389. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  390. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  391. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  392. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  393. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  394. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  395. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  396. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  397. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  398. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  399. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  400. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  401. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  402. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  403. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  404. package/dist/openapi/models/UploadFile403Response.js +1 -1
  405. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  406. package/dist/openapi/models/UploadFile422Response.js +1 -1
  407. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  408. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  409. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  410. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  411. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  412. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  413. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  414. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  415. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  416. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  417. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  418. package/dist/openapi/models/UploadResponse.js +1 -1
  419. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  420. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  421. package/dist/openapi/models/UploadSource.d.ts +1 -1
  422. package/dist/openapi/models/UploadSource.js +1 -1
  423. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  424. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  425. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  426. package/dist/openapi/models/UploadThresholds.js +1 -1
  427. package/dist/openapi/models/UserTier.d.ts +108 -35
  428. package/dist/openapi/models/UserTier.js +108 -35
  429. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  430. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  431. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  432. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  433. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  434. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  435. package/dist/openapi/models/WarningType.d.ts +1 -1
  436. package/dist/openapi/models/WarningType.js +1 -1
  437. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  438. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  439. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  440. package/dist/openapi/models/WebhookPayload.js +1 -1
  441. package/dist/openapi/models/WorkflowArchiveResponse.d.ts +1 -1
  442. package/dist/openapi/models/WorkflowArchiveResponse.js +1 -1
  443. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
  444. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
  445. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  446. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  447. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  448. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  449. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  450. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  451. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  452. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  453. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  454. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  455. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  456. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  457. package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
  458. package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
  459. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  460. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  461. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  462. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  463. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  464. package/dist/openapi/models/WorkflowEdge.js +1 -1
  465. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  466. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  467. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  468. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  469. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  470. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  471. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  472. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  473. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  474. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  475. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  476. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  477. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  478. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  479. package/dist/openapi/models/WorkflowRestoreResponse.d.ts +1 -1
  480. package/dist/openapi/models/WorkflowRestoreResponse.js +1 -1
  481. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
  482. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
  483. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  484. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  485. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  486. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  487. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  488. package/dist/openapi/models/WorkflowSource.js +1 -1
  489. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  490. package/dist/openapi/models/WorkflowStatus.js +1 -1
  491. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  492. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  493. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  494. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  495. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  496. package/dist/openapi/models/WorkflowSummary.js +1 -1
  497. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  498. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  499. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  500. package/dist/openapi/models/WorkflowWarning.js +1 -1
  501. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  502. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  503. package/dist/openapi/models/index.d.ts +1 -4
  504. package/dist/openapi/models/index.js +1 -4
  505. package/dist/openapi/runtime.d.ts +1 -1
  506. package/dist/openapi/runtime.js +1 -1
  507. package/dist/operations/metadata-types.d.ts +1 -1
  508. package/openapi/README.md +1 -1
  509. package/openapi/api.yaml +628 -200
  510. package/operation-capabilities/operation-capabilities.json +1 -1
  511. package/package.json +7 -3
  512. package/dist/openapi/models/MediaCategory.d.ts +0 -31
  513. package/dist/openapi/models/TierDefaultLimits.d.ts +0 -59
  514. package/dist/openapi/models/TierDefaults.d.ts +0 -66
  515. package/dist/openapi/models/TierDefaults.js +0 -49
  516. package/dist/openapi/models/TierDefaultsByAudience.d.ts +0 -73
  517. package/dist/openapi/models/TierDefaultsByAudience.js +0 -60
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.67.0` |
9
+ | Generated from spec | **`v2.196.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.196.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.196.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": 182,
3
3
  "endpoints": {
4
4
  "DELETE /api/auth/account": {
5
5
  "auth": "required",
@@ -83,7 +83,24 @@
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": "Production stream host. Declared 2026-08-18 after **routing** was\nmeasured; see the two headings below for exactly what that does and\ndoes not cover.\n\n\ud83d\udd34 **THIS ENTRY WAS DELIBERATELY WITHHELD FROM 2026-08-14 TO\n2026-08-18, AND THE REASON IT LANDED IS NOT THAT THE ORIGINAL GATE\nWAS MET.** The gate was *\"prod has never had a proven stream; a\ndeclared host would be a contract fact pointing at nothing \u2014 worse\nthan the gap, because it looks resolved.\"* What changed is that **the\ngap was found to be already occupied**:\n`compression_frontend/.github/workflows/deploy-env.yml` hardcodes\n`VITE_SSE_BASE_URL: https://stream.giveitsmaller.com` for prod, so\n**the production frontend has been routing SSE to this host all\nalong, undeclared.** Contract silence was not preventing anyone from\ndepending on the host; it was preventing them from *knowing* about\nit \u2014 which is the undeclared per-client convention this whole\ndeclaration exists to end.\n\n### WHAT IS MEASURED (2026-08-18, prod, by `compression_e2e`)\n\n- An **authenticated stream against a real prod workflow** returned\n `200` with `content-type: text/event-stream`, replayed\n `operation.progress` at 10 / 50 / 90, then `operation.completed`\n carrying a real presigned S3 `download_url`, `size_bytes` 246217,\n `compression_ratio` 0.3288 \u2014 then `job.completed` and\n `workflow.completed`.\n- An **unauthenticated** request returns the full localised error\n envelope (`WORKFLOW_NOT_FOUND` with `message_key`,\n `Content-Language: en-GB`, `Vary`, HSTS), byte-identical to\n `api.giveitsmaller.com` \u2014 so this host reaches the **real\n application**, not an edge stub or a parked custom domain.\n- **CORS is correct on both hosts**: preflight `200`,\n `Access-Control-Allow-Origin` exactly\n `https://www.giveitsmaller.com`, `Allow-Credentials: true`,\n `Authorization` among the allowed headers.\n\n### \u26a0\ufe0f WHAT IS **NOT** MEASURED: DURATION \u2014 THE PROPERTY THIS HOST EXISTS FOR\n\n**The split host exists because `api.*` is an API Gateway HTTP API\nwith a 30-second hard ceiling** (staging measured it `503`-ing at\n**29.35s**, to the millisecond) and `responseTransferMode: STREAM` is\nREST-only. **Nothing has yet shown that a stream on THIS host\nsurvives past that ceiling.**\n\nThe attempt was made and could not answer: prod holds exactly one\nworkflow and it was already **terminal**, so the server correctly\nreplayed history and closed on the terminal frame \u2014 total elapsed\n**0.355s**. \u21d2 **A stream that closes at 0.4s because the job finished\nsays nothing about whether a stream that WANTED to stay open would\nsurvive to 35s.** It is a non-answer, not a negative result.\n\n**The discriminator, named so nobody re-derives it:** a\n**NON-TERMINAL** prod job, streamed and held, reporting either the\nlast-byte timestamp or that the connection was still open at **35s+**.\nOne request; no browser needed. Until then, treat long-lived prod\nstreams as unproven on this host \u2014 and note that a client falling\nback to `api.giveitsmaller.com` is *provably* subject to the 30s\nceiling, so this entry cannot be worse than the fallback.\n\n\u26a0\ufe0f **The BROWSER path is also unmeasured.** The evidence above is\nHTTP-layer. The CORS preflight is correct, which is the part a\nbrowser needs, but no browser client has been observed consuming this\nstream in production.\n\n**This entry declares ROUTING. It does not assert that prod SSE\nworks** \u2014 do not let it be quoted as though it did.\n\nThe CORS scope, auth and cross-origin caveats stated on the staging\nentry above apply here too, with one difference already noted there:\n**prod's API host has never permitted `localhost`.**\n",
95
+ "replaces": "https://api.giveitsmaller.com",
96
+ "url": "https://stream.giveitsmaller.com"
97
+ },
98
+ {
99
+ "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.**\n\n\ud83d\udd34 **This passage used to conclude \"a browser client SHOULD prefer\n`bearerAuth` or the anonymous capability header on this host, and\nshould treat cookie-based session auth as unproven\". DO NOT\nREINSTATE IT.** For an **owned** stream the shipped browser client\nhas no bearer token on its runtime path at all, so that advice named\na credential the caller does not possess \u2014 leaving a logged-in user\nwith nothing to send. See **AUTH ON THE STREAM HOST** on the\noperation below, which is the single place this question is\nanswered; the cross-origin caveats above remain true and are what\nthat section is qualified by.\n",
100
+ "replaces": "https://api.staging.giveitsmaller.com",
101
+ "url": "https://stream.staging.giveitsmaller.com"
102
+ }
103
+ ]
87
104
  },
88
105
  "GET /api/workflows/{id}/status": {
89
106
  "auth": "optional",
@@ -5118,7 +5135,7 @@
5118
5135
  "sole_op": true
5119
5136
  }
5120
5137
  },
5121
- "schema_version": "2.192.0",
5138
+ "schema_version": "2.196.0",
5122
5139
  "source_commit": null,
5123
5140
  "user_tier": null,
5124
5141
  "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.196.0",
7192
7192
  "sdk_spec_version": "2.3.0",
7193
- "source_hash": "sha256:97fa926554386fafbbb2dcdf0da046d58cd6646b347c16dd0eefe89f679394db"
7193
+ "source_hash": "sha256:fdc78fe3247c6257926d39bd91dd179e26b07cd20bbf1ebdc810a6a134c2c231"
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.196.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.196.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.196.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -23,15 +23,23 @@ import type { AccountLimitsLimits } from './AccountLimitsLimits.js';
23
23
  * (`UserTier.maxFileSizeBytes` — the request-level tier quota the
24
24
  * upload endpoints enforce). **Distinct** from the per-operation
25
25
  * processing ceiling `max_input_size_bytes` in operation schemas
26
- * (different axis AND number). Tier defaults: free 10 MiB, pro 5 GiB,
27
- * enterprise 100 GiB.
26
+ * (different axis AND number).
27
+ * ⚠️ **The per-tier byte defaults are deliberately NOT restated here.**
28
+ * This line used to list them for `free` / `pro` / `enterprise` and
29
+ * **silently omitted `max`** — a tier the `UserTier` enum declares. The
30
+ * response itself carries the answer per caller (`tier_default` beside
31
+ * `effective`), which is override-aware in a way a static table can
32
+ * never be.
28
33
  * - `max_total_input_size_bytes`: the effective merge combined-input
29
34
  * size cap (the summed-inputs ceiling). Same key as the
30
35
  * operation-schema merge band; the band is processing-class +
31
- * tier dependent (`short_form_concat` baseline 1 GiB; the
32
- * `long_form_re_encode` band where the tier permits it — Pro 5 GB,
33
- * Enterprise 120 GB). The server resolves the effective value for
34
- * the caller.
36
+ * tier dependent. **The server resolves the effective value for the
37
+ * caller** and returns it here — that is the point of this endpoint.
38
+ * ⚠️ **A THIRD restated per-tier table lived on this line** (it named
39
+ * two tiers' band ceilings and, like the other two, omitted `max`). The
40
+ * machine-readable source is `per_tier_constraints` on the operation
41
+ * schema's `processing_class`; it is generated, so it cannot drift from
42
+ * the schemas the way a sentence here does.
35
43
  *
36
44
  * @export
37
45
  * @interface AccountLimits
@@ -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.196.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.196.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.196.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.196.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.196.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.196.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.196.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.196.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.196.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.196.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).