@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.
- package/accepted-options/accepted-options.json +1 -2
- package/accepted-options/image-output-routes.json +1 -1
- package/asyncapi/events.yaml +19 -0
- package/availability/availability.json +31 -38
- package/code-builder/code-builder-metadata.json +46 -57
- package/dist/asyncapi/ErrorCode.d.ts +2 -0
- package/dist/asyncapi/ErrorCode.js +2 -0
- package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
- package/dist/openapi/models/AccountLimitEntry.js +1 -1
- package/dist/openapi/models/AccountLimits.d.ts +1 -1
- package/dist/openapi/models/AccountLimits.js +1 -1
- package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
- package/dist/openapi/models/AccountLimitsLimits.js +1 -1
- package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
- package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
- package/dist/openapi/models/AuthErrorResponse.js +1 -1
- package/dist/openapi/models/AuthErrorType.d.ts +1 -1
- package/dist/openapi/models/AuthErrorType.js +1 -1
- package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
- package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
- package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
- package/dist/openapi/models/AvailabilityValue.js +1 -1
- package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
- package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
- package/dist/openapi/models/BillingCheckoutRequest.d.ts +1 -1
- package/dist/openapi/models/BillingCheckoutRequest.js +1 -1
- package/dist/openapi/models/BillingCheckoutSession.d.ts +1 -1
- package/dist/openapi/models/BillingCheckoutSession.js +1 -1
- package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +1 -1
- package/dist/openapi/models/CallbackEventType.d.ts +1 -1
- package/dist/openapi/models/CallbackEventType.js +1 -1
- package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
- package/dist/openapi/models/CapabilityCondition.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
- package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
- package/dist/openapi/models/CapabilityConstraint.js +1 -1
- package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
- package/dist/openapi/models/CapabilityInputSpec.js +1 -1
- package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
- package/dist/openapi/models/CapabilityProduces.js +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf.d.ts +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf.js +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
- package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
- package/dist/openapi/models/ChangePasswordRequest.js +1 -1
- package/dist/openapi/models/CodegenSource.d.ts +1 -1
- package/dist/openapi/models/CodegenSource.js +1 -1
- package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceInput.js +1 -1
- package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceJob.js +1 -1
- package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceJobSource.js +1 -1
- package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceOperation.js +1 -1
- package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +1 -1
- package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
- package/dist/openapi/models/CompositionPlan.d.ts +1 -1
- package/dist/openapi/models/CompositionPlan.js +1 -1
- package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
- package/dist/openapi/models/CompositionPlanJob.js +1 -1
- package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
- package/dist/openapi/models/CompositionPlanOperation.js +1 -1
- package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
- package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
- package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
- package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
- package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
- package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
- package/dist/openapi/models/ConnectionSource.d.ts +1 -1
- package/dist/openapi/models/ConnectionSource.js +1 -1
- package/dist/openapi/models/ContactRequest.d.ts +1 -1
- package/dist/openapi/models/ContactRequest.js +1 -1
- package/dist/openapi/models/ContactSubject.d.ts +1 -1
- package/dist/openapi/models/ContactSubject.js +1 -1
- package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
- package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
- package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
- package/dist/openapi/models/CreateApiKey201Response.js +1 -1
- package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
- package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
- package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
- package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
- package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +1 -1
- package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +1 -1
- package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
- package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
- package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
- package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
- package/dist/openapi/models/CreateWorkflow401Response.d.ts +1 -1
- package/dist/openapi/models/CreateWorkflow401Response.js +1 -1
- package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
- package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
- package/dist/openapi/models/CreditTransaction.d.ts +1 -1
- package/dist/openapi/models/CreditTransaction.js +1 -1
- package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
- package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
- package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
- package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
- package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
- package/dist/openapi/models/CreditsUsageResponse.js +1 -1
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
- package/dist/openapi/models/Delivery.d.ts +1 -1
- package/dist/openapi/models/Delivery.js +1 -1
- package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
- package/dist/openapi/models/DeliveryOutputRef.js +1 -1
- package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
- package/dist/openapi/models/DeliveryPlan.js +1 -1
- package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
- package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
- package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
- package/dist/openapi/models/DeliveryPlanReason.js +1 -1
- package/dist/openapi/models/DeliverySelection.d.ts +1 -1
- package/dist/openapi/models/DeliverySelection.js +1 -1
- package/dist/openapi/models/DownloadBundle.d.ts +1 -1
- package/dist/openapi/models/DownloadBundle.js +1 -1
- package/dist/openapi/models/DroppedOption.d.ts +88 -0
- package/dist/openapi/models/DroppedOption.js +54 -0
- package/dist/openapi/models/EmailNotify.d.ts +1 -1
- package/dist/openapi/models/EmailNotify.js +1 -1
- package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
- package/dist/openapi/models/EndpointProjection.d.ts +1 -1
- package/dist/openapi/models/EndpointProjection.js +1 -1
- package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
- package/dist/openapi/models/ErrorEnvelope.js +1 -1
- package/dist/openapi/models/EstimateQuality.d.ts +1 -1
- package/dist/openapi/models/EstimateQuality.js +1 -1
- package/dist/openapi/models/EstimateRange.d.ts +1 -1
- package/dist/openapi/models/EstimateRange.js +1 -1
- package/dist/openapi/models/ExternalDestination.d.ts +1 -1
- package/dist/openapi/models/ExternalDestination.js +1 -1
- package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
- package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
- package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
- package/dist/openapi/models/ExternalImportRequest.js +1 -1
- package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
- package/dist/openapi/models/ExternalImportToken.js +1 -1
- package/dist/openapi/models/ExternalSource.d.ts +1 -1
- package/dist/openapi/models/ExternalSource.js +1 -1
- package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
- package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
- package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
- package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
- package/dist/openapi/models/FeatureViolation.d.ts +1 -1
- package/dist/openapi/models/FeatureViolation.js +1 -1
- package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
- package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
- package/dist/openapi/models/JobDefinition.d.ts +1 -1
- package/dist/openapi/models/JobDefinition.js +1 -1
- package/dist/openapi/models/JobDownload.d.ts +1 -1
- package/dist/openapi/models/JobDownload.js +1 -1
- package/dist/openapi/models/JobInputV2.d.ts +1 -1
- package/dist/openapi/models/JobInputV2.js +1 -1
- package/dist/openapi/models/JobMediaClass.d.ts +1 -1
- package/dist/openapi/models/JobMediaClass.js +1 -1
- package/dist/openapi/models/JobOutputSource.d.ts +1 -1
- package/dist/openapi/models/JobOutputSource.js +1 -1
- package/dist/openapi/models/JobResponse.d.ts +1 -1
- package/dist/openapi/models/JobResponse.js +1 -1
- package/dist/openapi/models/JobStatus.d.ts +1 -1
- package/dist/openapi/models/JobStatus.js +1 -1
- package/dist/openapi/models/JobType.d.ts +1 -1
- package/dist/openapi/models/JobType.js +1 -1
- package/dist/openapi/models/LivenessResponse.d.ts +1 -1
- package/dist/openapi/models/LivenessResponse.js +1 -1
- package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
- package/dist/openapi/models/LoginUser200Response.js +1 -1
- package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
- package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
- package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
- package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
- package/dist/openapi/models/LoginUser401Response.d.ts +1 -1
- package/dist/openapi/models/LoginUser401Response.js +1 -1
- package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
- package/dist/openapi/models/LoginUserRequest.js +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +5 -2
- package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
- package/dist/openapi/models/MetadataResponse.d.ts +1 -1
- package/dist/openapi/models/MetadataResponse.js +1 -1
- package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
- package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
- package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
- package/dist/openapi/models/MetadataResponseExif.js +1 -1
- package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
- package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
- package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
- package/dist/openapi/models/MimeGroupSchema.js +1 -1
- package/dist/openapi/models/MultiInputSource.d.ts +1 -1
- package/dist/openapi/models/MultiInputSource.js +1 -1
- package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
- package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
- package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
- package/dist/openapi/models/MultipartPartListing.js +1 -1
- package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
- package/dist/openapi/models/MultipartPresignRequest.js +1 -1
- package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartPresignResponse.js +1 -1
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartStatusResponse.js +1 -1
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
- package/dist/openapi/models/NotifyConfig.d.ts +1 -1
- package/dist/openapi/models/NotifyConfig.js +1 -1
- package/dist/openapi/models/OperationCapability.d.ts +1 -1
- package/dist/openapi/models/OperationCapability.js +1 -1
- package/dist/openapi/models/OperationDefinition.d.ts +1 -1
- package/dist/openapi/models/OperationDefinition.js +1 -1
- package/dist/openapi/models/OperationDownload.d.ts +1 -1
- package/dist/openapi/models/OperationDownload.js +1 -1
- package/dist/openapi/models/OperationInputModel.d.ts +1 -1
- package/dist/openapi/models/OperationInputModel.js +1 -1
- package/dist/openapi/models/OperationResponse.d.ts +30 -6
- package/dist/openapi/models/OperationResponse.js +1 -1
- package/dist/openapi/models/OperationResult.d.ts +1 -1
- package/dist/openapi/models/OperationResult.js +1 -1
- package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
- package/dist/openapi/models/OperationResultMetadata.js +1 -1
- package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
- package/dist/openapi/models/OperationResultMetrics.js +1 -1
- package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
- package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
- package/dist/openapi/models/OperationStatus.d.ts +1 -1
- package/dist/openapi/models/OperationStatus.js +1 -1
- package/dist/openapi/models/OperationType.d.ts +1 -1
- package/dist/openapi/models/OperationType.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
- package/dist/openapi/models/OptionSchema.d.ts +30 -1
- package/dist/openapi/models/OptionSchema.js +4 -1
- package/dist/openapi/models/OutputProperties.d.ts +1 -1
- package/dist/openapi/models/OutputProperties.js +1 -1
- package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
- package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
- package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +58 -0
- package/dist/openapi/models/PerClassAvailabilityEntry.js +48 -0
- package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
- package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
- package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +44 -1
- package/dist/openapi/models/PerValueAvailabilityEntry.js +5 -1
- package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
- package/dist/openapi/models/PresignedUrlPart.js +1 -1
- package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
- package/dist/openapi/models/ProbePendingResponse.js +1 -1
- package/dist/openapi/models/ProcessingClass.d.ts +1 -1
- package/dist/openapi/models/ProcessingClass.js +1 -1
- package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
- package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
- package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassEntry.js +1 -1
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
- package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassHint.js +1 -1
- package/dist/openapi/models/ProcessingClassReason.d.ts +78 -1
- package/dist/openapi/models/ProcessingClassReason.js +79 -2
- package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
- package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
- package/dist/openapi/models/ProcessingPlan.js +1 -1
- package/dist/openapi/models/ProcessingPlanJob.d.ts +30 -1
- package/dist/openapi/models/ProcessingPlanJob.js +4 -1
- package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
- package/dist/openapi/models/ReEncodeDecision.js +1 -1
- package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
- package/dist/openapi/models/ReadinessResponse.js +1 -1
- package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
- package/dist/openapi/models/RegisterUser422Response.js +1 -1
- package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
- package/dist/openapi/models/RegisterUserRequest.js +1 -1
- package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
- package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
- package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
- package/dist/openapi/models/ResetPasswordRequest.js +1 -1
- package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
- package/dist/openapi/models/ResponseEnvelope.js +1 -1
- package/dist/openapi/models/RetryResponse.d.ts +1 -1
- package/dist/openapi/models/RetryResponse.js +1 -1
- package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
- package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
- package/dist/openapi/models/SseCompletionBase.js +1 -1
- package/dist/openapi/models/SseEventType.d.ts +1 -1
- package/dist/openapi/models/SseEventType.js +1 -1
- package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
- package/dist/openapi/models/SseJobCompletedData.js +1 -1
- package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
- package/dist/openapi/models/SseJobFailedData.js +1 -1
- package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
- package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
- package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
- package/dist/openapi/models/SseOperationCompletedData.js +1 -1
- package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
- package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
- package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
- package/dist/openapi/models/SseOperationFailedData.js +1 -1
- package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
- package/dist/openapi/models/SseOperationProgressData.js +1 -1
- package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
- package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
- package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
- package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
- package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
- package/dist/openapi/models/TierRestrictionKind.js +1 -1
- package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
- package/dist/openapi/models/TierRestrictionResponse.js +1 -1
- package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
- package/dist/openapi/models/UpdateProfile200Response.js +1 -1
- package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
- package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
- package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
- package/dist/openapi/models/UpdateProfile422Response.js +1 -1
- package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
- package/dist/openapi/models/UpdateProfileRequest.js +1 -1
- package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
- package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
- package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
- package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
- package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
- package/dist/openapi/models/UploadFile403Response.js +1 -1
- package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
- package/dist/openapi/models/UploadFile422Response.js +1 -1
- package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
- package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
- package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
- package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
- package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
- package/dist/openapi/models/UploadProbeResponse.js +1 -1
- package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
- package/dist/openapi/models/UploadProbeStatus.js +1 -1
- package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
- package/dist/openapi/models/UploadResponse.d.ts +1 -1
- package/dist/openapi/models/UploadResponse.js +1 -1
- package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
- package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
- package/dist/openapi/models/UploadSource.d.ts +1 -1
- package/dist/openapi/models/UploadSource.js +1 -1
- package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
- package/dist/openapi/models/UploadThresholds.d.ts +1 -1
- package/dist/openapi/models/UploadThresholds.js +1 -1
- package/dist/openapi/models/UserTier.d.ts +1 -1
- package/dist/openapi/models/UserTier.js +1 -1
- package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
- package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
- package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
- package/dist/openapi/models/VerifyEmailRequest.js +1 -1
- package/dist/openapi/models/WarningType.d.ts +1 -1
- package/dist/openapi/models/WarningType.js +1 -1
- package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
- package/dist/openapi/models/WebhookOperationContext.js +1 -1
- package/dist/openapi/models/WebhookPayload.d.ts +1 -1
- package/dist/openapi/models/WebhookPayload.js +1 -1
- package/dist/openapi/models/WorkflowArchiveResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowArchiveResponse.js +1 -1
- package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
- package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
- package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
- package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
- package/dist/openapi/models/WorkflowCreateResponse.d.ts +41 -6
- package/dist/openapi/models/WorkflowCreateResponse.js +4 -1
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
- package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
- package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
- package/dist/openapi/models/WorkflowEdge.js +1 -1
- package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
- package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowListResponse.js +1 -1
- package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
- package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
- package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
- package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
- package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
- package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
- package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
- package/dist/openapi/models/WorkflowProcessing.js +1 -1
- package/dist/openapi/models/WorkflowRestoreResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowRestoreResponse.js +1 -1
- package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowSource.d.ts +12 -1
- package/dist/openapi/models/WorkflowSource.js +1 -1
- package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
- package/dist/openapi/models/WorkflowStatus.js +1 -1
- package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
- package/dist/openapi/models/WorkflowSummary.js +1 -1
- package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
- package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
- package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
- package/dist/openapi/models/WorkflowWarning.js +1 -1
- package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
- package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
- package/dist/openapi/models/index.d.ts +2 -0
- package/dist/openapi/models/index.js +2 -0
- package/dist/openapi/runtime.d.ts +1 -1
- package/dist/openapi/runtime.js +1 -1
- package/dist/operations/compress.metadata.js +0 -3
- package/dist/operations/merge.metadata.js +6 -1
- package/dist/operations/thumbnail.d.ts +0 -2
- package/dist/operations/thumbnail.js +0 -1
- package/dist/operations/thumbnail.metadata.js +0 -4
- package/openapi/api.yaml +532 -32
- package/operation-capabilities/operation-capabilities.json +1 -1
- package/operations/schemas/audio_overlay.yaml +0 -4
- package/operations/schemas/compress.yaml +97 -56
- package/operations/schemas/convert.yaml +4 -3
- package/operations/schemas/merge.yaml +90 -3
- package/operations/schemas/render_variants.yaml +30 -7
- package/operations/schemas/thumbnail.yaml +89 -43
- 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.
|
|
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.
|
|
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` (
|
|
2008
|
-
|
|
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
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
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
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
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
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
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
|
|
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)
|
|
10572
|
-
|
|
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
|
|
11252
|
-
|
|
11253
|
-
|
|
11254
|
-
|
|
11255
|
-
`
|
|
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: |
|