@giveitsmaller/contracts 0.59.0 → 0.61.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 (505) hide show
  1. package/accepted-options/accepted-options.json +1 -2
  2. package/accepted-options/image-output-routes.json +1 -1
  3. package/asyncapi/events.yaml +19 -0
  4. package/availability/availability.json +31 -38
  5. package/code-builder/code-builder-metadata.json +46 -57
  6. package/dist/asyncapi/ErrorCode.d.ts +2 -0
  7. package/dist/asyncapi/ErrorCode.js +2 -0
  8. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  9. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  10. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  11. package/dist/openapi/models/AccountLimits.js +1 -1
  12. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  13. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  14. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  15. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  16. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  17. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  18. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  19. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  20. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  21. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  22. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  23. package/dist/openapi/models/AuthErrorType.js +1 -1
  24. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  25. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  26. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  27. package/dist/openapi/models/AvailabilityValue.js +1 -1
  28. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  29. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  30. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  31. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  32. package/dist/openapi/models/BillingCheckoutRequest.d.ts +1 -1
  33. package/dist/openapi/models/BillingCheckoutRequest.js +1 -1
  34. package/dist/openapi/models/BillingCheckoutSession.d.ts +1 -1
  35. package/dist/openapi/models/BillingCheckoutSession.js +1 -1
  36. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +1 -1
  37. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +1 -1
  38. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  39. package/dist/openapi/models/CallbackEventType.js +1 -1
  40. package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
  41. package/dist/openapi/models/CapabilityCondition.js +1 -1
  42. package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
  43. package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
  44. package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
  45. package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
  46. package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
  47. package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
  48. package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
  49. package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
  50. package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
  51. package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
  52. package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +1 -1
  53. package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -1
  54. package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
  55. package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
  56. package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
  57. package/dist/openapi/models/CapabilityConstraint.js +1 -1
  58. package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
  59. package/dist/openapi/models/CapabilityInputSpec.js +1 -1
  60. package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
  61. package/dist/openapi/models/CapabilityProduces.js +1 -1
  62. package/dist/openapi/models/CapabilityProducesOneOf.d.ts +1 -1
  63. package/dist/openapi/models/CapabilityProducesOneOf.js +1 -1
  64. package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
  65. package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
  66. package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
  67. package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
  68. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  69. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  70. package/dist/openapi/models/CodegenSource.d.ts +1 -1
  71. package/dist/openapi/models/CodegenSource.js +1 -1
  72. package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
  73. package/dist/openapi/models/CodegenSourceInput.js +1 -1
  74. package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
  75. package/dist/openapi/models/CodegenSourceJob.js +1 -1
  76. package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
  77. package/dist/openapi/models/CodegenSourceJobSource.js +1 -1
  78. package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
  79. package/dist/openapi/models/CodegenSourceOperation.js +1 -1
  80. package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +1 -1
  81. package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
  82. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  83. package/dist/openapi/models/CompositionPlan.js +1 -1
  84. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  85. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  86. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  87. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  88. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  89. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  90. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  91. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  92. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  93. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  94. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  95. package/dist/openapi/models/ConnectionSource.js +1 -1
  96. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  97. package/dist/openapi/models/ContactRequest.js +1 -1
  98. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  99. package/dist/openapi/models/ContactSubject.js +1 -1
  100. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  101. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  102. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  103. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  104. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  105. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  106. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  107. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  108. package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +1 -1
  109. package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +1 -1
  110. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  111. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  112. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  113. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  114. package/dist/openapi/models/CreateWorkflow401Response.d.ts +1 -1
  115. package/dist/openapi/models/CreateWorkflow401Response.js +1 -1
  116. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  117. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  118. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  119. package/dist/openapi/models/CreditTransaction.js +1 -1
  120. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  121. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  122. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  123. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  124. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  125. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  126. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  127. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  128. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  129. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  130. package/dist/openapi/models/Delivery.d.ts +1 -1
  131. package/dist/openapi/models/Delivery.js +1 -1
  132. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  133. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  134. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  135. package/dist/openapi/models/DeliveryPlan.js +1 -1
  136. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  137. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  138. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  139. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  140. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  141. package/dist/openapi/models/DeliverySelection.js +1 -1
  142. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  143. package/dist/openapi/models/DownloadBundle.js +1 -1
  144. package/dist/openapi/models/DroppedOption.d.ts +88 -0
  145. package/dist/openapi/models/DroppedOption.js +54 -0
  146. package/dist/openapi/models/EmailNotify.d.ts +1 -1
  147. package/dist/openapi/models/EmailNotify.js +1 -1
  148. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  149. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  150. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  151. package/dist/openapi/models/EndpointProjection.js +1 -1
  152. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  153. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  154. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  155. package/dist/openapi/models/EstimateQuality.js +1 -1
  156. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  157. package/dist/openapi/models/EstimateRange.js +1 -1
  158. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  159. package/dist/openapi/models/ExternalDestination.js +1 -1
  160. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  161. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  162. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  163. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  164. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  165. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  166. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  167. package/dist/openapi/models/ExternalImportToken.js +1 -1
  168. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  169. package/dist/openapi/models/ExternalSource.js +1 -1
  170. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  171. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  172. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  173. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  174. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  175. package/dist/openapi/models/FeatureViolation.js +1 -1
  176. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  177. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  178. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  179. package/dist/openapi/models/JobDefinition.js +1 -1
  180. package/dist/openapi/models/JobDownload.d.ts +1 -1
  181. package/dist/openapi/models/JobDownload.js +1 -1
  182. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  183. package/dist/openapi/models/JobInputV2.js +1 -1
  184. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  185. package/dist/openapi/models/JobMediaClass.js +1 -1
  186. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  187. package/dist/openapi/models/JobOutputSource.js +1 -1
  188. package/dist/openapi/models/JobResponse.d.ts +1 -1
  189. package/dist/openapi/models/JobResponse.js +1 -1
  190. package/dist/openapi/models/JobStatus.d.ts +1 -1
  191. package/dist/openapi/models/JobStatus.js +1 -1
  192. package/dist/openapi/models/JobType.d.ts +1 -1
  193. package/dist/openapi/models/JobType.js +1 -1
  194. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  195. package/dist/openapi/models/LivenessResponse.js +1 -1
  196. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  197. package/dist/openapi/models/LoginUser200Response.js +1 -1
  198. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  199. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  200. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  201. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  202. package/dist/openapi/models/LoginUser401Response.d.ts +1 -1
  203. package/dist/openapi/models/LoginUser401Response.js +1 -1
  204. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  205. package/dist/openapi/models/LoginUserRequest.js +1 -1
  206. package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +5 -2
  207. package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
  208. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
  209. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
  210. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  211. package/dist/openapi/models/MetadataResponse.js +1 -1
  212. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  213. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  214. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  215. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  216. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  217. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  218. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  219. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  220. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  221. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  222. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  223. package/dist/openapi/models/MultiInputSource.js +1 -1
  224. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  225. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  226. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  227. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  228. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  229. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  230. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  231. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  232. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  233. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  234. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  235. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  236. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  237. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  238. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  239. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  240. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  241. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  242. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  243. package/dist/openapi/models/MultipartPartListing.js +1 -1
  244. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  245. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  246. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  247. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  248. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  249. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  250. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  251. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  252. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  253. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  254. package/dist/openapi/models/NotifyConfig.d.ts +1 -1
  255. package/dist/openapi/models/NotifyConfig.js +1 -1
  256. package/dist/openapi/models/OperationCapability.d.ts +1 -1
  257. package/dist/openapi/models/OperationCapability.js +1 -1
  258. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  259. package/dist/openapi/models/OperationDefinition.js +1 -1
  260. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  261. package/dist/openapi/models/OperationDownload.js +1 -1
  262. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  263. package/dist/openapi/models/OperationInputModel.js +1 -1
  264. package/dist/openapi/models/OperationResponse.d.ts +30 -6
  265. package/dist/openapi/models/OperationResponse.js +1 -1
  266. package/dist/openapi/models/OperationResult.d.ts +1 -1
  267. package/dist/openapi/models/OperationResult.js +1 -1
  268. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  269. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  270. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  271. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  272. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  273. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  274. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  275. package/dist/openapi/models/OperationStatus.js +1 -1
  276. package/dist/openapi/models/OperationType.d.ts +1 -1
  277. package/dist/openapi/models/OperationType.js +1 -1
  278. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  279. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  280. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  281. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  282. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  283. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  284. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  285. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  286. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  287. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  288. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
  289. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
  290. package/dist/openapi/models/OptionSchema.d.ts +30 -1
  291. package/dist/openapi/models/OptionSchema.js +4 -1
  292. package/dist/openapi/models/OutputProperties.d.ts +1 -1
  293. package/dist/openapi/models/OutputProperties.js +1 -1
  294. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
  295. package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
  296. package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +58 -0
  297. package/dist/openapi/models/PerClassAvailabilityEntry.js +48 -0
  298. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  299. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  300. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +44 -1
  301. package/dist/openapi/models/PerValueAvailabilityEntry.js +5 -1
  302. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  303. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  304. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  305. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  306. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  307. package/dist/openapi/models/ProcessingClass.js +1 -1
  308. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  309. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  310. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  311. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  312. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  313. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  314. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  315. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  316. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  317. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  318. package/dist/openapi/models/ProcessingClassReason.d.ts +78 -1
  319. package/dist/openapi/models/ProcessingClassReason.js +79 -2
  320. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  321. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  322. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  323. package/dist/openapi/models/ProcessingPlan.js +1 -1
  324. package/dist/openapi/models/ProcessingPlanJob.d.ts +30 -1
  325. package/dist/openapi/models/ProcessingPlanJob.js +4 -1
  326. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  327. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  328. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  329. package/dist/openapi/models/ReadinessResponse.js +1 -1
  330. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  331. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  332. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  333. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  334. package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
  335. package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
  336. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  337. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  338. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  339. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  340. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  341. package/dist/openapi/models/RetryResponse.js +1 -1
  342. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  343. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  344. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  345. package/dist/openapi/models/SseCompletionBase.js +1 -1
  346. package/dist/openapi/models/SseEventType.d.ts +1 -1
  347. package/dist/openapi/models/SseEventType.js +1 -1
  348. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  349. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  350. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  351. package/dist/openapi/models/SseJobFailedData.js +1 -1
  352. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  353. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  354. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  355. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  356. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  357. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  358. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  359. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  360. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  361. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  362. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  363. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  364. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  365. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  366. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  367. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  368. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  369. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  370. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  371. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  372. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  373. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  374. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  375. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  376. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  377. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  378. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  379. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  380. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  381. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  382. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  383. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  384. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  385. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  386. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  387. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  388. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  389. package/dist/openapi/models/UploadFile403Response.js +1 -1
  390. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  391. package/dist/openapi/models/UploadFile422Response.js +1 -1
  392. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  393. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  394. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  395. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  396. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  397. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  398. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  399. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  400. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  401. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  402. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  403. package/dist/openapi/models/UploadResponse.js +1 -1
  404. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  405. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  406. package/dist/openapi/models/UploadSource.d.ts +1 -1
  407. package/dist/openapi/models/UploadSource.js +1 -1
  408. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  409. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  410. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  411. package/dist/openapi/models/UploadThresholds.js +1 -1
  412. package/dist/openapi/models/UserTier.d.ts +1 -1
  413. package/dist/openapi/models/UserTier.js +1 -1
  414. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  415. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  416. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  417. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  418. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  419. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  420. package/dist/openapi/models/WarningType.d.ts +1 -1
  421. package/dist/openapi/models/WarningType.js +1 -1
  422. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  423. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  424. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  425. package/dist/openapi/models/WebhookPayload.js +1 -1
  426. package/dist/openapi/models/WorkflowArchiveResponse.d.ts +1 -1
  427. package/dist/openapi/models/WorkflowArchiveResponse.js +1 -1
  428. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
  429. package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
  430. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  431. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  432. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  433. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  434. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  435. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  436. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  437. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  438. package/dist/openapi/models/WorkflowCreateResponse.d.ts +41 -6
  439. package/dist/openapi/models/WorkflowCreateResponse.js +4 -1
  440. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  441. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  442. package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
  443. package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
  444. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  445. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  446. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  447. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  448. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  449. package/dist/openapi/models/WorkflowEdge.js +1 -1
  450. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  451. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  452. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  453. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  454. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  455. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  456. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  457. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  458. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  459. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  460. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  461. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  462. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  463. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  464. package/dist/openapi/models/WorkflowRestoreResponse.d.ts +1 -1
  465. package/dist/openapi/models/WorkflowRestoreResponse.js +1 -1
  466. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
  467. package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
  468. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  469. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  470. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  471. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  472. package/dist/openapi/models/WorkflowSource.d.ts +12 -1
  473. package/dist/openapi/models/WorkflowSource.js +1 -1
  474. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  475. package/dist/openapi/models/WorkflowStatus.js +1 -1
  476. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  477. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  478. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  479. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  480. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  481. package/dist/openapi/models/WorkflowSummary.js +1 -1
  482. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  483. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  484. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  485. package/dist/openapi/models/WorkflowWarning.js +1 -1
  486. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  487. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  488. package/dist/openapi/models/index.d.ts +2 -0
  489. package/dist/openapi/models/index.js +2 -0
  490. package/dist/openapi/runtime.d.ts +1 -1
  491. package/dist/openapi/runtime.js +1 -1
  492. package/dist/operations/compress.metadata.js +0 -3
  493. package/dist/operations/merge.metadata.js +6 -1
  494. package/dist/operations/thumbnail.d.ts +0 -2
  495. package/dist/operations/thumbnail.js +0 -1
  496. package/dist/operations/thumbnail.metadata.js +0 -4
  497. package/openapi/api.yaml +532 -32
  498. package/operation-capabilities/operation-capabilities.json +1 -1
  499. package/operations/schemas/audio_overlay.yaml +0 -4
  500. package/operations/schemas/compress.yaml +97 -56
  501. package/operations/schemas/convert.yaml +4 -3
  502. package/operations/schemas/merge.yaml +90 -3
  503. package/operations/schemas/render_variants.yaml +30 -7
  504. package/operations/schemas/thumbnail.yaml +89 -43
  505. package/package.json +1 -1
