@giveitsmaller/contracts 0.61.0 → 0.63.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 (521) hide show
  1. package/README.md +34 -0
  2. package/accepted-options/accepted-options.json +1 -1
  3. package/accepted-options/image-output-routes.json +1 -1
  4. package/asyncapi/README.md +16 -0
  5. package/asyncapi/events.yaml +22 -0
  6. package/availability/README.md +25 -0
  7. package/availability/availability.json +32 -11
  8. package/code-builder/code-builder-metadata.json +5 -5
  9. package/dist/openapi/models/AccountLimitEntry.d.ts +7 -5
  10. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  11. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  12. package/dist/openapi/models/AccountLimits.js +1 -1
  13. package/dist/openapi/models/AccountLimitsLimits.d.ts +7 -1
  14. package/dist/openapi/models/AccountLimitsLimits.js +3 -1
  15. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  16. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  17. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  18. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  19. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  20. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  21. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  22. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  23. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  24. package/dist/openapi/models/AuthErrorType.js +1 -1
  25. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  26. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  27. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  28. package/dist/openapi/models/AvailabilityValue.js +1 -1
  29. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  30. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  31. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  32. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  33. package/dist/openapi/models/BillingCheckoutRequest.d.ts +1 -1
  34. package/dist/openapi/models/BillingCheckoutRequest.js +1 -1
  35. package/dist/openapi/models/BillingCheckoutSession.d.ts +1 -1
  36. package/dist/openapi/models/BillingCheckoutSession.js +1 -1
  37. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +1 -1
  38. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +1 -1
  39. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  40. package/dist/openapi/models/CallbackEventType.js +1 -1
  41. package/dist/openapi/models/CancelAccountDeletion200Response.d.ts +46 -0
  42. package/dist/openapi/models/CancelAccountDeletion200Response.js +54 -0
  43. package/dist/openapi/models/CancelAccountDeletion200ResponseData.d.ts +32 -0
  44. package/dist/openapi/models/CancelAccountDeletion200ResponseData.js +43 -0
  45. package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
  46. package/dist/openapi/models/CapabilityCondition.js +1 -1
  47. package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
  48. package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
  49. package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
  50. package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
  51. package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
  52. package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
  53. package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
  54. package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
  55. package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
  56. package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
  57. package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +3 -10
  58. package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -7
  59. package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
  60. package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
  61. package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
  62. package/dist/openapi/models/CapabilityConstraint.js +1 -1
  63. package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
  64. package/dist/openapi/models/CapabilityInputSpec.js +1 -1
  65. package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
  66. package/dist/openapi/models/CapabilityProduces.js +1 -1
  67. package/dist/openapi/models/CapabilityProducesOneOf.d.ts +3 -10
  68. package/dist/openapi/models/CapabilityProducesOneOf.js +1 -7
  69. package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
  70. package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
  71. package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
  72. package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
  73. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  74. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  75. package/dist/openapi/models/CodegenSource.d.ts +1 -1
  76. package/dist/openapi/models/CodegenSource.js +1 -1
  77. package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
  78. package/dist/openapi/models/CodegenSourceInput.js +1 -1
  79. package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
  80. package/dist/openapi/models/CodegenSourceJob.js +1 -1
  81. package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
  82. package/dist/openapi/models/CodegenSourceJobSource.js +1 -1
  83. package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
  84. package/dist/openapi/models/CodegenSourceOperation.js +1 -1
  85. package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +21 -4
  86. package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
  87. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  88. package/dist/openapi/models/CompositionPlan.js +1 -1
  89. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  90. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  91. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  92. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  93. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  94. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  95. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  96. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  97. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  98. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  99. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  100. package/dist/openapi/models/ConnectionSource.js +1 -1
  101. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  102. package/dist/openapi/models/ContactRequest.js +1 -1
  103. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  104. package/dist/openapi/models/ContactSubject.js +1 -1
  105. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  106. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  107. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  108. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  109. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  110. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  111. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  112. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  113. package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +1 -1
  114. package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +1 -1
  115. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  116. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  117. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  118. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  119. package/dist/openapi/models/CreateWorkflow401Response.d.ts +1 -1
  120. package/dist/openapi/models/CreateWorkflow401Response.js +1 -1
  121. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  122. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  123. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  124. package/dist/openapi/models/CreditTransaction.js +1 -1
  125. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  126. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  127. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  128. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  129. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  130. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  131. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  132. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  133. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  134. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  135. package/dist/openapi/models/Delivery.d.ts +1 -1
  136. package/dist/openapi/models/Delivery.js +1 -1
  137. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  138. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  139. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  140. package/dist/openapi/models/DeliveryPlan.js +1 -1
  141. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  142. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  143. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  144. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  145. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  146. package/dist/openapi/models/DeliverySelection.js +1 -1
  147. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  148. package/dist/openapi/models/DownloadBundle.js +1 -1
  149. package/dist/openapi/models/DroppedOption.d.ts +1 -1
  150. package/dist/openapi/models/DroppedOption.js +1 -1
  151. package/dist/openapi/models/EmailNotify.d.ts +1 -1
  152. package/dist/openapi/models/EmailNotify.js +1 -1
  153. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  154. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  155. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  156. package/dist/openapi/models/EndpointProjection.js +1 -1
  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 +46 -0
  164. package/dist/openapi/models/ExportAccountData200Response.js +54 -0
  165. package/dist/openapi/models/ExportAccountData200ResponseData.d.ts +62 -0
  166. package/dist/openapi/models/ExportAccountData200ResponseData.js +55 -0
  167. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  168. package/dist/openapi/models/ExternalDestination.js +1 -1
  169. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  170. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  171. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  172. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  173. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  174. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  175. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  176. package/dist/openapi/models/ExternalImportToken.js +1 -1
  177. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  178. package/dist/openapi/models/ExternalSource.js +1 -1
  179. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  180. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  181. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  182. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  183. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  184. package/dist/openapi/models/FeatureViolation.js +1 -1
  185. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  186. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  187. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  188. package/dist/openapi/models/JobDefinition.js +1 -1
  189. package/dist/openapi/models/JobDownload.d.ts +1 -1
  190. package/dist/openapi/models/JobDownload.js +1 -1
  191. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  192. package/dist/openapi/models/JobInputV2.js +1 -1
  193. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  194. package/dist/openapi/models/JobMediaClass.js +1 -1
  195. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  196. package/dist/openapi/models/JobOutputSource.js +1 -1
  197. package/dist/openapi/models/JobResponse.d.ts +1 -1
  198. package/dist/openapi/models/JobResponse.js +1 -1
  199. package/dist/openapi/models/JobStatus.d.ts +1 -1
  200. package/dist/openapi/models/JobStatus.js +1 -1
  201. package/dist/openapi/models/JobType.d.ts +1 -1
  202. package/dist/openapi/models/JobType.js +1 -1
  203. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  204. package/dist/openapi/models/LivenessResponse.js +1 -1
  205. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  206. package/dist/openapi/models/LoginUser200Response.js +1 -1
  207. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  208. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  209. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  210. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  211. package/dist/openapi/models/LoginUser401Response.d.ts +1 -1
  212. package/dist/openapi/models/LoginUser401Response.js +1 -1
  213. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  214. package/dist/openapi/models/LoginUserRequest.js +1 -1
  215. package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +1 -1
  216. package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
  217. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
  218. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
  219. package/dist/openapi/models/MediaCategory.d.ts +31 -0
  220. package/dist/openapi/models/MediaCategory.js +49 -0
  221. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  222. package/dist/openapi/models/MetadataResponse.js +1 -1
  223. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  224. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  225. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  226. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  227. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  228. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  229. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  230. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  231. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  232. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  233. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  234. package/dist/openapi/models/MultiInputSource.js +1 -1
  235. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  236. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  237. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  238. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  239. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  240. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  241. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  242. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  243. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  244. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  245. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  246. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  247. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  248. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  249. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  250. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  251. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  252. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  253. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  254. package/dist/openapi/models/MultipartPartListing.js +1 -1
  255. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  256. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  257. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  258. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  259. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  260. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  261. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  262. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  263. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  264. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  265. package/dist/openapi/models/NotifyConfig.d.ts +1 -1
  266. package/dist/openapi/models/NotifyConfig.js +1 -1
  267. package/dist/openapi/models/OperationCapability.d.ts +1 -1
  268. package/dist/openapi/models/OperationCapability.js +1 -1
  269. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  270. package/dist/openapi/models/OperationDefinition.js +1 -1
  271. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  272. package/dist/openapi/models/OperationDownload.js +1 -1
  273. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  274. package/dist/openapi/models/OperationInputModel.js +1 -1
  275. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  276. package/dist/openapi/models/OperationResponse.js +1 -1
  277. package/dist/openapi/models/OperationResult.d.ts +1 -1
  278. package/dist/openapi/models/OperationResult.js +1 -1
  279. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  280. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  281. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  282. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  283. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  284. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  285. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  286. package/dist/openapi/models/OperationStatus.js +1 -1
  287. package/dist/openapi/models/OperationType.d.ts +1 -1
  288. package/dist/openapi/models/OperationType.js +1 -1
  289. package/dist/openapi/models/OperationsSchemaResponse.d.ts +8 -1
  290. package/dist/openapi/models/OperationsSchemaResponse.js +4 -1
  291. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  292. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  293. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  294. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  295. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  296. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  297. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  298. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  299. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
  300. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
  301. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  302. package/dist/openapi/models/OptionSchema.js +1 -1
  303. package/dist/openapi/models/OutputProperties.d.ts +1 -1
  304. package/dist/openapi/models/OutputProperties.js +1 -1
  305. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
  306. package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
  307. package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +1 -1
  308. package/dist/openapi/models/PerClassAvailabilityEntry.js +1 -1
  309. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  310. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  311. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  312. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  313. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  314. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  315. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  316. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  317. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  318. package/dist/openapi/models/ProcessingClass.js +1 -1
  319. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  320. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  321. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  322. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  323. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  324. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  325. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  326. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  327. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  328. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  329. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  330. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  331. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  332. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  333. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  334. package/dist/openapi/models/ProcessingPlan.js +1 -1
  335. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  336. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  337. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  338. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  339. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  340. package/dist/openapi/models/ReadinessResponse.js +1 -1
  341. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  342. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  343. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  344. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  345. package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +46 -0
  346. package/dist/openapi/models/RequestAccountDeletion200Response.js +54 -0
  347. package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +41 -0
  348. package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +47 -0
  349. package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +32 -0
  350. package/dist/openapi/models/RequestAccountDeletionRequest.js +43 -0
  351. package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
  352. package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
  353. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  354. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  355. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  356. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  357. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  358. package/dist/openapi/models/RetryResponse.js +1 -1
  359. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  360. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  361. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  362. package/dist/openapi/models/SseCompletionBase.js +1 -1
  363. package/dist/openapi/models/SseEventType.d.ts +1 -1
  364. package/dist/openapi/models/SseEventType.js +1 -1
  365. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  366. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  367. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  368. package/dist/openapi/models/SseJobFailedData.js +1 -1
  369. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  370. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  371. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  372. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  373. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  374. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  375. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  376. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  377. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  378. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  379. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  380. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  381. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  382. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  383. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  384. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  385. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  386. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  387. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  388. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  389. package/dist/openapi/models/TierDefaultLimits.d.ts +59 -0
  390. package/dist/openapi/models/TierDefaultLimits.js +47 -0
  391. package/dist/openapi/models/TierDefaults.d.ts +66 -0
  392. package/dist/openapi/models/TierDefaults.js +49 -0
  393. package/dist/openapi/models/TierDefaultsByAudience.d.ts +73 -0
  394. package/dist/openapi/models/TierDefaultsByAudience.js +60 -0
  395. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  396. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  397. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  398. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  399. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  400. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  401. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +7 -28
  402. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -19
  403. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  404. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  405. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  406. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  407. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  408. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  409. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  410. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  411. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  412. package/dist/openapi/models/UploadFile403Response.js +1 -1
  413. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  414. package/dist/openapi/models/UploadFile422Response.js +1 -1
  415. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  416. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  417. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  418. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  419. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  420. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  421. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  422. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  423. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  424. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  425. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  426. package/dist/openapi/models/UploadResponse.js +1 -1
  427. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  428. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  429. package/dist/openapi/models/UploadSource.d.ts +1 -1
  430. package/dist/openapi/models/UploadSource.js +1 -1
  431. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  432. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  433. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  434. package/dist/openapi/models/UploadThresholds.js +1 -1
  435. package/dist/openapi/models/UserTier.d.ts +1 -1
  436. package/dist/openapi/models/UserTier.js +1 -1
  437. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  438. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  439. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  440. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  441. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  442. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  443. package/dist/openapi/models/WarningType.d.ts +1 -1
  444. package/dist/openapi/models/WarningType.js +1 -1
  445. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  446. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  447. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  448. package/dist/openapi/models/WebhookPayload.js +1 -1
  449. package/dist/openapi/models/WorkflowArchiveResponse.d.ts +3 -10
  450. package/dist/openapi/models/WorkflowArchiveResponse.js +1 -7
  451. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
  452. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
  453. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  454. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  455. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  456. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  457. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  458. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  459. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  460. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  461. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  462. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  463. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  464. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  465. package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
  466. package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
  467. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  468. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  469. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  470. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  471. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  472. package/dist/openapi/models/WorkflowEdge.js +1 -1
  473. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  474. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  475. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  476. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  477. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  478. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  479. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  480. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  481. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  482. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  483. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  484. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  485. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  486. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  487. package/dist/openapi/models/WorkflowRestoreResponse.d.ts +3 -10
  488. package/dist/openapi/models/WorkflowRestoreResponse.js +1 -7
  489. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
  490. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
  491. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  492. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  493. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  494. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  495. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  496. package/dist/openapi/models/WorkflowSource.js +1 -1
  497. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  498. package/dist/openapi/models/WorkflowStatus.js +1 -1
  499. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  500. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  501. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  502. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  503. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  504. package/dist/openapi/models/WorkflowSummary.js +1 -1
  505. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  506. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  507. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  508. package/dist/openapi/models/WorkflowWarning.js +1 -1
  509. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  510. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  511. package/dist/openapi/models/index.d.ts +11 -0
  512. package/dist/openapi/models/index.js +11 -0
  513. package/dist/openapi/runtime.d.ts +1 -1
  514. package/dist/openapi/runtime.js +1 -1
  515. package/openapi/README.md +17 -0
  516. package/openapi/api.yaml +703 -22
  517. package/operation-capabilities/operation-capabilities.json +1 -1
  518. package/operations/README.md +17 -0
  519. package/operations/schemas/compress.yaml +57 -3
  520. package/operations/schemas/render_variants.yaml +28 -3
  521. package/package.json +4 -2