package/openapi/api.yaml CHANGED
@@ -89,7 +89,7 @@ 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.180.0
92
+ version: 2.189.0
93
93
  contact:
94
94
  name: API Support
95
95
 
@@ -1450,6 +1450,7 @@ paths:
1450
1450
  data:
1451
1451
  workflow_id: "019539ac-2222-7000-8000-000000000001"
1452
1452
  status: "pending"
1453
+ anonymous: false
1453
1454
  created_at: "2026-04-26T14:30:00Z"
1454
1455
  jobs:
1455
1456
  - ref: "main"
@@ -1488,6 +1489,7 @@ paths:
1488
1489
  data:
1489
1490
  workflow_id: "019539ac-2222-7000-8000-000000000002"
1490
1491
  status: "pending"
1492
+ anonymous: false
1491
1493
  created_at: "2026-04-26T14:30:00Z"
1492
1494
  jobs:
1493
1495
  - ref: "file1"
@@ -1985,7 +1987,7 @@ paths:
1985
1987
  message: "Inputs use different frame rates (29.97 vs 30); set re_encode_mode to auto or always."
1986
1988
  '429':
1987
1989
  description: |
1988
- Rate limited. Two distinct triggers share this status — branch
1990
+ Rate limited. Three distinct triggers share this status — branch
1989
1991
  on the `error` code, NOT on the status:
1990
1992
 
1991
1993
  1. **Long-form concurrency cap** — the caller already holds the
@@ -1999,13 +2001,31 @@ paths:
1999
2001
  2. **Infrastructure rate-limit** — too many requests in the
2000
2002
  current window. The links-absent subset of the same shape: a
2001
2003
  plain `ErrorEnvelope` with a `Retry-After` header.
2004
+ 3. **Duplicate in progress** — the caller resubmitted an
2005
+ identical workflow whose idempotency claim is already held by
2006
+ an in-flight create (deduplication that prevents a
2007
+ double-charge; ticket
2008
+ [`DSxwCetg`](https://trello.com/c/DSxwCetg)). Body is a plain
2009
+ `ErrorEnvelope`: `error: DUPLICATE_IN_PROGRESS`, `message_key:
2010
+ job.duplicate_in_progress`, **no `Retry-After`** and **no
2011
+ `links`**. **Transient — the caller SHOULD retry:** the retry
2012
+ folds onto the now-attached winning workflow and returns
2013
+ `201` with that existing workflow (the normal create shape),
2014
+ so the winning `workflow_id` is delivered on the retry, not
2015
+ here. There is no id to return at this point — the winner is
2016
+ still mid-create (its `workflow_id` is not yet assigned), which
2017
+ is exactly what "in progress" means. This is why the status is
2018
+ `429` (retry-with-backoff resolves it) rather than `409`.
2002
2019
  headers:
2003
2020
  Retry-After:
2004
2021
  description: |
2005
2022
  Seconds to wait before retrying. Delta-seconds (RFC 9110).
2006
2023
  Present ONLY for the infrastructure rate-limit trigger —
2007
- ABSENT for `LONG_FORM_CONCURRENCY_LIMIT_EXCEEDED` (that
2008
- limit clears on workflow completion, not on a timer).
2024
+ ABSENT for `LONG_FORM_CONCURRENCY_LIMIT_EXCEEDED` (clears on
2025
+ workflow completion, not a timer) and for
2026
+ `DUPLICATE_IN_PROGRESS` (resolves when the caller retries and
2027
+ folds onto the winning workflow — retry promptly, no fixed
2028
+ back-off window).
2009
2029
  schema:
2010
2030
  type: integer
2011
2031
  minimum: 0
@@ -2030,6 +2050,14 @@ paths:
2030
2050
  value:
2031
2051
  success: false
2032
2052
  error: "Too many requests. Please try again later."
2053
+ duplicate_in_progress:
2054
+ summary: Identical workflow already mid-create (idempotency fold — retry to get the 201-with-existing-workflow)
2055
+ value:
2056
+ success: false
2057
+ error: "DUPLICATE_IN_PROGRESS"
2058
+ message: "An identical workflow is already being created. Retry in a moment to attach to it."
2059
+ message_key: "job.duplicate_in_progress"
2060
+ locale: "en-GB"
2033
2061
  '500':
2034
2062
  description: Internal server error
2035
2063
  content:
@@ -2062,12 +2090,55 @@ paths:
2062
2090
  schema:
2063
2091
  type: string
2064
2092
  description: |
2065
- Capability token (the `cap` from the anonymous workflow-create
2066
- response) authorizing this read for a **null-owner** workflow.
2067
- Optional — an authenticated owner does not need it. A wrong or
2068
- missing cap on a null-owner workflow returns 404 `WorkflowNotFound`
2069
- (no existence oracle — not 401/403). Per ticket
2070
- [`YQt88cq2`](https://trello.com/c/YQt88cq2).
2093
+ Capability token (the `cap` from the workflow-create response)
2094
+ authorizing this read. Optional — an authenticated owner does not
2095
+ need it.
2096
+
2097
+ **`cap` is emitted only for anonymous (null-owner) creates TODAY,
2098
+ but do not read anything about OWNERSHIP from that** — see the
2099
+ `anonymous` field on the create response, which is the only
2100
+ supported way to determine it. This sentence used to describe `cap`
2101
+ as the anonymous-create token, and that phrasing is what licensed a
2102
+ consumer to treat its presence as proof of anonymity.
2103
+
2104
+ **A wrong or missing cap returns 404 `WorkflowNotFound`, never
2105
+ 401/403 — and that holds for an OWNED workflow too**, not only a
2106
+ null-owner one, whenever the caller cannot otherwise prove they may
2107
+ read it. The reason is stated here rather than left as a rule,
2108
+ because a prohibition without its reason gets overturned by whoever
2109
+ reads it next: **a 403 would be an existence oracle.** It would let
2110
+ an unauthorized caller distinguish "this workflow exists and is not
2111
+ yours" from "no such workflow", which is exactly what the
2112
+ null-owner case deliberately avoids — and it is strictly worse on an
2113
+ owned workflow, where existence is tied to an identifiable account.
2114
+
2115
+ **Scope — what a capability grants WHEN it authorizes:
2116
+ `/status`, `/downloads` and `/events`, these three read paths and
2117
+ only these.** No write, no cancel, no retry, no archive. The
2118
+ authorizer is the single authority for all three, and **any
2119
+ asymmetry between the three paths would be a second authorizer in
2120
+ disguise.**
2121
+
2122
+ **WHEN a capability authorizes is a separate question, and TODAY
2123
+ THE ANSWER IS NARROWER: a null-owner workflow only.** An OWNED
2124
+ workflow authorizes on the session/owner match and **ignores the
2125
+ capability entirely** — presenting one does not grant a read. Do
2126
+ not implement capability acceptance on owned workflows from this
2127
+ paragraph.
2128
+
2129
+ That is scheduled to change: under
2130
+ [`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ) an owned workflow will
2131
+ authorize on **owner match OR a valid capability**, so that a
2132
+ logged-in caller can authorize a read against the separate stream
2133
+ host. **Until that ships, the scope rule above describes the grant,
2134
+ not its availability on owned workflows** — the two were stated as
2135
+ one sentence in the first draft of this text, which read as though
2136
+ capability acceptance were already ownership-independent. It is
2137
+ not.
2138
+
2139
+ Per ticket [`YQt88cq2`](https://trello.com/c/YQt88cq2); 404-vs-403
2140
+ and the scope rule confirmed against the implementation by api,
2141
+ 2026-08-11 ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)).
2071
2142
  responses:
2072
2143
  '200':
2073
2144
  description: Workflow status retrieved
@@ -2162,12 +2233,55 @@ paths:
2162
2233
  schema:
2163
2234
  type: string
2164
2235
  description: |
2165
- Capability token (the `cap` from the anonymous workflow-create
2166
- response) authorizing this read for a **null-owner** workflow.
2167
- Optional — an authenticated owner does not need it. A wrong or
2168
- missing cap on a null-owner workflow returns 404 `WorkflowNotFound`
2169
- (no existence oracle — not 401/403). Per ticket
2170
- [`YQt88cq2`](https://trello.com/c/YQt88cq2).
2236
+ Capability token (the `cap` from the workflow-create response)
2237
+ authorizing this read. Optional — an authenticated owner does not
2238
+ need it.
2239
+
2240
+ **`cap` is emitted only for anonymous (null-owner) creates TODAY,
2241
+ but do not read anything about OWNERSHIP from that** — see the
2242
+ `anonymous` field on the create response, which is the only
2243
+ supported way to determine it. This sentence used to describe `cap`
2244
+ as the anonymous-create token, and that phrasing is what licensed a
2245
+ consumer to treat its presence as proof of anonymity.
2246
+
2247
+ **A wrong or missing cap returns 404 `WorkflowNotFound`, never
2248
+ 401/403 — and that holds for an OWNED workflow too**, not only a
2249
+ null-owner one, whenever the caller cannot otherwise prove they may
2250
+ read it. The reason is stated here rather than left as a rule,
2251
+ because a prohibition without its reason gets overturned by whoever
2252
+ reads it next: **a 403 would be an existence oracle.** It would let
2253
+ an unauthorized caller distinguish "this workflow exists and is not
2254
+ yours" from "no such workflow", which is exactly what the
2255
+ null-owner case deliberately avoids — and it is strictly worse on an
2256
+ owned workflow, where existence is tied to an identifiable account.
2257
+
2258
+ **Scope — what a capability grants WHEN it authorizes:
2259
+ `/status`, `/downloads` and `/events`, these three read paths and
2260
+ only these.** No write, no cancel, no retry, no archive. The
2261
+ authorizer is the single authority for all three, and **any
2262
+ asymmetry between the three paths would be a second authorizer in
2263
+ disguise.**
2264
+
2265
+ **WHEN a capability authorizes is a separate question, and TODAY
2266
+ THE ANSWER IS NARROWER: a null-owner workflow only.** An OWNED
2267
+ workflow authorizes on the session/owner match and **ignores the
2268
+ capability entirely** — presenting one does not grant a read. Do
2269
+ not implement capability acceptance on owned workflows from this
2270
+ paragraph.
2271
+
2272
+ That is scheduled to change: under
2273
+ [`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ) an owned workflow will
2274
+ authorize on **owner match OR a valid capability**, so that a
2275
+ logged-in caller can authorize a read against the separate stream
2276
+ host. **Until that ships, the scope rule above describes the grant,
2277
+ not its availability on owned workflows** — the two were stated as
2278
+ one sentence in the first draft of this text, which read as though
2279
+ capability acceptance were already ownership-independent. It is
2280
+ not.
2281
+
2282
+ Per ticket [`YQt88cq2`](https://trello.com/c/YQt88cq2); 404-vs-403
2283
+ and the scope rule confirmed against the implementation by api,
2284
+ 2026-08-11 ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)).
2171
2285
  responses:
2172
2286
  '200':
2173
2287
  description: Download URLs retrieved
@@ -2282,12 +2396,55 @@ paths:
2282
2396
  schema:
2283
2397
  type: string
2284
2398
  description: |
2285
- Capability token (the `cap` from the anonymous workflow-create
2286
- response) authorizing this read for a **null-owner** workflow.
2287
- Optional — an authenticated owner does not need it. A wrong or
2288
- missing cap on a null-owner workflow returns 404 `WorkflowNotFound`
2289
- (no existence oracle — not 401/403). Per ticket
2290
- [`YQt88cq2`](https://trello.com/c/YQt88cq2).
2399
+ Capability token (the `cap` from the workflow-create response)
2400
+ authorizing this read. Optional — an authenticated owner does not
2401
+ need it.
2402
+
2403
+ **`cap` is emitted only for anonymous (null-owner) creates TODAY,
2404
+ but do not read anything about OWNERSHIP from that** — see the
2405
+ `anonymous` field on the create response, which is the only
2406
+ supported way to determine it. This sentence used to describe `cap`
2407
+ as the anonymous-create token, and that phrasing is what licensed a
2408
+ consumer to treat its presence as proof of anonymity.
2409
+
2410
+ **A wrong or missing cap returns 404 `WorkflowNotFound`, never
2411
+ 401/403 — and that holds for an OWNED workflow too**, not only a
2412
+ null-owner one, whenever the caller cannot otherwise prove they may
2413
+ read it. The reason is stated here rather than left as a rule,
2414
+ because a prohibition without its reason gets overturned by whoever
2415
+ reads it next: **a 403 would be an existence oracle.** It would let
2416
+ an unauthorized caller distinguish "this workflow exists and is not
2417
+ yours" from "no such workflow", which is exactly what the
2418
+ null-owner case deliberately avoids — and it is strictly worse on an
2419
+ owned workflow, where existence is tied to an identifiable account.
2420
+
2421
+ **Scope — what a capability grants WHEN it authorizes:
2422
+ `/status`, `/downloads` and `/events`, these three read paths and
2423
+ only these.** No write, no cancel, no retry, no archive. The
2424
+ authorizer is the single authority for all three, and **any
2425
+ asymmetry between the three paths would be a second authorizer in
2426
+ disguise.**
2427
+
2428
+ **WHEN a capability authorizes is a separate question, and TODAY
2429
+ THE ANSWER IS NARROWER: a null-owner workflow only.** An OWNED
2430
+ workflow authorizes on the session/owner match and **ignores the
2431
+ capability entirely** — presenting one does not grant a read. Do
2432
+ not implement capability acceptance on owned workflows from this
2433
+ paragraph.
2434
+
2435
+ That is scheduled to change: under
2436
+ [`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ) an owned workflow will
2437
+ authorize on **owner match OR a valid capability**, so that a
2438
+ logged-in caller can authorize a read against the separate stream
2439
+ host. **Until that ships, the scope rule above describes the grant,
2440
+ not its availability on owned workflows** — the two were stated as
2441
+ one sentence in the first draft of this text, which read as though
2442
+ capability acceptance were already ownership-independent. It is
2443
+ not.
2444
+
2445
+ Per ticket [`YQt88cq2`](https://trello.com/c/YQt88cq2); 404-vs-403
2446
+ and the scope rule confirmed against the implementation by api,
2447
+ 2026-08-11 ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)).
2291
2448
 
2292
2449
  **SSE transport note:** native browser `EventSource` cannot set
2293
2450
  request headers (its constructor accepts only `url` + `withCredentials`
@@ -5754,6 +5911,34 @@ components:
5754
5911
  - planned
5755
5912
  - deprecated
5756
5913
 
5914
+ PerClassAvailabilityEntry:
5915
+ type: object
5916
+ description: |
5917
+ Availability of an option (or one of its values) on ONE execution
5918
+ class. Attached as a value within a `per_class_availability` map,
5919
+ keyed by a `processing_class` name the parent mime_group
5920
+ declares.
5921
+
5922
+ Exists because `processing_class:` is a SIBLING of `options:`,
5923
+ not a parent, so without this overlay "honoured on short-form,
5924
+ unavailable on long-form" is inexpressible and the only
5925
+ instrument is an operation-wide `planned` — which withdraws a
5926
+ working capability from every caller to describe one path's gap.
5927
+
5928
+ **May only RESTRICT** relative to the scope it overlays, never
5929
+ re-open it (`schemas/FORMAT.md` §Precedence; machine-enforced).
5930
+ required:
5931
+ - availability
5932
+ properties:
5933
+ availability:
5934
+ $ref: '#/components/schemas/AvailabilityValue'
5935
+ eta:
5936
+ type: string
5937
+ description: ISO-8601 date or quarter when this class is expected to support it.
5938
+ documentation_url:
5939
+ type: string
5940
+ format: uri
5941
+
5757
5942
  PerValueAvailabilityEntry:
5758
5943
  type: object
5759
5944
  description: |
@@ -5772,11 +5957,50 @@ components:
5772
5957
  present in this map MUST be a subset of the option's `values[]`
5773
5958
  array — verified by `make check-per-value-availability`
5774
5959
  (`scripts/check-per-value-availability.py`).
5960
+
5961
+ **`availability` is ALWAYS required, including when
5962
+ `per_class_availability` is present.** An entry carrying a
5963
+ per-class overlay MUST also state the blanket truth:
5964
+
5965
+ target_size:
5966
+ availability: stable # true on every other path
5967
+ per_class_availability:
5968
+ long_form_re_encode: { availability: planned }
5969
+
5970
+ **Ruled 2026-07-29, reversing an earlier reading of mine that
5971
+ the absence of a blanket tag was itself the statement.** Three
5972
+ reasons, and the third is the one that decided it:
5973
+
5974
+ 1. It keeps the restrict-only check **LOCAL** — the value an
5975
+ overlay is compared against sits in the same entry, instead
5976
+ of requiring a walk up to option/group/operation scope that
5977
+ must be got right at every nesting depth.
5978
+ 2. It keeps consumers' parsers correct as written: requiring the
5979
+ blanket value IS the rule they already enforce.
5980
+ 3. **It stops the absence of a key carrying meaning.** A reader
5981
+ seeing only `per_class_availability` would have to INFER the
5982
+ general level from a key that is not there — the failure
5983
+ shape this contract spent 2026-07-28 removing everywhere
5984
+ else, and it should not be reintroduced here.
5985
+
5986
+ Nothing is lost by requiring it: the blanket value is `stable`,
5987
+ which is TRUE, and most-cautious inheritance then yields the
5988
+ intended behaviour from the per-class restriction on top.
5775
5989
  required:
5776
5990
  - availability
5777
5991
  properties:
5778
5992
  availability:
5779
5993
  $ref: '#/components/schemas/AvailabilityValue'
5994
+ per_class_availability:
5995
+ type: object
5996
+ description: |
5997
+ Per-execution-class overlay for this enum value: restricts it
5998
+ on named `processing_class` entries of the parent mime_group
5999
+ while leaving the others at the inherited level. Keys MUST be
6000
+ classes the group declares. See `schemas/FORMAT.md`
6001
+ §`per_class_availability`.
6002
+ additionalProperties:
6003
+ $ref: '#/components/schemas/PerClassAvailabilityEntry'
5780
6004
  required_tier:
5781
6005
  description: |
5782
6006
  Tier required to use this enum value. Optional — omit when
@@ -5915,6 +6139,7 @@ components:
5915
6139
 
5916
6140
  UploadSource:
5917
6141
  type: object
6142
+ additionalProperties: false # closed to the API allowlist {type, file_id} — fZXM5VZd
5918
6143
  description: |
5919
6144
  References an upload created via `POST /api/uploads` (single)
5920
6145
  or completed via `POST /api/uploads/multipart/complete`
@@ -5931,6 +6156,7 @@ components:
5931
6156
 
5932
6157
  JobOutputSource:
5933
6158
  type: object
6159
+ additionalProperties: false # closed to the API allowlist {type, from, operation} — fZXM5VZd
5934
6160
  description: |
5935
6161
  References the output of an upstream job in the same workflow.
5936
6162
  Used to chain operations: workflow runs job A first, then job B
@@ -5954,6 +6180,7 @@ components:
5954
6180
 
5955
6181
  ExternalImportToken:
5956
6182
  type: object
6183
+ additionalProperties: false # closed to the API allowlist {type, external_source_id} — fZXM5VZd
5957
6184
  description: |
5958
6185
  Opaque handle returned by `POST /api/external-imports` for a
5959
6186
  one-shot bearer URL (S3 presigned, GCS signed, Azure SAS,
@@ -5973,6 +6200,7 @@ components:
5973
6200
 
5974
6201
  ConnectionSource:
5975
6202
  type: object
6203
+ additionalProperties: false # closed to the API allowlist {type, connection_id, path} — fZXM5VZd
5976
6204
  description: |
5977
6205
  Reference to a vaulted connection (pre-registered via
5978
6206
  `POST /api/connections` — owned by cross-repo `compression_api`
@@ -6013,6 +6241,17 @@ components:
6013
6241
 
6014
6242
  Wiring into `JobDefinition` lands via ticket
6015
6243
  [I12 (`Gr0VKFya`)](https://trello.com/c/Gr0VKFya).
6244
+
6245
+ **All four leaves are CLOSED** (`additionalProperties: false`) to
6246
+ exactly the API's per-leaf allowlist (`WorkflowSourceV2Constraint`,
6247
+ which hard-rejects any extra key). This is a deliberate forward-compat
6248
+ stance (ticket [`fZXM5VZd`](https://trello.com/c/fZXM5VZd)): a client
6249
+ sending a *future* additive field fails contract-validation the same way
6250
+ the API already rejects it — so contract and runtime agree. Adding a new
6251
+ field to a leaf therefore requires a paired API-allowlist change in the
6252
+ same co-land. The union aliases themselves (`WorkflowSource`,
6253
+ `MultiInputSource`, `ExternalSource`) stay open — they are `oneOf`
6254
+ dispatchers, not property-bearing objects.
6016
6255
  oneOf:
6017
6256
  - $ref: '#/components/schemas/UploadSource'
6018
6257
  - $ref: '#/components/schemas/JobOutputSource'
@@ -6914,7 +7153,10 @@ components:
6914
7153
  documented string (not a strict enum) so the rate-limit subset
6915
7154
  validates against the same schema and consumers tolerate unknown
6916
7155
  codes; SDKs branch on the `LONG_FORM_CONCURRENCY_LIMIT_EXCEEDED`
6917
- value to distinguish the two.
7156
+ value to distinguish it. A third links-absent branch shares this
7157
+ `429`: `DUPLICATE_IN_PROGRESS` (idempotency fold, ticket
7158
+ [`DSxwCetg`](https://trello.com/c/DSxwCetg)) — see the endpoint's
7159
+ `429` response description for the full trigger list.
6918
7160
 
6919
7161
  Mirrors the runtime shape produced by `compression_api`'s
6920
7162
  `WorkflowController` +
@@ -9798,6 +10040,82 @@ components:
9798
10040
  - `tier_policy`: emitted when the caller's
9799
10041
  `processing.class_hint` (e.g. `short_form_only`) forced
9800
10042
  the decision rather than input characteristics.
10043
+ - `input_metrics_unavailable`: **the classifier did not have
10044
+ every metric the decision required.** One or more of the
10045
+ duration / size figures it needed was unavailable at
10046
+ create-plan time (e.g. an upload probe had not landed), so a
10047
+ class was DEFAULTED rather than chosen. Note this covers the
10048
+ PARTIAL case as well as the none-at-all case — see below;
10049
+ having *some* metrics is not having the metric the decision
10050
+ required. **This is the only
10051
+ value that does not assert a measurement.** Every other value
10052
+ states a fact about the input; this one states that no such
10053
+ fact was obtained.
10054
+
10055
+ **It is a reason a class was DEFAULTED, not a reason a class
10056
+ was CHOSEN** — despite sitting in `ProcessingClassReason`.
10057
+ Read it as *no routing claim was made*. Consumers MUST NOT
10058
+ read the assigned `processing_class` as evidence the input
10059
+ fits that class's constraints when this reason is present,
10060
+ and MUST NOT surface it as a positive statement about the
10061
+ file.
10062
+
10063
+ **Partial measurement usually counts as unmeasured.** On a
10064
+ multi-input operation, emit this whenever a contributing
10065
+ input lacked the metric the decision needed — a sum over the
10066
+ inputs that happened to be probed is not a measurement of the
10067
+ request, even though it is not empty either. The honest
10068
+ predicate is "did I have every metric this decision required",
10069
+ not "did I have some".
10070
+
10071
+ **The exception, and it is a principle rather than a special
10072
+ case: partial evidence that is DECISIVE is still evidence.**
10073
+ Ask whether the missing data could FALSIFY the claim the
10074
+ reason makes:
10075
+
10076
+ - `within_short_form_limits` claims the input **fits**. An
10077
+ unmeasured input can only ADD to the sum, so it could push
10078
+ the request over the cap — the missing data can falsify the
10079
+ claim. This reason therefore requires COMPLETE measurement,
10080
+ and a partial sum must report `input_metrics_unavailable`.
10081
+ - `input_duration_exceeds_short_form` /
10082
+ `input_size_exceeds_short_form` claim the input **exceeds**
10083
+ a cap. The sums are MONOTONE — they only grow — so once the
10084
+ measured subset alone crosses the cap, the missing data
10085
+ cannot falsify the claim. The escalation is positively
10086
+ evidenced, and the decision did not *need* the missing
10087
+ metric. **Report the real reason, NOT
10088
+ `input_metrics_unavailable`.**
10089
+
10090
+ Reporting "I could not measure" for a decision that WAS
10091
+ positively evidenced is a lie in the opposite direction, and
10092
+ it costs twice: it understates what the server knew, and —
10093
+ because this field carries one value — it MASKS a more
10094
+ specific true reason such as `merge_re_encode_long_form`.
10095
+
10096
+ **Generalise by the falsifiability test, not by the list
10097
+ above.** If a future cap is a band rather than a ceiling, or
10098
+ a metric can reduce a total, the monotonicity no longer holds
10099
+ and the exception does not apply.
10100
+
10101
+ **Known limit, stated so it is not later read as a gap in a
10102
+ completed fix:** an input whose probe landed with a duration
10103
+ of **zero** counts as MEASURED and contributes 0 to the sum.
10104
+ That is indistinguishable from a genuine zero-length input
10105
+ from outside the classifier, so this value does not and
10106
+ cannot cover it.
10107
+
10108
+ **Why this value exists (2026-07-28).** A deduplicated upload
10109
+ (and, independently, a fresh upload racing an async probe)
10110
+ reaches create-plan with no duration, and a 62-minute merge was
10111
+ assigned `short_form` with reason `within_short_form_limits` —
10112
+ an affirmative claim that a 62-minute input fits inside a
10113
+ `PT5M` cap. The fallback was indistinguishable from a genuine
10114
+ measurement, so the mis-route was invisible. A classifier that
10115
+ cannot say *"I did not know"* has no way to be honest; this
10116
+ value is that sentence. Emit it in preference to a
10117
+ measurement-asserting value whenever the metrics were absent,
10118
+ even if the class ultimately chosen happens to be correct.
9801
10119
  enum:
9802
10120
  - within_short_form_limits
9803
10121
  - input_size_exceeds_short_form
@@ -9805,6 +10123,7 @@ components:
9805
10123
  - merge_re_encode_long_form
9806
10124
  - requires_reencode
9807
10125
  - tier_policy
10126
+ - input_metrics_unavailable
9808
10127
 
9809
10128
  ProcessingPlanJob:
9810
10129
  type: object
@@ -9845,6 +10164,90 @@ components:
9845
10164
  $ref: '#/components/schemas/EstimateQuality'
9846
10165
  reason:
9847
10166
  $ref: '#/components/schemas/ProcessingClassReason'
10167
+ dropped_options:
10168
+ type: array
10169
+ description: |
10170
+ Options the SERVER supplied on the caller's behalf and then
10171
+ REMOVED, because the resolved execution path cannot honour
10172
+ them. **Never contains a value the caller sent explicitly** —
10173
+ an explicit option the path cannot honour is refused with
10174
+ `422 feature_not_available`, not silently dropped. That
10175
+ split is the whole rule: a caller who asked for nothing is
10176
+ not punished for our default; a caller who asked for
10177
+ something is told.
10178
+
10179
+ **Why this field exists at all.** Dropping a defaulted
10180
+ option is better than refusing the request, and it is still
10181
+ a silent no-op unless we say so — the caller asked for
10182
+ (say) audio normalisation, we did not do it, and nobody
10183
+ told them. This field is the "we did not do that" sentence,
10184
+ the same honesty requirement as
10185
+ `ProcessingClassReason.input_metrics_unavailable`.
10186
+
10187
+ **🔴 ABSENCE CARRIES NO INFORMATION until every server
10188
+ emits it.** An empty array means "nothing was dropped". An
10189
+ ABSENT array means "this server does not report drops" —
10190
+ consumers MUST NOT read absence as "nothing was dropped".
10191
+ Once the emitting side ships, the array is always present.
10192
+ items:
10193
+ $ref: '#/components/schemas/DroppedOption'
10194
+
10195
+ DroppedOption:
10196
+ type: object
10197
+ description: |
10198
+ One server-supplied option removed from a job before dispatch.
10199
+ **Names the THING, the WHY and the PATH** — the three parts a
10200
+ caller needs to act, and the three a single interpolated string
10201
+ would fuse into something unparseable.
10202
+ required:
10203
+ - option
10204
+ - reason
10205
+ properties:
10206
+ option:
10207
+ type: string
10208
+ description: The option key that was removed, as it appears in the operation schema.
10209
+ example: normalize_audio
10210
+ operation_type:
10211
+ type: string
10212
+ description: |
10213
+ The operation the option belonged to. Present because a job
10214
+ may carry several operations, so the option key alone does
10215
+ not identify where the drop happened.
10216
+ example: merge
10217
+ operation_id:
10218
+ type: string
10219
+ format: uuid
10220
+ description: The specific operation, when the server can attribute the drop to one.
10221
+ processing_class:
10222
+ $ref: '#/components/schemas/ProcessingClass'
10223
+ reason:
10224
+ type: string
10225
+ description: |
10226
+ Why the option was dropped. **A documented vocabulary, NOT a
10227
+ strict enum** — deliberately, following `error_code`: a
10228
+ consumer MUST map known values to a friendly reason and
10229
+ MUST degrade an unknown one, so the vocabulary can grow
10230
+ without breaking clients.
10231
+
10232
+ **Known values:**
10233
+
10234
+ - `unavailable_on_processing_class` — the option is tagged
10235
+ unavailable for the class this job resolved to (see
10236
+ `per_class_availability` in `schemas/FORMAT.md`). The
10237
+ `processing_class` field names which.
10238
+ - `processing_class_unmeasured` — the class could NOT be
10239
+ measured (see
10240
+ `ProcessingClassReason.input_metrics_unavailable`), so the
10241
+ option was dropped rather than refused. **Refusing a
10242
+ caller on a guessed class is the same error as asserting
10243
+ a measurement never taken**, so an unmeasured basis
10244
+ degrades to a drop and never to a 422.
10245
+
10246
+ The class token is deliberately NOT interpolated into this
10247
+ string: the reason and the path are separate fields because
10248
+ a fused `not_available_on_<class>` is unparseable and
10249
+ duplicates `processing_class`.
10250
+ example: unavailable_on_processing_class
9848
10251
 
9849
10252
  ProcessingPlan:
9850
10253
  type: object
@@ -10470,9 +10873,43 @@ components:
10470
10873
  - processing_plan
10471
10874
  - warnings
10472
10875
  - created_at
10876
+ - anonymous
10473
10877
  properties:
10474
10878
  workflow_id:
10475
10879
  $ref: '#/components/schemas/UuidV7'
10880
+ anonymous:
10881
+ type: boolean
10882
+ readOnly: true
10883
+ # REQUIRED and NOT nullable, deliberately: absence must be
10884
+ # STRUCTURALLY IMPOSSIBLE rather than merely discouraged. A field a
10885
+ # client is told to rely on, which can be missing, is a field the
10886
+ # client will write a fallback for — and the fallback here is the
10887
+ # exact inference this field exists to replace.
10888
+ #
10889
+ # END OF LIFE, recorded now while it costs nothing: this is a boolean
10890
+ # because there are exactly TWO creation modes today. If a third ever
10891
+ # appears (service account, delegated key), THIS FIELD IS AT END OF
10892
+ # LIFE and the fix is an enum — do NOT add a second boolean beside it.
10893
+ # Two booleans encoding three states is how a field stops being
10894
+ # answerable. Building the enum today would be premature; the marker
10895
+ # is not.
10896
+ description: |
10897
+ Whether this workflow was created **without an owning account**.
10898
+ **Always present.**
10899
+
10900
+ Clients MUST use this field to determine anonymity and **MUST NOT
10901
+ infer it from the presence or absence of `cap`.** That inference
10902
+ was licensed by this contract's own earlier wording, was correct
10903
+ when written, and is being withdrawn: `cap` is scheduled to become
10904
+ present for owned workflows too
10905
+ ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)), at which point any
10906
+ client deriving ownership from it silently misclassifies every
10907
+ authenticated workflow.
10908
+
10909
+ This field ships FIRST and alone, ahead of that change, so no
10910
+ consumer has to be correct at the same instant a producer changes
10911
+ behaviour.
10912
+ example: false
10476
10913
  status:
10477
10914
  $ref: '#/components/schemas/WorkflowStatus'
10478
10915
  created_at:
@@ -10568,13 +11005,27 @@ components:
10568
11005
  - "null"
10569
11006
  readOnly: true
10570
11007
  description: |
10571
- Per-workflow capability token (plaintext). Present ONLY for an
10572
- **anonymous (null-owner)** workflow create — it is the bearer that
10573
- authorizes reads of this workflow without a session. ABSENT for
10574
- authenticated creates (the session authorizes those). Like
11008
+ Per-workflow capability token (plaintext) — the bearer that
11009
+ authorizes reads of this workflow without a session. Like
10575
11010
  `webhook_secret`, this is the only time it is exposed; it does not
10576
11011
  appear in status queries.
10577
11012
 
11013
+ **Do NOT use the presence or absence of this field to determine
11014
+ whether a workflow is anonymous — read `anonymous` instead.** Today
11015
+ `cap` is emitted only for anonymous (null-owner) creates and is
11016
+ absent for authenticated ones, so the inference currently *works*;
11017
+ that is precisely why it needs stating. It is scheduled to stop
11018
+ being true ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)): `cap` will
11019
+ be minted for owned workflows so that a logged-in caller can
11020
+ authorize a read against the separate stream host, where a session
11021
+ cookie does not reach.
11022
+
11023
+ The prohibition lives here, in the contract text, rather than only
11024
+ in a consumer's code review, because a consumer that encoded the
11025
+ old wording accurately was reading this contract correctly — that
11026
+ is the contract working, and it is this text's job to withdraw the
11027
+ licence.
11028
+
10578
11029
  Pass it as the `X-Workflow-Capability` request header on
10579
11030
  `GET /api/workflows/{id}/status` / `/downloads` / `/events`. A wrong
10580
11031
  or missing cap on a null-owner workflow returns **404**
@@ -11248,11 +11699,29 @@ components:
11248
11699
  Distinct from the workflow/API create-time `ErrorEnvelope.error`
11249
11700
  vocabulary — this is the per-operation processing failure.
11250
11701
 
11251
- **Retry semantics:** the sibling `is_retryable` marks the transient
11252
- codes (`out_of_memory`, `timeout`, `s3_download_failed`,
11253
- `s3_upload_failed`); those are auto-redriven (SQS) and exhausted
11254
- before a failure surfaces, so a reported failure is always terminal —
11255
- `is_retryable` only tells the user whether re-submitting is worthwhile.
11702
+ **Retry semantics — DERIVE THEM FROM THIS FIELD.** Retryability is a
11703
+ property OF THE ERROR CODE, not an independent fact about an
11704
+ occurrence: the same code is always equally retryable, so there is
11705
+ no per-response boolean on this surface to read. The transient codes
11706
+ are `out_of_memory`, `timeout`, `s3_download_failed` and
11707
+ `s3_upload_failed`; the AsyncAPI `ErrorCode` enum groups every value
11708
+ under **Retryable** / **Non-retryable** headings and is the source of
11709
+ truth for that mapping.
11710
+
11711
+ Note a reported failure is **always terminal** regardless: transient
11712
+ codes are auto-redriven (SQS) and exhausted before a failure ever
11713
+ surfaces here, so retryability only tells the caller whether
11714
+ **re-submitting** is worthwhile.
11715
+
11716
+ **This docstring previously referred to "the sibling `is_retryable`".
11717
+ There is no such field on the OpenAPI surface** — it exists only on
11718
+ the AsyncAPI worker→API channel, so no generated REST client could
11719
+ ever carry it, and the contract was describing to consumers something
11720
+ it does not deliver (ticket `wdOF3ol4`). Deliberately corrected by
11721
+ REMOVING the promise rather than by adding the field: a per-response
11722
+ boolean would be a second source of truth for a fact the code already
11723
+ determines, free to drift from it, and it would break again when the
11724
+ `retryable` boolean→enum change lands.
11256
11725
 
11257
11726
  **Codes** (closed set; meaning):
11258
11727
  `invalid_options` (options invalid for this op — most common),
@@ -11265,6 +11734,12 @@ components:
11265
11734
  `invalid_key` (storage key invalid),
11266
11735
  `processing_failed` (non-specific processing failure),
11267
11736
  `s3_access_denied` (storage access denied — fail-fast, non-retryable),
11737
+ `input_too_large` (input exceeds our PROCESSING limits — deterministic,
11738
+ user-actionable via downscaling or a higher tier; distinct from the
11739
+ byte caps, which are refused at create and never reach a worker),
11740
+ `never_started` (the operation was terminated without ever running
11741
+ because its job reached a terminal state first — an upstream failure
11742
+ OR a cancellation; API-derived, never worker-emitted),
11268
11743
  `unknown` (unclassified),
11269
11744
  `out_of_memory` (retryable), `timeout` (retryable),
11270
11745
  `s3_download_failed` (retryable), `s3_upload_failed` (retryable).
@@ -13168,6 +13643,31 @@ components:
13168
13643
  scoped to a single option (e.g. an operation may have a
13169
13644
  free-tier base option set with one or two `pro`-tier
13170
13645
  advanced options gated this way).
13646
+ per_class_availability:
13647
+ type: object
13648
+ description: |
13649
+ Per-EXECUTION-CLASS overlay for this option: restricts it on named
13650
+ `processing_class` entries of the parent mime_group while leaving
13651
+ the others at the inherited level. Keys MUST be classes the group
13652
+ declares.
13653
+
13654
+ Use this — NOT an operation-wide `availability` — when a worker
13655
+ honours an option on one execution path and refuses it on another.
13656
+ Marking the whole option `planned` would withdraw a working
13657
+ capability from every caller in order to describe one path's gap.
13658
+
13659
+ May only RESTRICT relative to the scope it overlays, never re-open
13660
+ it. See `schemas/FORMAT.md` §`per_class_availability` and
13661
+ §Precedence (machine-enforced by
13662
+ `scripts/check-per-class-availability.py`).
13663
+
13664
+ Note the option-level overlay and the per-VALUE one
13665
+ (`per_value_availability.<value>.per_class_availability`) can
13666
+ coexist: the option-level says the worker refuses the KEY on that
13667
+ path, the value-level says it refuses one VALUE. Most-cautious
13668
+ inheritance applies.
13669
+ additionalProperties:
13670
+ $ref: '#/components/schemas/PerClassAvailabilityEntry'
13171
13671
  per_value_availability:
13172
13672
  $ref: '#/components/schemas/PerValueAvailability'
13173
13673
  description: |