package/openapi/api.yaml CHANGED
@@ -89,15 +89,28 @@ info:
89
89
  of truth instead of hardcoding magic numbers. A runtime
90
90
  `GET /api/uploads/limits` endpoint for dynamic discovery
91
91
  (per-tier / per-environment overrides) is a deferred follow-up.
92
- version: 2.189.0
92
+ version: 2.192.0
93
93
  contact:
94
94
  name: API Support
95
95
 
96
+ # The production host was ABSENT from this block entirely until 2026-08-11 —
97
+ # for EVERY endpoint, not just one. That was not merely untidy: prod's SSE
98
+ # consumer fell back to the wrong host precisely because the correct one lived
99
+ # only in deployment config, where nothing could catch the divergence. A host
100
+ # that exists only in an env var is a convention; a host declared here is a fact
101
+ # every generated client picks up.
102
+ #
103
+ # The staging/prod asymmetry is DELIBERATE and must not be "tidied": prod sets
104
+ # `environment_subdomain` to empty, so the domain base IS the root; staging sets
105
+ # it to `staging`, hence the extra label. Values resolved from terraform code by
106
+ # the terraform session, not from anyone's memory.
96
107
  servers:
97
108
  - url: http://localhost:8080
98
109
  description: Local development
99
110
  - url: https://api.staging.giveitsmaller.com
100
111
  description: Staging environment
112
+ - url: https://api.giveitsmaller.com
113
+ description: Production environment
101
114
 
102
115
  tags:
103
116
  - name: Upload
@@ -1164,9 +1177,30 @@ paths:
1164
1177
  NOT inline per-operation `result_metadata` or output details (avoids
1165
1178
  N×M×K payload blow-up). Drill in via `GET /api/workflows/{id}/status`
1166
1179
  (per-op detail incl. `result_metadata`) and
1167
- `GET /api/workflows/{id}/downloads` (deliverables). Rows persist until
1168
- GDPR purge — workflows whose 24h download window has expired are still
1169
- listed. Per ticket [`nLK1IO1k`](https://trello.com/c/nLK1IO1k) (A1).
1180
+ `GET /api/workflows/{id}/downloads` (deliverables).
1181
+
1182
+ **Rows persist until GDPR purge — a workflow whose outputs have been
1183
+ retention-purged is STILL LISTED.** So a row appearing here does not
1184
+ imply its deliverables are still downloadable; read
1185
+ `retention_expires_at` on the downloads response for that.
1186
+
1187
+ ⚠️ **This sentence used to say "whose 24h download window has expired".
1188
+ That figure was WRONG and was the only place in this spec it appeared.**
1189
+ The download-retention window is **per-tier — free 7 days / paid 30
1190
+ days / enterprise custom** — computed from the workflow's `created_at`
1191
+ and reported as `retention_expires_at` on
1192
+ `GET /api/workflows/{id}/downloads`
1193
+ ([`G58ei6Z9`](https://trello.com/c/G58ei6Z9)). The stale clause almost
1194
+ certainly predates that field and nobody re-read it when the field
1195
+ landed.
1196
+ **It mattered because THREE clocks are involved and this was the one in
1197
+ the casually-read place:** `bundle.expires_at` is the short-lived
1198
+ pre-signed URL expiry (**access**), `retention_expires_at` is when the
1199
+ deliverables are removed (**data**), and the workflow's own
1200
+ `expires_at` is a record TTL on the paused path. **A download link
1201
+ expiring does not mean the object is gone** — a distinction this spec
1202
+ states correctly on `retention_expires_at` and used to contradict here.
1203
+ Per ticket [`nLK1IO1k`](https://trello.com/c/nLK1IO1k) (A1).
1170
1204
  operationId: listWorkflows
1171
1205
  security: [{bearerAuth: []}, {sessionAuth: []}] # required (explicit 401 — user-scoped list, no anonymous access)
1172
1206
  x-identity-scoped: true # caller's own workflows — implicit identity-scoped, per ADR-0016 D3 (cf. credits/usage)
@@ -1195,7 +1229,21 @@ paths:
1195
1229
  - name: archived
1196
1230
  in: query
1197
1231
  required: false
1198
- description: |
1232
+ x-availability: planned
1233
+ description: |
1234
+ 🔴 **NOT IMPLEMENTED — see the `planned` note below. A server
1235
+ that does not support this parameter SILENTLY IGNORES IT and
1236
+ returns the DEFAULT (non-archived) list.** That is the dangerous
1237
+ half of this feature and the reason it is called out here rather
1238
+ than only on the endpoints: `POST .../archive` would 404, which is
1239
+ loud and teaches the caller immediately, whereas
1240
+ **`archived=true` returns a 200 carrying the wrong rows.** A
1241
+ consumer asking for their archive receives their NON-archived
1242
+ workflows and is told nothing. **Silent wrong data beats a 404
1243
+ every time for damage.**
1244
+ Until the server implements it, a client MUST NOT present an
1245
+ "archived" view built on this parameter.
1246
+
1199
1247
  Archived-row filter (ticket
1200
1248
  [`j2s6T2qf`](https://trello.com/c/j2s6T2qf)). **Default `false`**:
1201
1249
  archived workflows are EXCLUDED, so archiving declutters the
@@ -2720,6 +2768,29 @@ paths:
2720
2768
  a **409** — cancel it first (`POST /api/workflows/{id}/cancel`) or wait
2721
2769
  for it to finish. Archiving does NOT change the workflow's status; it
2722
2770
  stays terminal and the response echoes it unchanged.
2771
+ # ⚠️ NO PUBLIC HTTP ROUTE EXISTS FOR THIS. Downgraded to `planned`
2772
+ # 2026-08-12 (yi4TDKVJ, raised by sdks + codex) on POSITIVE evidence, as
2773
+ # standing policy 3 requires — not on an absent attestation, which policy
2774
+ # 4 says is not enough:
2775
+ # * no `#[Route(...)]` matching archive/restore anywhere in
2776
+ # compression_api's `src/`;
2777
+ # * no `api/workflows/{id}/archive` or `/restore` path in `src/` or
2778
+ # `config/`;
2779
+ # * verified independently by sdks (named commit) and by codex reading
2780
+ # the list controller and its repository.
2781
+ #
2782
+ # ⚠️ CORRECTION TO THE RELAYED EVIDENCE, because it changes the ticket
2783
+ # rather than the verdict: the claim reaching this repo was that a grep
2784
+ # for `archiveWorkflow|/archive|archived` over `src` and `config`
2785
+ # "returns NO OUTPUT". IT DOES NOT — `ArchiveWorkflowCommand`,
2786
+ # `ArchiveWorkflowCommandHandler` and a `RestoreWorkflow` command all
2787
+ # EXIST, and there is an ADMIN CRUD controller that archives. So this is
2788
+ # **implemented in the application layer and not exposed on the public
2789
+ # API**, which is a different thing from "nothing behind it". The verdict
2790
+ # is unchanged — an unroutable capability is unreachable, so `planned` is
2791
+ # correct — but anyone scoping the work should know a handler already
2792
+ # exists.
2793
+ x-availability: planned
2723
2794
  operationId: archiveWorkflow
2724
2795
  security: [{bearerAuth: []}, {sessionAuth: []}] # required (explicit 401 in response set)
2725
2796
  x-identity-scoped: true # workflow-ownership-scoped per ADR-0016 D3
@@ -2811,6 +2882,29 @@ paths:
2811
2882
  `status` is the workflow's unchanged status (any `WorkflowStatus`
2812
2883
  value), not a fixed terminal subset. There is no 409: un-archiving is
2813
2884
  always safe.
2885
+ # ⚠️ NO PUBLIC HTTP ROUTE EXISTS FOR THIS. Downgraded to `planned`
2886
+ # 2026-08-12 (yi4TDKVJ, raised by sdks + codex) on POSITIVE evidence, as
2887
+ # standing policy 3 requires — not on an absent attestation, which policy
2888
+ # 4 says is not enough:
2889
+ # * no `#[Route(...)]` matching archive/restore anywhere in
2890
+ # compression_api's `src/`;
2891
+ # * no `api/workflows/{id}/archive` or `/restore` path in `src/` or
2892
+ # `config/`;
2893
+ # * verified independently by sdks (named commit) and by codex reading
2894
+ # the list controller and its repository.
2895
+ #
2896
+ # ⚠️ CORRECTION TO THE RELAYED EVIDENCE, because it changes the ticket
2897
+ # rather than the verdict: the claim reaching this repo was that a grep
2898
+ # for `archiveWorkflow|/archive|archived` over `src` and `config`
2899
+ # "returns NO OUTPUT". IT DOES NOT — `ArchiveWorkflowCommand`,
2900
+ # `ArchiveWorkflowCommandHandler` and a `RestoreWorkflow` command all
2901
+ # EXIST, and there is an ADMIN CRUD controller that archives. So this is
2902
+ # **implemented in the application layer and not exposed on the public
2903
+ # API**, which is a different thing from "nothing behind it". The verdict
2904
+ # is unchanged — an unroutable capability is unreachable, so `planned` is
2905
+ # correct — but anyone scoping the work should know a handler already
2906
+ # exists.
2907
+ x-availability: planned
2814
2908
  operationId: restoreWorkflow
2815
2909
  security: [{bearerAuth: []}, {sessionAuth: []}] # required (explicit 401 in response set)
2816
2910
  x-identity-scoped: true # workflow-ownership-scoped per ADR-0016 D3
@@ -3996,6 +4090,402 @@ paths:
3996
4090
  schema:
3997
4091
  $ref: '#/components/schemas/ErrorEnvelope'
3998
4092
 
4093
+ /api/auth/account:
4094
+ delete:
4095
+ summary: Request deletion of the authenticated user's account
4096
+ # THE CONTRACT IS CATCHING UP TO SHIPPED BEHAVIOUR. Every status code,
4097
+ # error code and wire key below was read from the implementation
4098
+ # (AccountDeletionController + its feature tests), not designed here.
4099
+ #
4100
+ # ⚠️ WHAT HAPPENS TO STORED OUTPUTS IS DELIBERATELY NOT DECLARED. There
4101
+ # is a confirmed retention defect under a fleet-wide fix freeze, and a
4102
+ # deletion GUARANTEE is the one claim this repo must not lead the
4103
+ # implementation on: `planned` assumes the caller gets a refusal it can
4104
+ # see, and a retention gap refuses nothing. Declaring removal before
4105
+ # removal works would put a false claim on a privacy path. Tracked on
4106
+ # ticket [`NSIPubON`](https://trello.com/c/NSIPubON) as a USER decision,
4107
+ # alongside what happens to purchased credits.
4108
+ description: |
4109
+ Requests deletion of the caller's own account. **This is a request,
4110
+ not an immediate deletion** — it opens a **30-day grace period**
4111
+ during which `POST /api/auth/account/cancel-deletion` reverses it.
4112
+
4113
+ Re-verifies the caller's password: `current_password` is required.
4114
+
4115
+ **Deletion is REFUSED while the account has workflows in progress**
4116
+ (`409 WORKFLOWS_IN_PROGRESS`). A client must be prepared for that
4117
+ branch — it is not an error state the user can resolve by retrying
4118
+ immediately, and it is the answer to "what happens to my in-flight
4119
+ work": nothing, because the deletion does not start.
4120
+
4121
+ **Side effect a caller cannot otherwise discover:** a successful
4122
+ request **revokes the account's API keys immediately**, before the
4123
+ grace period elapses, and reports how many in `api_keys_revoked`.
4124
+ Cancelling the deletion does **not** restore them.
4125
+
4126
+ Hard deletion runs after grace expiry and is **not exposed to
4127
+ callers**; the terminal states surface as the `account_deleted` and
4128
+ `account_deletion_expired` error codes on subsequent requests.
4129
+ operationId: requestAccountDeletion
4130
+ security: [{bearerAuth: []}, {sessionAuth: []}] # required (authenticated principal)
4131
+ x-identity-scoped: true # identity-bound (caller's own account)
4132
+ tags:
4133
+ - Auth
4134
+ requestBody:
4135
+ required: true
4136
+ content:
4137
+ application/json:
4138
+ schema:
4139
+ type: object
4140
+ required:
4141
+ - current_password
4142
+ properties:
4143
+ current_password:
4144
+ type: string
4145
+ minLength: 1
4146
+ example:
4147
+ current_password: "s3cretpw"
4148
+ responses:
4149
+ '200':
4150
+ description: |
4151
+ Deletion requested; the 30-day grace period has started.
4152
+ content:
4153
+ application/json:
4154
+ schema:
4155
+ type: object
4156
+ additionalProperties: false
4157
+ required:
4158
+ - success
4159
+ - data
4160
+ properties:
4161
+ success:
4162
+ type: boolean
4163
+ enum: [true]
4164
+ data:
4165
+ type: object
4166
+ additionalProperties: false
4167
+ required:
4168
+ - message
4169
+ - api_keys_revoked
4170
+ properties:
4171
+ message:
4172
+ type: string
4173
+ description: Human-readable confirmation naming the grace period.
4174
+ api_keys_revoked:
4175
+ type: integer
4176
+ minimum: 0
4177
+ description: |
4178
+ How many of the account's API keys were revoked by
4179
+ this request. Revocation is **immediate** and is
4180
+ **not** undone by cancelling the deletion.
4181
+ example:
4182
+ success: true
4183
+ data:
4184
+ message: "Account deletion requested. You have 30 days to cancel."
4185
+ api_keys_revoked: 2
4186
+ '403':
4187
+ description: |
4188
+ The supplied `current_password` is incorrect
4189
+ (`error: INVALID_PASSWORD`, `error_type: invalid_password`).
4190
+ content:
4191
+ application/json:
4192
+ schema:
4193
+ $ref: '#/components/schemas/ErrorEnvelope'
4194
+ example:
4195
+ success: false
4196
+ error: "INVALID_PASSWORD"
4197
+ error_type: "invalid_password"
4198
+ message: "Current password is incorrect."
4199
+ '409':
4200
+ description: |
4201
+ Two distinct conflicts, discriminated by `error_type`:
4202
+
4203
+ - `already_requested` (`error: ALREADY_REQUESTED`) — a deletion
4204
+ request is already open for this account.
4205
+ - `workflows_in_progress` (`error: WORKFLOWS_IN_PROGRESS`) — the
4206
+ account has running workflows and deletion is refused until
4207
+ they reach a terminal state.
4208
+ content:
4209
+ application/json:
4210
+ schema:
4211
+ $ref: '#/components/schemas/ErrorEnvelope'
4212
+ example:
4213
+ success: false
4214
+ error: "WORKFLOWS_IN_PROGRESS"
4215
+ error_type: "workflows_in_progress"
4216
+ '401':
4217
+ description: No authenticated principal.
4218
+ content:
4219
+ application/json:
4220
+ schema:
4221
+ $ref: '#/components/schemas/ErrorEnvelope'
4222
+ example:
4223
+ success: false
4224
+ error: "AUTHENTICATION_REQUIRED"
4225
+ error_type: "authentication_required"
4226
+ message: "Authentication required."
4227
+ '404':
4228
+ description: |
4229
+ The authenticated principal no longer resolves to a stored user
4230
+ (`error: USER_NOT_FOUND`).
4231
+ content:
4232
+ application/json:
4233
+ schema:
4234
+ $ref: '#/components/schemas/ErrorEnvelope'
4235
+ example:
4236
+ success: false
4237
+ error: "USER_NOT_FOUND"
4238
+ '422':
4239
+ description: |
4240
+ Structured input validation failure — e.g. a blank
4241
+ `current_password`. `details[].field` carries the wire key
4242
+ `current_password`.
4243
+ content:
4244
+ application/json:
4245
+ schema:
4246
+ $ref: '#/components/schemas/ValidationErrorEnvelope'
4247
+ example:
4248
+ success: false
4249
+ error_type: validation_error
4250
+ error: "Validation failed"
4251
+ details:
4252
+ - field: "current_password"
4253
+ message: "Current password is required."
4254
+ '429':
4255
+ description: |
4256
+ Rate limit exceeded — the deletion request has its own per-user
4257
+ hourly limiter, separate from the cancel limiter. Carries a
4258
+ `Retry-After` response header.
4259
+ headers:
4260
+ Retry-After:
4261
+ description: Seconds to wait before retrying. Delta-seconds (RFC 9110).
4262
+ schema:
4263
+ type: integer
4264
+ minimum: 0
4265
+ example: 60
4266
+ content:
4267
+ application/json:
4268
+ schema:
4269
+ $ref: '#/components/schemas/ErrorEnvelope'
4270
+
4271
+ /api/auth/account/cancel-deletion:
4272
+ post:
4273
+ summary: Cancel a pending account-deletion request
4274
+ description: |
4275
+ Reverses a deletion request while the **30-day grace period** is
4276
+ still open. Takes no request body — the caller's identity is the
4277
+ whole input.
4278
+
4279
+ **`410 Gone` is the expiry signal** and is the only way a client
4280
+ learns the grace period has run out. Distinguish it from `409`: a
4281
+ `409` means there was never a request to cancel, a `410` means there
4282
+ was one and it is too late.
4283
+
4284
+ **API keys revoked by the deletion request are NOT restored.**
4285
+ operationId: cancelAccountDeletion
4286
+ security: [{bearerAuth: []}, {sessionAuth: []}] # required (authenticated principal)
4287
+ x-identity-scoped: true # identity-bound (caller's own account)
4288
+ tags:
4289
+ - Auth
4290
+ responses:
4291
+ '200':
4292
+ description: The pending deletion request was cancelled.
4293
+ content:
4294
+ application/json:
4295
+ schema:
4296
+ type: object
4297
+ additionalProperties: false
4298
+ required:
4299
+ - success
4300
+ - data
4301
+ properties:
4302
+ success:
4303
+ type: boolean
4304
+ enum: [true]
4305
+ data:
4306
+ type: object
4307
+ additionalProperties: false
4308
+ required:
4309
+ - message
4310
+ properties:
4311
+ message:
4312
+ type: string
4313
+ example:
4314
+ success: true
4315
+ data:
4316
+ message: "Account deletion has been cancelled."
4317
+ '409':
4318
+ description: |
4319
+ No deletion request is open for this account
4320
+ (`error: NO_DELETION_REQUEST`, `error_type: no_deletion_request`).
4321
+ content:
4322
+ application/json:
4323
+ schema:
4324
+ $ref: '#/components/schemas/ErrorEnvelope'
4325
+ example:
4326
+ success: false
4327
+ error: "NO_DELETION_REQUEST"
4328
+ error_type: "no_deletion_request"
4329
+ '410':
4330
+ description: |
4331
+ The 30-day grace period has expired and the deletion can no
4332
+ longer be cancelled (`error: GRACE_PERIOD_EXPIRED`,
4333
+ `error_type: grace_period_expired`). **This is the expiry
4334
+ signal** — see also the `account_deletion_expired` error code.
4335
+ content:
4336
+ application/json:
4337
+ schema:
4338
+ $ref: '#/components/schemas/ErrorEnvelope'
4339
+ example:
4340
+ success: false
4341
+ error: "GRACE_PERIOD_EXPIRED"
4342
+ error_type: "grace_period_expired"
4343
+ '401':
4344
+ description: No authenticated principal.
4345
+ content:
4346
+ application/json:
4347
+ schema:
4348
+ $ref: '#/components/schemas/ErrorEnvelope'
4349
+ example:
4350
+ success: false
4351
+ error: "AUTHENTICATION_REQUIRED"
4352
+ error_type: "authentication_required"
4353
+ message: "Authentication required."
4354
+ '404':
4355
+ description: |
4356
+ The authenticated principal no longer resolves to a stored user
4357
+ (`error: USER_NOT_FOUND`).
4358
+ content:
4359
+ application/json:
4360
+ schema:
4361
+ $ref: '#/components/schemas/ErrorEnvelope'
4362
+ example:
4363
+ success: false
4364
+ error: "USER_NOT_FOUND"
4365
+ '429':
4366
+ description: |
4367
+ Rate limit exceeded — the cancel path has its own per-user hourly
4368
+ limiter, separate from the deletion-request limiter. Carries a
4369
+ `Retry-After` response header.
4370
+ headers:
4371
+ Retry-After:
4372
+ description: Seconds to wait before retrying. Delta-seconds (RFC 9110).
4373
+ schema:
4374
+ type: integer
4375
+ minimum: 0
4376
+ example: 60
4377
+ content:
4378
+ application/json:
4379
+ schema:
4380
+ $ref: '#/components/schemas/ErrorEnvelope'
4381
+
4382
+ /api/auth/account/export:
4383
+ get:
4384
+ summary: Export the authenticated user's data (GDPR)
4385
+ description: |
4386
+ Returns the account's stored data as JSON: `profile`, `uploads`,
4387
+ `workflows`, `api_keys` and `billing`, plus an `exported_at`
4388
+ timestamp.
4389
+
4390
+ **The response carries the account's full PII**, so the server sets
4391
+ `Cache-Control: no-store` — **not** merely `no-cache`. A client MUST
4392
+ NOT write this payload to shared or persistent storage.
4393
+
4394
+ Independent of the deletion flow: exporting neither starts nor
4395
+ cancels a deletion.
4396
+ operationId: exportAccountData
4397
+ security: [{bearerAuth: []}, {sessionAuth: []}] # required (authenticated principal)
4398
+ x-identity-scoped: true # identity-bound (caller's own data)
4399
+ tags:
4400
+ - Auth
4401
+ responses:
4402
+ '200':
4403
+ description: |
4404
+ The account's exported data. The per-section payload shapes are
4405
+ **deliberately not pinned here** — they are a data dump for the
4406
+ account holder, not an integration surface, and pinning them
4407
+ would freeze internal record shapes into this contract.
4408
+ headers:
4409
+ Cache-Control:
4410
+ description: Always `no-store` — the payload carries full PII.
4411
+ schema:
4412
+ type: string
4413
+ example: "no-store"
4414
+ content:
4415
+ application/json:
4416
+ schema:
4417
+ type: object
4418
+ additionalProperties: false
4419
+ required:
4420
+ - success
4421
+ - data
4422
+ properties:
4423
+ success:
4424
+ type: boolean
4425
+ enum: [true]
4426
+ data:
4427
+ type: object
4428
+ required:
4429
+ - exported_at
4430
+ - profile
4431
+ properties:
4432
+ exported_at:
4433
+ type: string
4434
+ format: date-time
4435
+ profile:
4436
+ type: object
4437
+ uploads:
4438
+ type: array
4439
+ items:
4440
+ type: object
4441
+ workflows:
4442
+ type: array
4443
+ items:
4444
+ type: object
4445
+ api_keys:
4446
+ type: array
4447
+ items:
4448
+ type: object
4449
+ billing:
4450
+ type: object
4451
+ '401':
4452
+ description: No authenticated principal.
4453
+ content:
4454
+ application/json:
4455
+ schema:
4456
+ $ref: '#/components/schemas/ErrorEnvelope'
4457
+ example:
4458
+ success: false
4459
+ error: "AUTHENTICATION_REQUIRED"
4460
+ error_type: "authentication_required"
4461
+ message: "Authentication required."
4462
+ '404':
4463
+ description: |
4464
+ The authenticated principal no longer resolves to a stored user
4465
+ (`error: USER_NOT_FOUND`).
4466
+ content:
4467
+ application/json:
4468
+ schema:
4469
+ $ref: '#/components/schemas/ErrorEnvelope'
4470
+ example:
4471
+ success: false
4472
+ error: "USER_NOT_FOUND"
4473
+ '429':
4474
+ description: |
4475
+ Data-export rate limit reached. Carries a `Retry-After` response
4476
+ header.
4477
+ headers:
4478
+ Retry-After:
4479
+ description: Seconds to wait before retrying. Delta-seconds (RFC 9110).
4480
+ schema:
4481
+ type: integer
4482
+ minimum: 0
4483
+ example: 60
4484
+ content:
4485
+ application/json:
4486
+ schema:
4487
+ $ref: '#/components/schemas/ErrorEnvelope'
4488
+
3999
4489
  /api/auth/confirm-email-change:
4000
4490
  post:
4001
4491
  summary: Confirm a pending email-address change
@@ -4437,13 +4927,10 @@ paths:
4437
4927
  properties:
4438
4928
  updated:
4439
4929
  type: boolean
4440
- enum: [true]
4441
4930
  name_changed:
4442
4931
  type: boolean
4443
- enum: [true]
4444
4932
  email_change_requested:
4445
4933
  type: boolean
4446
- enum: [true]
4447
4934
  message:
4448
4935
  type: string
4449
4936
  example:
@@ -5185,6 +5672,18 @@ paths:
5185
5672
  operationId: createBillingCheckoutSession
5186
5673
  security: [{bearerAuth: []}, {sessionAuth: []}] # required (IS_AUTHENTICATED_FULLY; anonymous/partial sessions → 401)
5187
5674
  x-identity-scoped: true # the checkout session is created for the authenticated caller
5675
+ # DOWNGRADE, and it clears standing policies 3 and 4 by MEASUREMENT
5676
+ # rather than by absence of evidence: e2e drove this endpoint on staging
5677
+ # 2026-08-11 and got 422 `feature_not_available` with
5678
+ # `availability: planned`, WITH CONTROLS — unauthenticated gives 401 and
5679
+ # GET gives 405, so the 422 is the feature gate and not a bad payload or
5680
+ # a missing route. api confirmed `STRIPE_CHECKOUT_ENABLED=false` and five
5681
+ # empty price IDs on the live task definition.
5682
+ #
5683
+ # Flipping this back to `stable` is an UPGRADE and is covered by the
5684
+ # standing freeze (hub, 2026-08-11): no availability upgrade to `stable`
5685
+ # before launch without an explicit per-flip ruling.
5686
+ x-availability: planned
5188
5687
  tags:
5189
5688
  - Billing
5190
5689
  requestBody:
@@ -6751,6 +7250,138 @@ components:
6751
7250
  $ref: '#/components/schemas/AccountLimitEntry'
6752
7251
  max_total_input_size_bytes:
6753
7252
  $ref: '#/components/schemas/AccountLimitEntry'
7253
+ max_duration_seconds:
7254
+ # OPTIONAL in this expand step; NOT in `required` above until
7255
+ # api emits it. Unit is SECONDS — carried by the key name, per
7256
+ # AccountLimitEntry.
7257
+ $ref: '#/components/schemas/AccountLimitEntry'
7258
+
7259
+ MediaCategory:
7260
+ type: string
7261
+ enum: [image, video, audio, document]
7262
+ description: |
7263
+ Coarse input media family, as used by the tier-default surface.
7264
+ **Not** a MIME type and **not** an operation `mime_group` — those are
7265
+ finer-grained and live in the operation schemas. This vocabulary
7266
+ exists so a client can filter a file picker without enumerating MIMEs.
7267
+
7268
+ TierDefaults:
7269
+ type: object
7270
+ additionalProperties: false
7271
+ description: |
7272
+ The **published default limits**, readable by an ANONYMOUS caller.
7273
+
7274
+ **Why this exists separately from `GET /api/v2/account/limits`:** that
7275
+ endpoint is per-account and override-aware, so it requires auth and
7276
+ returns `401` to an anonymous caller — **correctly**, because
7277
+ `effective` / `tier_default` / `overridden` is meaningless without an
7278
+ account. What a logged-out visitor needs is the **tier defaults**,
7279
+ which are not per-account. This publishes AS DATA what the `UserTier`
7280
+ description already publishes as prose.
7281
+
7282
+ **The server is authoritative for the values.** This contract declares
7283
+ the SHAPE; the numbers are computed per environment and per tier
7284
+ model, and a client MUST read them here rather than hard-coding a
7285
+ table (the drift this field exists to end).
7286
+ required:
7287
+ - media_categories
7288
+ - by_audience
7289
+ properties:
7290
+ media_categories:
7291
+ type: array
7292
+ minItems: 1
7293
+ uniqueItems: true
7294
+ items:
7295
+ $ref: '#/components/schemas/MediaCategory'
7296
+ description: |
7297
+ The input media families available **to every audience,
7298
+ including anonymous**. Declared ONCE, not per-tier, because it
7299
+ does not vary — hub decision 25 made audio universal, and there
7300
+ is now no tier boundary at which the category axis changes.
7301
+
7302
+ ⚠️ **Deliberately NOT a per-audience allow-list.** A structure
7303
+ with one row per tier, every row identical, is a gate whose every
7304
+ row is open — it reads as an entitlement mechanism while
7305
+ encoding no entitlement, and the next reader maintains it as
7306
+ though it did. If a future tier DOES restrict categories, this
7307
+ field moves into `by_audience` in a deliberate change, and that
7308
+ change is where the restriction gets argued.
7309
+ by_audience:
7310
+ type: object
7311
+ additionalProperties: false
7312
+ description: |
7313
+ The limits that genuinely DO vary, keyed by audience. Contains
7314
+ only axes with real variance; an axis that is uniform belongs
7315
+ beside `media_categories`, not here.
7316
+
7317
+ **`anonymous` is a key here but deliberately NOT a `UserTier`
7318
+ value.** `UserTier` is a subscription tier and anonymous is the
7319
+ ABSENCE of one — putting it in that enum would place a
7320
+ non-subscription value inside the ordering that drives upgrade
7321
+ prompts (`free < pro < max < enterprise`), where it has no
7322
+ position.
7323
+ ⚠️ **And keeping them distinct is not pedantry — the conflation
7324
+ has already shipped once.** This endpoint's `user_tier`
7325
+ description used to say anonymous callers "receive the `free`
7326
+ tier baseline view", which became false the moment the two were
7327
+ allowed to differ. **A vocabulary that cannot express the
7328
+ difference invites prose asserting they are the same.**
7329
+ required:
7330
+ - anonymous
7331
+ - free
7332
+ - pro
7333
+ - max
7334
+ - enterprise
7335
+ properties:
7336
+ anonymous:
7337
+ $ref: '#/components/schemas/TierDefaultLimits'
7338
+ free:
7339
+ $ref: '#/components/schemas/TierDefaultLimits'
7340
+ pro:
7341
+ $ref: '#/components/schemas/TierDefaultLimits'
7342
+ max:
7343
+ $ref: '#/components/schemas/TierDefaultLimits'
7344
+ enterprise:
7345
+ $ref: '#/components/schemas/TierDefaultLimits'
7346
+
7347
+ TierDefaultLimits:
7348
+ type: object
7349
+ additionalProperties: false
7350
+ description: |
7351
+ One audience's default limits. **Defaults, not entitlements** — a
7352
+ specific account may carry an override, which only
7353
+ `GET /api/v2/account/limits` can report.
7354
+ required:
7355
+ - max_upload_size_bytes
7356
+ - max_duration_seconds
7357
+ properties:
7358
+ max_upload_size_bytes:
7359
+ type: integer
7360
+ format: int64
7361
+ minimum: 1
7362
+ description: |
7363
+ Per-FILE upload cap. Same axis as
7364
+ `AccountLimits.limits.max_upload_size_bytes`.
7365
+
7366
+ ⚠️ **A client MUST NOT treat this as the only size bound.** The
7367
+ per-operation processing ceilings (`max_input_size_bytes` in the
7368
+ operation schemas) are a **different axis and a different
7369
+ number**, and can be SMALLER than this cap — an upload that
7370
+ succeeds may still be rejected at operation time. A picker that
7371
+ shows one number without the other will let a user pick a file
7372
+ the product cannot process.
7373
+ max_duration_seconds:
7374
+ type: [integer, "null"]
7375
+ minimum: 0
7376
+ description: |
7377
+ Per-upload duration cap for time-based media. `null` where the
7378
+ audience has no duration cap.
7379
+
7380
+ ⚠️ **DISTINCT from `processing_class.short_form.max_input_duration`
7381
+ (`PT5M`) in the operation schemas, which it may numerically
7382
+ equal.** That is the short-form/long-form PROCESSING boundary and
7383
+ applies to every audience; this is an entitlement. Two concepts,
7384
+ one integer — read this one for entitlement.
6754
7385
 
6755
7386
  AccountLimitEntry:
6756
7387
  type: object
@@ -6769,14 +7400,16 @@ components:
6769
7400
  type: integer
6770
7401
  minimum: 1
6771
7402
  description: |
6772
- The cap in force for this account, in bytes
6773
- (`override ?? tier_default`).
7403
+ The cap in force for this account (`override ?? tier_default`),
7404
+ **in this limit's own unit** — bytes for the `*_bytes` keys,
7405
+ seconds for the `*_seconds` keys. **The unit is carried by the
7406
+ key name, not by this field.**
6774
7407
  tier_default:
6775
7408
  type: integer
6776
7409
  minimum: 1
6777
7410
  description: |
6778
- The tier's default cap for this limit, in bytes (already public
6779
- via the tier model).
7411
+ The tier's default cap for this limit, in the same unit as
7412
+ `effective` (already public via the tier model).
6780
7413
  overridden:
6781
7414
  type: boolean
6782
7415
  description: |
@@ -7312,7 +7945,6 @@ components:
7312
7945
  workflow is a 409, never a 200.
7313
7946
  archived:
7314
7947
  type: boolean
7315
- enum: [true]
7316
7948
  description: Always `true` on a 200 — the workflow is archived.
7317
7949
  archived_at:
7318
7950
  type: string
@@ -7354,7 +7986,6 @@ components:
7354
7986
  $ref: '#/components/schemas/WorkflowStatus'
7355
7987
  archived:
7356
7988
  type: boolean
7357
- enum: [false]
7358
7989
  description: |
7359
7990
  Always `false` on a 200 — the workflow is no longer archived
7360
7991
  (or was never archived; restore is an idempotent no-op there).
@@ -11468,11 +12099,50 @@ components:
11468
12099
 
11469
12100
  CodegenUploadPlaceholder:
11470
12101
  type: object
12102
+ # ⚠️ THIS DESCRIPTION USED TO SAY "the original upload is
12103
+ # consumed/expired". THAT WAS FALSE, and it contradicted this contract's
12104
+ # own schema: `UploadSource` accepts `{type: upload, file_id}` at
12105
+ # workflow-create, so a client reading the schema builds file reuse while
12106
+ # a client reading this sentence concludes it cannot work. Both shipped,
12107
+ # in the same published artefact.
12108
+ #
12109
+ # Corrected 2026-08-12 from api's code read: NOTHING marks an upload
12110
+ # consumed — no column, no flag, no state — nothing deletes it when a
12111
+ # workflow completes, and the `uploads` row is independent of workflow
12112
+ # lifecycle. An upload is REUSABLE.
12113
+ #
12114
+ # ⚠️ THE UPLOAD LIFETIME IS STILL UNDECLARED AND IS DELIBERATELY NOT
12115
+ # INVENTED HERE. The only true sense in which an upload "expires" is the
12116
+ # stored bytes ageing out of the input bucket, which is a storage
12117
+ # lifecycle and not currently a contract concept at all. That number is
12118
+ # terraform's measurement; it has been relayed to this session as 3 days
12119
+ # and NEITHER api NOR this session has verified it, so it is not written
12120
+ # into the contract. Asked of terraform 2026-08-12; lands as a follow-up
12121
+ # if and only if they confirm it AND confirm staging and prod agree —
12122
+ # this contract has no environment axis, so a lifetime true in one
12123
+ # environment and false in the other cannot be expressed honestly.
11471
12124
  description: |
11472
12125
  Stand-in for a user UPLOAD source in a replay projection — descriptive
11473
- metadata so a consumer can re-prompt for an equivalent file. NOT the
11474
- bytes or storage key (the original upload is consumed/expired), so it is
11475
- deliberately NOT a re-submittable `UploadSource`.
12126
+ metadata so a consumer can re-prompt for an equivalent file. Carries
12127
+ NOT the bytes or the storage key, only the descriptive fields below.
12128
+
12129
+ **This placeholder is about what the PROJECTION carries, not about
12130
+ whether the upload still exists.** An upload is **not** consumed by
12131
+ being used: nothing marks it spent, and referencing the same `file_id`
12132
+ again at `POST /api/workflows` via `UploadSource` is valid — that is
12133
+ how a caller re-runs a file with different settings, or runs a
12134
+ different operation on it.
12135
+
12136
+ The projection omits the `file_id` because a replay snippet is meant to
12137
+ be re-runnable by **any** reader, including one who never held that
12138
+ upload; it is a code sample, not a resume token.
12139
+
12140
+ ⚠️ **How long an upload remains referenceable is NOT declared by this
12141
+ contract.** The stored bytes are subject to an input-bucket retention
12142
+ lifecycle that this spec does not state, so a caller MUST be prepared
12143
+ for a `file_id` that was valid to stop being usable, and MUST NOT infer
12144
+ a lifetime from the workflow `expires_at` TTL — **those are different
12145
+ clocks on different objects, and the workflow one is longer.**
11476
12146
  required:
11477
12147
  - kind
11478
12148
  properties:
@@ -12849,12 +13519,25 @@ components:
12849
13519
  - type: string
12850
13520
  - type: 'null'
12851
13521
  example: "production"
13522
+ tier_defaults:
13523
+ # Anonymous-readable. Declared here rather than on
13524
+ # /api/v2/account/limits because that surface is per-account and
13525
+ # override-aware, so it 401s an anonymous caller — correctly.
13526
+ $ref: '#/components/schemas/TierDefaults'
12852
13527
  user_tier:
12853
13528
  description: |
12854
13529
  Tier of the calling user. Anonymous (unauthenticated) callers
12855
- see `null` on the wire and receive the `free` tier baseline
12856
- view. Used by clients to render upgrade prompts on tier-gated
12857
- features.
13530
+ see `null` on the wire. Used by clients to render upgrade
13531
+ prompts on tier-gated features.
13532
+
13533
+ ⚠️ **`null` does NOT mean "the free tier".** This description
13534
+ previously said anonymous callers "receive the `free` tier
13535
+ baseline view"; that stopped being true when the anonymous and
13536
+ free limits were allowed to differ (hub decisions 22 + 25 —
13537
+ anonymous carries a shorter duration entitlement than a
13538
+ signed-in free user). **Anonymous is the ABSENCE of a tier, not
13539
+ the lowest one.** Read `tier_defaults.by_audience.anonymous`
13540
+ for what an unauthenticated caller may actually do.
12858
13541
  oneOf:
12859
13542
  - $ref: '#/components/schemas/UserTier'
12860
13543
  - type: 'null'
@@ -13120,7 +13803,6 @@ components:
13120
13803
  properties:
13121
13804
  same_as_input:
13122
13805
  type: boolean
13123
- enum: [true]
13124
13806
  - type: object
13125
13807
  additionalProperties: false
13126
13808
  required: [from_option]
@@ -13249,7 +13931,6 @@ components:
13249
13931
  description: Field token under test.
13250
13932
  isSet:
13251
13933
  type: boolean
13252
- enum: [true]
13253
13934
  description: |
13254
13935
  Leaf test — asserts `field` is present/set. Only the
13255
13936
  positive form is used; negate via a wrapping `not` node.