@giveitsmaller/contracts 0.73.0 → 0.76.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/README.md +2 -2
- package/accepted-options/accepted-options.json +1 -1
- package/accepted-options/image-output-routes.json +1 -1
- package/asyncapi/events.yaml +200 -62
- package/availability/availability.json +71 -39
- package/code-builder/code-builder-metadata.json +134 -39
- package/dist/asyncapi/ErrorCode.d.ts +1 -0
- package/dist/asyncapi/ErrorCode.js +1 -0
- package/dist/asyncapi/Failure.d.ts +2 -0
- package/dist/asyncapi/LongFormJobMessage.d.ts +1 -0
- package/dist/asyncapi/MultiOutputCompletion.d.ts +2 -0
- package/dist/asyncapi/OperationMetrics.d.ts +2 -0
- package/dist/asyncapi/SingleOutputCompletion.d.ts +2 -0
- package/dist/openapi/models/AccountLimitEntry.d.ts +2 -2
- package/dist/openapi/models/AccountLimitEntry.js +2 -2
- package/dist/openapi/models/AccountLimits.d.ts +2 -2
- package/dist/openapi/models/AccountLimits.js +2 -2
- package/dist/openapi/models/AccountLimitsLimits.d.ts +14 -2
- package/dist/openapi/models/AccountLimitsLimits.js +6 -2
- package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeRequest.js +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeResponse.js +2 -2
- package/dist/openapi/models/AuthErrorResponse.d.ts +14 -5
- package/dist/openapi/models/AuthErrorResponse.js +2 -2
- package/dist/openapi/models/AuthErrorType.d.ts +2 -2
- package/dist/openapi/models/AuthErrorType.js +2 -2
- package/dist/openapi/models/AuthRejectionEnvelope.d.ts +2 -2
- package/dist/openapi/models/AuthRejectionEnvelope.js +2 -2
- package/dist/openapi/models/AuthenticatedIdentity.d.ts +2 -2
- package/dist/openapi/models/AuthenticatedIdentity.js +2 -2
- package/dist/openapi/models/AvailabilityValue.d.ts +2 -2
- package/dist/openapi/models/AvailabilityValue.js +2 -2
- package/dist/openapi/models/BalanceExhaustedResponse.d.ts +14 -5
- package/dist/openapi/models/BalanceExhaustedResponse.js +2 -2
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +2 -2
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +2 -2
- package/dist/openapi/models/BillingCheckoutRequest.d.ts +2 -2
- package/dist/openapi/models/BillingCheckoutRequest.js +2 -2
- package/dist/openapi/models/BillingCheckoutSession.d.ts +2 -2
- package/dist/openapi/models/BillingCheckoutSession.js +2 -2
- package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +2 -2
- package/dist/openapi/models/CallbackEventType.d.ts +2 -2
- package/dist/openapi/models/CallbackEventType.js +2 -2
- package/dist/openapi/models/CancelAccountDeletion200Response.d.ts +2 -2
- package/dist/openapi/models/CancelAccountDeletion200Response.js +2 -2
- package/dist/openapi/models/CancelAccountDeletion200ResponseData.d.ts +2 -2
- package/dist/openapi/models/CancelAccountDeletion200ResponseData.js +2 -2
- package/dist/openapi/models/CapabilityCondition.d.ts +2 -2
- package/dist/openapi/models/CapabilityCondition.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf1.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf2.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf3.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf4.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf5.js +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +2 -2
- package/dist/openapi/models/CapabilityConditionOneOf6.js +2 -2
- package/dist/openapi/models/CapabilityConstraint.d.ts +2 -2
- package/dist/openapi/models/CapabilityConstraint.js +2 -2
- package/dist/openapi/models/CapabilityInputSpec.d.ts +2 -2
- package/dist/openapi/models/CapabilityInputSpec.js +2 -2
- package/dist/openapi/models/CapabilityProduces.d.ts +2 -2
- package/dist/openapi/models/CapabilityProduces.js +2 -2
- package/dist/openapi/models/CapabilityProducesOneOf.d.ts +2 -2
- package/dist/openapi/models/CapabilityProducesOneOf.js +2 -2
- package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +2 -2
- package/dist/openapi/models/CapabilityProducesOneOf1.js +2 -2
- package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +2 -2
- package/dist/openapi/models/CapabilityProducesOneOf2.js +2 -2
- package/dist/openapi/models/ChangePasswordRequest.d.ts +2 -2
- package/dist/openapi/models/ChangePasswordRequest.js +2 -2
- package/dist/openapi/models/CheckoutSessionStatusResponse.d.ts +46 -0
- package/dist/openapi/models/CheckoutSessionStatusResponse.js +54 -0
- package/dist/openapi/models/CheckoutSessionStatusResponseData.d.ts +50 -0
- package/dist/openapi/models/CheckoutSessionStatusResponseData.js +55 -0
- package/dist/openapi/models/CodegenSource.d.ts +5 -4
- package/dist/openapi/models/CodegenSource.js +2 -2
- package/dist/openapi/models/CodegenSourceInput.d.ts +2 -2
- package/dist/openapi/models/CodegenSourceInput.js +2 -2
- package/dist/openapi/models/CodegenSourceJob.d.ts +2 -2
- package/dist/openapi/models/CodegenSourceJob.js +2 -2
- package/dist/openapi/models/CodegenSourceJobSource.d.ts +2 -2
- package/dist/openapi/models/CodegenSourceJobSource.js +2 -2
- package/dist/openapi/models/CodegenSourceOperation.d.ts +2 -2
- package/dist/openapi/models/CodegenSourceOperation.js +2 -2
- package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +2 -2
- package/dist/openapi/models/CodegenUploadPlaceholder.js +2 -2
- package/dist/openapi/models/CompositionPlan.d.ts +2 -2
- package/dist/openapi/models/CompositionPlan.js +2 -2
- package/dist/openapi/models/CompositionPlanJob.d.ts +2 -2
- package/dist/openapi/models/CompositionPlanJob.js +2 -2
- package/dist/openapi/models/CompositionPlanOperation.d.ts +2 -2
- package/dist/openapi/models/CompositionPlanOperation.js +2 -2
- package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +2 -2
- package/dist/openapi/models/ConfirmEmailChange200Response.js +2 -2
- package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +2 -2
- package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +2 -2
- package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +2 -2
- package/dist/openapi/models/ConfirmEmailChangeRequest.js +2 -2
- package/dist/openapi/models/ConnectionSource.d.ts +2 -2
- package/dist/openapi/models/ConnectionSource.js +2 -2
- package/dist/openapi/models/ContactRequest.d.ts +2 -2
- package/dist/openapi/models/ContactRequest.js +2 -2
- package/dist/openapi/models/ContactSubject.d.ts +2 -2
- package/dist/openapi/models/ContactSubject.js +2 -2
- package/dist/openapi/models/ContactValidationErrorResponse.d.ts +2 -2
- package/dist/openapi/models/ContactValidationErrorResponse.js +2 -2
- package/dist/openapi/models/CreateApiKey201Response.d.ts +2 -2
- package/dist/openapi/models/CreateApiKey201Response.js +2 -2
- package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +2 -2
- package/dist/openapi/models/CreateApiKey201ResponseData.js +2 -2
- package/dist/openapi/models/CreateApiKeyRequest.d.ts +2 -2
- package/dist/openapi/models/CreateApiKeyRequest.js +2 -2
- package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +2 -2
- package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +2 -2
- package/dist/openapi/models/CreateExternalImport403Response.d.ts +2 -2
- package/dist/openapi/models/CreateExternalImport403Response.js +2 -2
- package/dist/openapi/models/CreateExternalImport422Response.d.ts +2 -2
- package/dist/openapi/models/CreateExternalImport422Response.js +2 -2
- package/dist/openapi/models/CreateWorkflow401Response.d.ts +14 -5
- package/dist/openapi/models/CreateWorkflow401Response.js +2 -2
- package/dist/openapi/models/CreateWorkflow422Response.d.ts +2 -2
- package/dist/openapi/models/CreateWorkflow422Response.js +2 -2
- package/dist/openapi/models/CreditTransaction.d.ts +22 -12
- package/dist/openapi/models/CreditTransaction.js +2 -2
- package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +2 -2
- package/dist/openapi/models/CreditTransactionSourceBucket.js +2 -2
- package/dist/openapi/models/CreditsBalanceResponse.d.ts +2 -2
- package/dist/openapi/models/CreditsBalanceResponse.js +2 -2
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +2 -2
- package/dist/openapi/models/CreditsUsageResponse.d.ts +2 -2
- package/dist/openapi/models/CreditsUsageResponse.js +2 -2
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +2 -2
- package/dist/openapi/models/Delivery.d.ts +2 -2
- package/dist/openapi/models/Delivery.js +2 -2
- package/dist/openapi/models/DeliveryOutputRef.d.ts +2 -2
- package/dist/openapi/models/DeliveryOutputRef.js +2 -2
- package/dist/openapi/models/DeliveryPlan.d.ts +2 -2
- package/dist/openapi/models/DeliveryPlan.js +2 -2
- package/dist/openapi/models/DeliveryPlanOutput.d.ts +2 -2
- package/dist/openapi/models/DeliveryPlanOutput.js +2 -2
- package/dist/openapi/models/DeliveryPlanReason.d.ts +2 -2
- package/dist/openapi/models/DeliveryPlanReason.js +2 -2
- package/dist/openapi/models/DeliverySelection.d.ts +2 -2
- package/dist/openapi/models/DeliverySelection.js +2 -2
- package/dist/openapi/models/DownloadBundle.d.ts +2 -2
- package/dist/openapi/models/DownloadBundle.js +2 -2
- package/dist/openapi/models/DroppedOption.d.ts +2 -2
- package/dist/openapi/models/DroppedOption.js +2 -2
- package/dist/openapi/models/EmailNotify.d.ts +2 -2
- package/dist/openapi/models/EmailNotify.js +2 -2
- package/dist/openapi/models/EmptySuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/EmptySuccessEnvelope.js +2 -2
- package/dist/openapi/models/EndpointProjection.d.ts +2 -2
- package/dist/openapi/models/EndpointProjection.js +2 -2
- package/dist/openapi/models/EndpointProjectionServersInner.d.ts +2 -2
- package/dist/openapi/models/EndpointProjectionServersInner.js +2 -2
- package/dist/openapi/models/ErrorEnvelope.d.ts +14 -5
- package/dist/openapi/models/ErrorEnvelope.js +2 -2
- package/dist/openapi/models/EstimateQuality.d.ts +2 -2
- package/dist/openapi/models/EstimateQuality.js +2 -2
- package/dist/openapi/models/EstimateRange.d.ts +2 -2
- package/dist/openapi/models/EstimateRange.js +2 -2
- package/dist/openapi/models/ExportAccountData200Response.d.ts +2 -2
- package/dist/openapi/models/ExportAccountData200Response.js +2 -2
- package/dist/openapi/models/ExportAccountData200ResponseData.d.ts +2 -2
- package/dist/openapi/models/ExportAccountData200ResponseData.js +2 -2
- package/dist/openapi/models/ExternalDestination.d.ts +2 -2
- package/dist/openapi/models/ExternalDestination.js +2 -2
- package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +2 -2
- package/dist/openapi/models/ExternalImportCreatedResponse.js +2 -2
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +2 -2
- package/dist/openapi/models/ExternalImportRequest.d.ts +2 -2
- package/dist/openapi/models/ExternalImportRequest.js +2 -2
- package/dist/openapi/models/ExternalImportToken.d.ts +2 -2
- package/dist/openapi/models/ExternalImportToken.js +2 -2
- package/dist/openapi/models/ExternalSource.d.ts +2 -2
- package/dist/openapi/models/ExternalSource.js +2 -2
- package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +14 -5
- package/dist/openapi/models/FeatureNotAvailableResponse.js +2 -2
- package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +14 -5
- package/dist/openapi/models/FeatureTierRestrictedResponse.js +2 -2
- package/dist/openapi/models/FeatureViolation.d.ts +2 -2
- package/dist/openapi/models/FeatureViolation.js +2 -2
- package/dist/openapi/models/GetProfile200Response.d.ts +2 -2
- package/dist/openapi/models/GetProfile200Response.js +2 -2
- package/dist/openapi/models/GetProfile200ResponseData.d.ts +2 -2
- package/dist/openapi/models/GetProfile200ResponseData.js +2 -2
- package/dist/openapi/models/ImageEncodeCapabilities.d.ts +2 -2
- package/dist/openapi/models/ImageEncodeCapabilities.js +2 -2
- package/dist/openapi/models/JobDefinition.d.ts +2 -2
- package/dist/openapi/models/JobDefinition.js +2 -2
- package/dist/openapi/models/JobDownload.d.ts +2 -2
- package/dist/openapi/models/JobDownload.js +2 -2
- package/dist/openapi/models/JobInputV2.d.ts +2 -2
- package/dist/openapi/models/JobInputV2.js +2 -2
- package/dist/openapi/models/JobMediaClass.d.ts +2 -2
- package/dist/openapi/models/JobMediaClass.js +2 -2
- package/dist/openapi/models/JobOutputSource.d.ts +2 -2
- package/dist/openapi/models/JobOutputSource.js +2 -2
- package/dist/openapi/models/JobResponse.d.ts +2 -2
- package/dist/openapi/models/JobResponse.js +2 -2
- package/dist/openapi/models/JobStatus.d.ts +2 -2
- package/dist/openapi/models/JobStatus.js +2 -2
- package/dist/openapi/models/JobType.d.ts +2 -2
- package/dist/openapi/models/JobType.js +2 -2
- package/dist/openapi/models/LivenessResponse.d.ts +2 -2
- package/dist/openapi/models/LivenessResponse.js +2 -2
- package/dist/openapi/models/LoginUser200Response.d.ts +2 -2
- package/dist/openapi/models/LoginUser200Response.js +2 -2
- package/dist/openapi/models/LoginUser200ResponseData.d.ts +2 -2
- package/dist/openapi/models/LoginUser200ResponseData.js +2 -2
- package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +2 -2
- package/dist/openapi/models/LoginUser200ResponseDataUser.js +2 -2
- package/dist/openapi/models/LoginUser401Response.d.ts +14 -5
- package/dist/openapi/models/LoginUser401Response.js +2 -2
- package/dist/openapi/models/LoginUserRequest.d.ts +2 -2
- package/dist/openapi/models/LoginUserRequest.js +2 -2
- package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +14 -5
- package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +2 -2
- package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +2 -2
- package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +2 -2
- package/dist/openapi/models/MetadataResponse.d.ts +2 -2
- package/dist/openapi/models/MetadataResponse.js +2 -2
- package/dist/openapi/models/MetadataResponseDimensions.d.ts +2 -2
- package/dist/openapi/models/MetadataResponseDimensions.js +2 -2
- package/dist/openapi/models/MetadataResponseExif.d.ts +2 -2
- package/dist/openapi/models/MetadataResponseExif.js +2 -2
- package/dist/openapi/models/MetadataResponseExifGps.d.ts +2 -2
- package/dist/openapi/models/MetadataResponseExifGps.js +2 -2
- package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MetadataSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MimeGroupSchema.d.ts +39 -3
- package/dist/openapi/models/MimeGroupSchema.js +12 -2
- package/dist/openapi/models/MultiInputSource.d.ts +2 -2
- package/dist/openapi/models/MultiInputSource.js +2 -2
- package/dist/openapi/models/MultipartCompleteRequest.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteRequest.js +2 -2
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +2 -2
- package/dist/openapi/models/MultipartCompleteResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteResponse.js +2 -2
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +2 -2
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +2 -2
- package/dist/openapi/models/MultipartInitiateResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartInitiateResponse.js +2 -2
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartKeepaliveResponse.js +2 -2
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartPartListing.d.ts +2 -2
- package/dist/openapi/models/MultipartPartListing.js +2 -2
- package/dist/openapi/models/MultipartPresignRequest.d.ts +2 -2
- package/dist/openapi/models/MultipartPresignRequest.js +2 -2
- package/dist/openapi/models/MultipartPresignResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartPresignResponse.js +2 -2
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartStatusResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartStatusResponse.js +2 -2
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +2 -2
- package/dist/openapi/models/NotifyConfig.d.ts +9 -5
- package/dist/openapi/models/NotifyConfig.js +2 -2
- package/dist/openapi/models/OperationCapability.d.ts +2 -2
- package/dist/openapi/models/OperationCapability.js +2 -2
- package/dist/openapi/models/OperationDefinition.d.ts +2 -2
- package/dist/openapi/models/OperationDefinition.js +2 -2
- package/dist/openapi/models/OperationDownload.d.ts +2 -2
- package/dist/openapi/models/OperationDownload.js +2 -2
- package/dist/openapi/models/OperationInputModel.d.ts +2 -2
- package/dist/openapi/models/OperationInputModel.js +2 -2
- package/dist/openapi/models/OperationMessageParamsValue.d.ts +25 -0
- package/dist/openapi/models/OperationMessageParamsValue.js +31 -0
- package/dist/openapi/models/OperationResponse.d.ts +36 -2
- package/dist/openapi/models/OperationResponse.js +8 -2
- package/dist/openapi/models/OperationResult.d.ts +2 -2
- package/dist/openapi/models/OperationResult.js +2 -2
- package/dist/openapi/models/OperationResultMetadata.d.ts +29 -3
- package/dist/openapi/models/OperationResultMetadata.js +6 -2
- package/dist/openapi/models/OperationResultMetrics.d.ts +2 -2
- package/dist/openapi/models/OperationResultMetrics.js +2 -2
- package/dist/openapi/models/OperationSchemaDefinition.d.ts +5 -6
- package/dist/openapi/models/OperationSchemaDefinition.js +2 -2
- package/dist/openapi/models/OperationStatus.d.ts +2 -2
- package/dist/openapi/models/OperationStatus.js +2 -2
- package/dist/openapi/models/OperationType.d.ts +10 -4
- package/dist/openapi/models/OperationType.js +10 -4
- package/dist/openapi/models/OperationsSchemaResponse.d.ts +2 -2
- package/dist/openapi/models/OperationsSchemaResponse.js +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +2 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +2 -2
- package/dist/openapi/models/OptionSchema.d.ts +36 -2
- package/dist/openapi/models/OptionSchema.js +10 -2
- package/dist/openapi/models/OutputProperties.d.ts +2 -2
- package/dist/openapi/models/OutputProperties.js +2 -2
- package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +2 -2
- package/dist/openapi/models/OutputPropertiesIsAnimated.js +2 -2
- package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +2 -2
- package/dist/openapi/models/PerClassAvailabilityEntry.js +2 -2
- package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +2 -2
- package/dist/openapi/models/PerRoleCardinalityEntry.js +2 -2
- package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +2 -2
- package/dist/openapi/models/PerValueAvailabilityEntry.js +2 -2
- package/dist/openapi/models/PresignedUrlPart.d.ts +2 -2
- package/dist/openapi/models/PresignedUrlPart.js +2 -2
- package/dist/openapi/models/ProbePendingResponse.d.ts +14 -5
- package/dist/openapi/models/ProbePendingResponse.js +2 -2
- package/dist/openapi/models/ProcessingClass.d.ts +2 -2
- package/dist/openapi/models/ProcessingClass.js +2 -2
- package/dist/openapi/models/ProcessingClassBandViolation.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassBandViolation.js +2 -2
- package/dist/openapi/models/ProcessingClassConstraints.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassConstraints.js +2 -2
- package/dist/openapi/models/ProcessingClassEntry.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassEntry.js +2 -2
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +14 -5
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +2 -2
- package/dist/openapi/models/ProcessingClassHint.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassHint.js +2 -2
- package/dist/openapi/models/ProcessingClassReason.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassReason.js +2 -2
- package/dist/openapi/models/ProcessingClassRejectReason.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassRejectReason.js +2 -2
- package/dist/openapi/models/ProcessingPlan.d.ts +2 -2
- package/dist/openapi/models/ProcessingPlan.js +2 -2
- package/dist/openapi/models/ProcessingPlanJob.d.ts +2 -2
- package/dist/openapi/models/ProcessingPlanJob.js +2 -2
- package/dist/openapi/models/ReEncodeDecision.d.ts +2 -2
- package/dist/openapi/models/ReEncodeDecision.js +2 -2
- package/dist/openapi/models/ReadinessResponse.d.ts +2 -2
- package/dist/openapi/models/ReadinessResponse.js +2 -2
- package/dist/openapi/models/RegisterUser422Response.d.ts +2 -2
- package/dist/openapi/models/RegisterUser422Response.js +2 -2
- package/dist/openapi/models/RegisterUserRequest.d.ts +2 -2
- package/dist/openapi/models/RegisterUserRequest.js +2 -2
- package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +2 -2
- package/dist/openapi/models/RequestAccountDeletion200Response.js +2 -2
- package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +2 -2
- package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +2 -2
- package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +2 -2
- package/dist/openapi/models/RequestAccountDeletionRequest.js +2 -2
- package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +2 -2
- package/dist/openapi/models/ResendVerificationEmailRequest.js +2 -2
- package/dist/openapi/models/ResetPasswordRequest.d.ts +2 -2
- package/dist/openapi/models/ResetPasswordRequest.js +2 -2
- package/dist/openapi/models/ResponseEnvelope.d.ts +2 -2
- package/dist/openapi/models/ResponseEnvelope.js +2 -2
- package/dist/openapi/models/RetryResponse.d.ts +2 -2
- package/dist/openapi/models/RetryResponse.js +2 -2
- package/dist/openapi/models/RetrySuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/RetrySuccessEnvelope.js +2 -2
- package/dist/openapi/models/SseCompletionBase.d.ts +2 -2
- package/dist/openapi/models/SseCompletionBase.js +2 -2
- package/dist/openapi/models/SseConnectionLimitResponse.d.ts +14 -5
- package/dist/openapi/models/SseConnectionLimitResponse.js +2 -2
- package/dist/openapi/models/SseEventType.d.ts +2 -2
- package/dist/openapi/models/SseEventType.js +2 -2
- package/dist/openapi/models/SseJobCompletedData.d.ts +2 -2
- package/dist/openapi/models/SseJobCompletedData.js +2 -2
- package/dist/openapi/models/SseJobFailedData.d.ts +2 -2
- package/dist/openapi/models/SseJobFailedData.js +2 -2
- package/dist/openapi/models/SseMultiOutputCompletion.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputCompletion.js +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +2 -2
- package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputResultEntry.js +2 -2
- package/dist/openapi/models/SseOperationCompletedData.d.ts +2 -2
- package/dist/openapi/models/SseOperationCompletedData.js +2 -2
- package/dist/openapi/models/SseOperationCompletionResult.d.ts +2 -2
- package/dist/openapi/models/SseOperationCompletionResult.js +2 -2
- package/dist/openapi/models/SseOperationFailedData.d.ts +33 -2
- package/dist/openapi/models/SseOperationFailedData.js +8 -2
- package/dist/openapi/models/SseOperationProgressData.d.ts +2 -2
- package/dist/openapi/models/SseOperationProgressData.js +2 -2
- package/dist/openapi/models/SseSingleOutputCompletion.d.ts +2 -2
- package/dist/openapi/models/SseSingleOutputCompletion.js +2 -2
- package/dist/openapi/models/SseWorkflowTerminalData.d.ts +2 -2
- package/dist/openapi/models/SseWorkflowTerminalData.js +2 -2
- package/dist/openapi/models/TierRestrictionKind.d.ts +2 -2
- package/dist/openapi/models/TierRestrictionKind.js +2 -2
- package/dist/openapi/models/TierRestrictionResponse.d.ts +14 -5
- package/dist/openapi/models/TierRestrictionResponse.js +2 -2
- package/dist/openapi/models/UpdateProfile200Response.d.ts +2 -2
- package/dist/openapi/models/UpdateProfile200Response.js +2 -2
- package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +2 -2
- package/dist/openapi/models/UpdateProfile200ResponseData.js +2 -2
- package/dist/openapi/models/UpdateProfile422Response.d.ts +2 -2
- package/dist/openapi/models/UpdateProfile422Response.js +2 -2
- package/dist/openapi/models/UpdateProfileRequest.d.ts +2 -2
- package/dist/openapi/models/UpdateProfileRequest.js +2 -2
- package/dist/openapi/models/UploadConstraintsApplied.d.ts +2 -2
- package/dist/openapi/models/UploadConstraintsApplied.js +2 -2
- package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +14 -5
- package/dist/openapi/models/UploadDurationExceedsTierResponse.js +2 -2
- package/dist/openapi/models/UploadFile403Response.d.ts +2 -2
- package/dist/openapi/models/UploadFile403Response.js +2 -2
- package/dist/openapi/models/UploadFile422Response.d.ts +2 -2
- package/dist/openapi/models/UploadFile422Response.js +2 -2
- package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +2 -2
- package/dist/openapi/models/UploadProbeMediaMetadata.js +2 -2
- package/dist/openapi/models/UploadProbeProcessingClass.d.ts +4 -6
- package/dist/openapi/models/UploadProbeProcessingClass.js +4 -6
- package/dist/openapi/models/UploadProbeResponse.d.ts +2 -2
- package/dist/openapi/models/UploadProbeResponse.js +2 -2
- package/dist/openapi/models/UploadProbeStatus.d.ts +2 -2
- package/dist/openapi/models/UploadProbeStatus.js +2 -2
- package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/UploadProbeSuccessEnvelope.js +2 -2
- package/dist/openapi/models/UploadResponse.d.ts +2 -2
- package/dist/openapi/models/UploadResponse.js +2 -2
- package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +14 -5
- package/dist/openapi/models/UploadSizeExceedsTierResponse.js +2 -2
- package/dist/openapi/models/UploadSource.d.ts +2 -2
- package/dist/openapi/models/UploadSource.js +2 -2
- package/dist/openapi/models/UploadSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/UploadSuccessEnvelope.js +2 -2
- package/dist/openapi/models/UploadThresholds.d.ts +2 -2
- package/dist/openapi/models/UploadThresholds.js +2 -2
- package/dist/openapi/models/UserTier.d.ts +2 -2
- package/dist/openapi/models/UserTier.js +2 -2
- package/dist/openapi/models/ValidationErrorEnvelope.d.ts +19 -8
- package/dist/openapi/models/ValidationErrorEnvelope.js +2 -2
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +2 -2
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +2 -2
- package/dist/openapi/models/VerifyEmailRequest.d.ts +2 -2
- package/dist/openapi/models/VerifyEmailRequest.js +2 -2
- package/dist/openapi/models/WarningType.d.ts +2 -2
- package/dist/openapi/models/WarningType.js +2 -2
- package/dist/openapi/models/WebhookOperationContext.d.ts +2 -2
- package/dist/openapi/models/WebhookOperationContext.js +2 -2
- package/dist/openapi/models/WebhookPayload.d.ts +2 -2
- package/dist/openapi/models/WebhookPayload.js +2 -2
- package/dist/openapi/models/WorkflowArchiveResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowArchiveResponse.js +2 -2
- package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +7 -6
- package/dist/openapi/models/WorkflowCancelBillingEffect.js +7 -6
- package/dist/openapi/models/WorkflowCancelResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowCancelResponse.js +2 -2
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowCreateRequest.d.ts +11 -14
- package/dist/openapi/models/WorkflowCreateRequest.js +2 -2
- package/dist/openapi/models/WorkflowCreateResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowCreateResponse.js +2 -2
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowCreditSummary.d.ts +2 -2
- package/dist/openapi/models/WorkflowCreditSummary.js +2 -2
- package/dist/openapi/models/WorkflowDownloadResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowDownloadResponse.js +2 -2
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowEdge.d.ts +2 -2
- package/dist/openapi/models/WorkflowEdge.js +2 -2
- package/dist/openapi/models/WorkflowExpiredResponse.d.ts +14 -5
- package/dist/openapi/models/WorkflowExpiredResponse.js +2 -2
- package/dist/openapi/models/WorkflowListResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowListResponse.js +2 -2
- package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowListSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +2 -2
- package/dist/openapi/models/WorkflowPauseRequiredAction.js +2 -2
- package/dist/openapi/models/WorkflowPausedDetail.d.ts +2 -2
- package/dist/openapi/models/WorkflowPausedDetail.js +2 -2
- package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +2 -2
- package/dist/openapi/models/WorkflowPausedDetailLinks.js +2 -2
- package/dist/openapi/models/WorkflowProcessing.d.ts +2 -2
- package/dist/openapi/models/WorkflowProcessing.js +2 -2
- package/dist/openapi/models/WorkflowRestoreResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowRestoreResponse.js +2 -2
- package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowResumeResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowResumeResponse.js +2 -2
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowSource.d.ts +2 -2
- package/dist/openapi/models/WorkflowSource.js +2 -2
- package/dist/openapi/models/WorkflowStatus.d.ts +2 -2
- package/dist/openapi/models/WorkflowStatus.js +2 -2
- package/dist/openapi/models/WorkflowStatusResponse.d.ts +5 -3
- package/dist/openapi/models/WorkflowStatusResponse.js +2 -2
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowSummary.d.ts +2 -2
- package/dist/openapi/models/WorkflowSummary.js +2 -2
- package/dist/openapi/models/WorkflowSummaryJob.d.ts +2 -2
- package/dist/openapi/models/WorkflowSummaryJob.js +2 -2
- package/dist/openapi/models/WorkflowWarning.d.ts +2 -2
- package/dist/openapi/models/WorkflowWarning.js +2 -2
- package/dist/openapi/models/WorkflowWarningSeverity.d.ts +2 -2
- package/dist/openapi/models/WorkflowWarningSeverity.js +2 -2
- package/dist/openapi/models/index.d.ts +3 -0
- package/dist/openapi/models/index.js +3 -0
- package/dist/openapi/runtime.d.ts +2 -2
- package/dist/openapi/runtime.js +2 -2
- package/dist/operations/archive.metadata.js +1 -0
- package/dist/operations/audio_overlay.metadata.js +1 -0
- package/dist/operations/audio_to_video.metadata.js +1 -0
- package/dist/operations/audio_watermark.metadata.js +4 -9
- package/dist/operations/custom_luma.metadata.js +1 -0
- package/dist/operations/image_watermark.metadata.js +1 -0
- package/dist/operations/merge.metadata.js +1 -0
- package/dist/operations/metadata-types.d.ts +2 -0
- package/dist/operations/split.metadata.js +12 -3
- package/dist/operations/text_watermark.metadata.js +1 -0
- package/dist/operations/video_text_watermark.metadata.js +2 -0
- package/dist/operations/video_watermark.metadata.js +1 -0
- package/openapi/README.md +1 -1
- package/openapi/api.yaml +536 -145
- package/operation-capabilities/operation-capabilities.json +1 -1
- package/operations/schemas/audio_watermark.yaml +34 -33
- package/operations/schemas/compress.yaml +256 -163
- package/operations/schemas/convert.yaml +11 -0
- package/operations/schemas/merge.yaml +7 -1
- package/operations/schemas/split.yaml +133 -83
- package/operations/schemas/thumbnail.yaml +34 -26
- package/operations/schemas/video_text_watermark.yaml +57 -47
- package/operations/schemas/video_watermark.yaml +33 -28
- package/package.json +3 -3
package/openapi/api.yaml
CHANGED
|
@@ -35,6 +35,20 @@ info:
|
|
|
35
35
|
(parser obligation: absent = stable; per-enum-value granularity is the
|
|
36
36
|
`per_value_availability` primitive landed via ticket I17).
|
|
37
37
|
|
|
38
|
+
**Free-text string fields: `x-string-vocabulary` (ticket
|
|
39
|
+
[`Q79yjcFF`](https://trello.com/c/Q79yjcFF)).** A `type: string` field
|
|
40
|
+
with no `enum` that names example values says, as data, what a client
|
|
41
|
+
may do with them (the same marker is used in the AsyncAPI document):
|
|
42
|
+
- `open` — a vocabulary that grows. Each published value keeps its
|
|
43
|
+
meaning, the SET is not closed: switch on the values you know and
|
|
44
|
+
handle an unknown one as the generic case (e.g. `ErrorEnvelope.error`).
|
|
45
|
+
- `advisory` — explanatory text. Display or log it; **never switch on
|
|
46
|
+
it** (e.g. `SseWorkflowTerminalData.reason`).
|
|
47
|
+
- `none` — not a vocabulary at all (an expression or an identifier,
|
|
48
|
+
e.g. `OptionSchema.pattern`).
|
|
49
|
+
A field whose description hedges with "common values" or "free-form"
|
|
50
|
+
must carry the marker; a test enforces it.
|
|
51
|
+
|
|
38
52
|
**Localisation (per ticket [I26](https://trello.com/c/rcnqwgI4)).**
|
|
39
53
|
|
|
40
54
|
Error responses + paused/blocked workflow statuses carry a localised
|
|
@@ -89,7 +103,7 @@ info:
|
|
|
89
103
|
of truth instead of hardcoding magic numbers. A runtime
|
|
90
104
|
`GET /api/uploads/limits` endpoint for dynamic discovery
|
|
91
105
|
(per-tier / per-environment overrides) is a deferred follow-up.
|
|
92
|
-
version: 2.
|
|
106
|
+
version: 2.211.0
|
|
93
107
|
contact:
|
|
94
108
|
name: API Support
|
|
95
109
|
|
|
@@ -250,8 +264,16 @@ paths:
|
|
|
250
264
|
tier_restriction, restriction_kind: file_size` instead.
|
|
251
265
|
- **Pixel dimensions** (`error: IMAGE_DIMENSIONS_TOO_LARGE`) — a
|
|
252
266
|
decodable raster image whose `width × height` exceeds the
|
|
253
|
-
|
|
254
|
-
16 MP)
|
|
267
|
+
SINGLE-SHOT pixel ceiling (`UPLOAD_MAX_IMAGE_PIXELS`, default
|
|
268
|
+
16 MP), sized for the API's inline decode on this endpoint.
|
|
269
|
+
Multipart uploads have their own, higher ceiling
|
|
270
|
+
(`limits.max_multipart_upload_image_pixels`). It is an
|
|
271
|
+
environment setting, so an **authenticated**
|
|
272
|
+
client should read the effective value from
|
|
273
|
+
`limits.max_upload_image_pixels` on `GET /api/v2/account/limits`
|
|
274
|
+
(once the API emits it) rather than hard-code a number. ⚠️ That
|
|
275
|
+
endpoint requires authentication, so an **anonymous** uploader has
|
|
276
|
+
no discovery surface for it yet and learns it from this 413. The server reads dimensions from the file **header** (no
|
|
255
277
|
full-bitmap decode) and rejects **before** decoding, so a
|
|
256
278
|
within-byte-limit but huge-dimension image (e.g. a few-KB 26 MP
|
|
257
279
|
PNG that would decode to ~100 MB) is rejected up front rather than
|
|
@@ -276,17 +298,21 @@ paths:
|
|
|
276
298
|
'415':
|
|
277
299
|
description: |
|
|
278
300
|
Unsupported file type at the contract level (no tier permits
|
|
279
|
-
this MIME)
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
301
|
+
this MIME): `error: UNSUPPORTED_FILE_TYPE`, flat envelope, never
|
|
302
|
+
retryable and never an upgrade prompt. For tier-specific MIME
|
|
303
|
+
restrictions where some tier does permit the MIME, the server
|
|
304
|
+
returns 403 with `error_type: tier_restriction, restriction_kind:
|
|
305
|
+
mime_type` instead. The file-type check runs before the size
|
|
306
|
+
check, so an unsupported file that is also too large gets this
|
|
307
|
+
415.
|
|
283
308
|
content:
|
|
284
309
|
application/json:
|
|
285
310
|
schema:
|
|
286
311
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
287
312
|
example:
|
|
288
313
|
success: false
|
|
289
|
-
error: "
|
|
314
|
+
error: "UNSUPPORTED_FILE_TYPE"
|
|
315
|
+
message: "This file type is not supported."
|
|
290
316
|
'422':
|
|
291
317
|
description: |
|
|
292
318
|
Tier-relative cap exceeded for this upload per ticket
|
|
@@ -461,11 +487,22 @@ paths:
|
|
|
461
487
|
(across all tiers). For tier-specific size caps below this
|
|
462
488
|
absolute limit, the server returns 403 with
|
|
463
489
|
`error_type: tier_restriction, restriction_kind: file_size`.
|
|
464
|
-
- **Pixel dimensions** (`error: IMAGE_DIMENSIONS_TOO_LARGE`) —
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
490
|
+
- **Pixel dimensions** (`error: IMAGE_DIMENSIONS_TOO_LARGE`) — a
|
|
491
|
+
decodable raster image whose `width x height` exceeds the
|
|
492
|
+
MULTIPART pixel ceiling, read from the file **header** and
|
|
493
|
+
rejected **before** decoding. It is a SEPARATE, HIGHER ceiling
|
|
494
|
+
than single-shot's 16 MP (owner ruling 2026-09-24, card
|
|
495
|
+
[`ae4Q1yCb`](https://trello.com/c/ae4Q1yCb)): single-shot's is
|
|
496
|
+
sized for the API's inline decode, which multipart never does,
|
|
497
|
+
and multipart carries ordinary camera photos — **a 24 MP photo
|
|
498
|
+
must pass**. API setting `UPLOAD_MAX_MULTIPART_IMAGE_PIXELS`,
|
|
499
|
+
enforced at multipart initiate. Default 50 MP (hub ruling 2026-09-24, on lambdas'
|
|
500
|
+
recommendation: the image workers declare a 100 MP source cap,
|
|
501
|
+
but none has run a job that large, so it stays at half that
|
|
502
|
+
until a staging proof). It is an API setting, so authenticated
|
|
503
|
+
clients read the effective value from
|
|
504
|
+
`limits.max_multipart_upload_image_pixels`
|
|
505
|
+
(`GET /api/v2/account/limits`) once the API emits it.
|
|
469
506
|
|
|
470
507
|
🔴 **THIS CASE WAS UNDECLARED HERE UNTIL 2026-08-28, AND THIS IS
|
|
471
508
|
THE PATH IT MATTERS MOST ON.** Multipart exists for LARGE uploads,
|
|
@@ -480,9 +517,11 @@ paths:
|
|
|
480
517
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
481
518
|
'415':
|
|
482
519
|
description: |
|
|
483
|
-
Unsupported file type at the contract level
|
|
484
|
-
MIME
|
|
485
|
-
`
|
|
520
|
+
Unsupported file type at the contract level (no tier permits
|
|
521
|
+
this MIME): `error: UNSUPPORTED_FILE_TYPE`, as on
|
|
522
|
+
`POST /api/uploads`. For tier-specific MIME restrictions, the
|
|
523
|
+
server returns 403 with `error_type: tier_restriction,
|
|
524
|
+
restriction_kind: mime_type`.
|
|
486
525
|
content:
|
|
487
526
|
application/json:
|
|
488
527
|
schema:
|
|
@@ -1032,9 +1071,13 @@ paths:
|
|
|
1032
1071
|
bad ones before submit.
|
|
1033
1072
|
|
|
1034
1073
|
Per ticket [I28 `KbVAnGCm`](https://trello.com/c/KbVAnGCm).
|
|
1035
|
-
`availability: planned
|
|
1036
|
-
|
|
1037
|
-
|
|
1074
|
+
`availability: planned`. The upload-probe Lambda exists and runs
|
|
1075
|
+
asynchronously when an upload is finalised; this endpoint returns
|
|
1076
|
+
the cached result when one exists and `feature_not_available`
|
|
1077
|
+
(422) when none does yet. It does not invoke the probe itself.
|
|
1078
|
+
(A `planned` endpoint that answers 200 is inconsistent with the
|
|
1079
|
+
availability taxonomy; the flip decision is tracked separately,
|
|
1080
|
+
card `kAT0i5A6`.) Per Tension 1 (ADR-0001 §1.3).
|
|
1038
1081
|
|
|
1039
1082
|
**SDK helper intent.** SDKs are expected to expose a
|
|
1040
1083
|
`client.preflight_clips([file_ids])` helper that compiles to N
|
|
@@ -1045,11 +1088,10 @@ paths:
|
|
|
1045
1088
|
**Tier scoping.** The probe respects the caller's tier — the
|
|
1046
1089
|
`processing_class_pre_assignment` reflects the same logic
|
|
1047
1090
|
F8.1 upload-side gating uses (per ticket I15-CONS), which
|
|
1048
|
-
honours a class's `required_tier`. **Since 2026-09-23 no
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
and size, not on the caller's tier.
|
|
1091
|
+
honours a class's `required_tier`. **Since 2026-09-23 no class
|
|
1092
|
+
carries one** (decision 26, `jLuZvlJe`, `UAQJcOi7`), so the
|
|
1093
|
+
pre-assignment depends on the file's duration and size, not on
|
|
1094
|
+
the caller's tier.
|
|
1053
1095
|
|
|
1054
1096
|
**Idempotent.** Probing the same file_id twice returns the
|
|
1055
1097
|
same `probed_at` timestamp + result (cached server-side per
|
|
@@ -1154,8 +1196,8 @@ paths:
|
|
|
1154
1196
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
1155
1197
|
'422':
|
|
1156
1198
|
description: |
|
|
1157
|
-
|
|
1158
|
-
|
|
1199
|
+
No probe result is cached for this upload yet (the probe runs
|
|
1200
|
+
asynchronously after the upload is finalised) — returned as
|
|
1159
1201
|
`FeatureNotAvailableResponse` with `error_type:
|
|
1160
1202
|
feature_not_available`. Per Tension 1 (ADR-0001 §1.3).
|
|
1161
1203
|
content:
|
|
@@ -1905,7 +1947,9 @@ paths:
|
|
|
1905
1947
|
(`propertyName: error_type`):
|
|
1906
1948
|
- `validation_error` → `ValidationErrorEnvelope` (carries
|
|
1907
1949
|
`details[]`; the specific failure is in the `error` machine
|
|
1908
|
-
code — `
|
|
1950
|
+
code — `VALIDATION_FAILED` (an option or value failed
|
|
1951
|
+
validation: unknown key, out of range, wrong type, enum),
|
|
1952
|
+
`REQUIRES_REENCODE`,
|
|
1909
1953
|
`CYCLIC_WORKFLOW_EDGES`, …). The `REQUIRES_REENCODE` flavour
|
|
1910
1954
|
(per I16-CONS) reuses this same envelope/`error_type` and is
|
|
1911
1955
|
distinguished only by its `error` code.
|
|
@@ -1958,18 +2002,16 @@ paths:
|
|
|
1958
2002
|
probe_pending: '#/components/schemas/ProbePendingResponse'
|
|
1959
2003
|
examples:
|
|
1960
2004
|
validation_error:
|
|
1961
|
-
summary:
|
|
2005
|
+
summary: An option failed validation (as the API emits it — VALIDATION_FAILED, details[] of {field, message})
|
|
1962
2006
|
value:
|
|
1963
2007
|
success: false
|
|
1964
2008
|
error_type: "validation_error"
|
|
1965
|
-
error: "
|
|
2009
|
+
error: "VALIDATION_FAILED"
|
|
1966
2010
|
details:
|
|
1967
|
-
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
option: "width"
|
|
1972
|
-
message: "Required field"
|
|
2011
|
+
- field: "quality"
|
|
2012
|
+
message: "Option 'quality' must be at most 100."
|
|
2013
|
+
- field: "width"
|
|
2014
|
+
message: "Option 'width' is required."
|
|
1973
2015
|
cyclic_workflow_edges:
|
|
1974
2016
|
summary: Cyclic or self-referential explicit workflow_edges (g8PPkbNu)
|
|
1975
2017
|
value:
|
|
@@ -3033,10 +3075,34 @@ paths:
|
|
|
3033
3075
|
Its refusal behaviour, **as a SHAPE — the counts and intervals are
|
|
3034
3076
|
configurable defaults in that repo and are deliberately not
|
|
3035
3077
|
restated here, because a number copied across a repo boundary rots
|
|
3036
|
-
silently
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3078
|
+
silently.**
|
|
3079
|
+
|
|
3080
|
+
- **Since 2026-09-23 (`compression_frontend` #485, `17bd8b6`,
|
|
3081
|
+
ticket `nuipMybn` — built against this section's obligation):**
|
|
3082
|
+
a `429` / `503` **carrying `Retry-After` or the API's error
|
|
3083
|
+
envelope** is a deliberate refusal, not a transport error (`SseRefusedError`,
|
|
3084
|
+
carrying the status, the `Retry-After` delay and the `error`
|
|
3085
|
+
code). The reader keeps `/status` polling, reopens the stream
|
|
3086
|
+
only after `Retry-After` has elapsed — a wait that applies to
|
|
3087
|
+
**every** stream that browser tab opens, not only the refused
|
|
3088
|
+
one (it is held in the page, so another tab of the same caller
|
|
3089
|
+
does not share it) —
|
|
3090
|
+
and **never reopens** a refusal that carried no `Retry-After`.
|
|
3091
|
+
⚠️ **Two edges it does not cover, stated so this is not read as
|
|
3092
|
+
blanket compliance:** an UNSTRUCTURED `503` (a load balancer's,
|
|
3093
|
+
with neither) still takes the transport path below; and a
|
|
3094
|
+
`Retry-After` too large for the browser's timer keeps THAT run on
|
|
3095
|
+
polling but does not set the caller-wide wait, so another stream
|
|
3096
|
+
in the same tab may open before it elapses. This contract sets
|
|
3097
|
+
no upper bound on `Retry-After`.
|
|
3098
|
+
- **Before that (measured 2026-08-25):** a non-200 was raised as a
|
|
3099
|
+
*transport error* and retried a bounded number of times on a
|
|
3100
|
+
fixed delay. Any other non-200 status, and the unstructured `503`
|
|
3101
|
+
above, still takes that transport path.
|
|
3102
|
+
|
|
3103
|
+
Either way the fallback is `/status` polling with **adaptive
|
|
3104
|
+
backoff** — the interval GROWS while the server reports no
|
|
3105
|
+
movement.
|
|
3040
3106
|
|
|
3041
3107
|
⚠️ **And the `/status` poll is NOT started by the fallback.** It
|
|
3042
3108
|
runs **in parallel from the outset**, as resilience against a
|
|
@@ -3048,8 +3114,9 @@ paths:
|
|
|
3048
3114
|
🔴 **SO REFUSAL TRADES CONTINUOUS WORKER OCCUPANCY FOR A HIGHER
|
|
3049
3115
|
REQUEST RATE.** Both halves matter: a held stream pins one PHP-FPM
|
|
3050
3116
|
worker for its whole life and refusal genuinely sheds that — a
|
|
3051
|
-
short poll is not a held connection — while that client's
|
|
3052
|
-
|
|
3117
|
+
short poll is not a held connection — while that client's polls go
|
|
3118
|
+
**up**. (Its stream re-attempts no longer do: since #485 they wait
|
|
3119
|
+
out `Retry-After`.)
|
|
3053
3120
|
⚠️ **Do not read either half alone.** "Refusal sheds load" invites
|
|
3054
3121
|
a cap whose success metric moves the wrong way; "refusal increases
|
|
3055
3122
|
load" argues against having a cap at all, and the occupancy it
|
|
@@ -3057,9 +3124,10 @@ paths:
|
|
|
3057
3124
|
|
|
3058
3125
|
⚠️ **THAT IS PER-CLIENT AND MEASURED. THE AGGREGATE IS NEITHER.**
|
|
3059
3126
|
Whether refusing many clients at once produces a synchronised burst
|
|
3060
|
-
is **UNMEASURED** —
|
|
3061
|
-
|
|
3062
|
-
and nothing here has observed what that does in
|
|
3127
|
+
is **UNMEASURED** — refusals issued together with the same
|
|
3128
|
+
`Retry-After` reopen together (the delay is the server's, with no
|
|
3129
|
+
client jitter), and nothing here has observed what that does in
|
|
3130
|
+
aggregate. **Do not
|
|
3063
3131
|
read "not a storm" out of this section; it says the per-client cost
|
|
3064
3132
|
is bounded and says nothing about the fleet.**
|
|
3065
3133
|
|
|
@@ -3070,10 +3138,11 @@ paths:
|
|
|
3070
3138
|
before `Retry-After` elapses, never retried as a transport error,
|
|
3071
3139
|
and `/status` polling permitted under that endpoint's own limits.
|
|
3072
3140
|
⚠️ **`Retry-After` governs the next STREAM request, not a poll
|
|
3073
|
-
interval.** Falling back to polling is still load, merely cheaper
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
the
|
|
3141
|
+
interval.** Falling back to polling is still load, merely cheaper.
|
|
3142
|
+
Our frontend meets the obligation since #485 for structured
|
|
3143
|
+
refusals with a timer-sized `Retry-After` (the two edges above are
|
|
3144
|
+
the exceptions); any reader that treats refusal as a transport
|
|
3145
|
+
error does not.
|
|
3077
3146
|
|
|
3078
3147
|
📌 **THE POPULATIONS SPLIT BY READER KIND, NOT BY
|
|
3079
3148
|
BROWSER-VERSUS-NOT.** The WHATWG rule covers **native
|
|
@@ -3081,7 +3150,9 @@ paths:
|
|
|
3081
3150
|
safe only by its own code, inside a browser or outside one** — and
|
|
3082
3151
|
a retry loop treating `429`/`503` as retryable on a fixed interval
|
|
3083
3152
|
is where a storm is reachable. ⚠️ **Our own frontend is in that
|
|
3084
|
-
population, not exempt from it
|
|
3153
|
+
population, not exempt from it** — it is safe today because #485
|
|
3154
|
+
made it so, and a regression in its code would not be visible
|
|
3155
|
+
here.
|
|
3085
3156
|
|
|
3086
3157
|
✅ **For OUR SDKs that is measured, not assumed** (sdks,
|
|
3087
3158
|
2026-08-22, driven through the BUILT client with a stubbed
|
|
@@ -3148,8 +3219,11 @@ paths:
|
|
|
3148
3219
|
- `unspent_reservation_released`: the workflow was in
|
|
3149
3220
|
`pending` / `in_progress` / `paused_insufficient_credits`,
|
|
3150
3221
|
and the unspent portion of the original reservation has
|
|
3151
|
-
been refunded to the caller's balance. The
|
|
3152
|
-
as a separate `CreditTransaction` with `type:
|
|
3222
|
+
been refunded to the caller's balance. The return appears
|
|
3223
|
+
as a separate `CreditTransaction` with `type:
|
|
3224
|
+
reservation_release` and `reference_type:
|
|
3225
|
+
workflow_reservation_release` — there is no `type: refund`
|
|
3226
|
+
(the API's ledger type is a closed set that has none).
|
|
3153
3227
|
- `none`: no refund was issued (e.g. all reserved credits
|
|
3154
3228
|
were already consumed by completed jobs at cancel time;
|
|
3155
3229
|
or the workflow was already terminal in a previous cancel
|
|
@@ -5824,9 +5898,12 @@ paths:
|
|
|
5824
5898
|
`schemas/operations/audio_watermark.yaml` — the operation
|
|
5825
5899
|
embeds; this endpoint decodes.
|
|
5826
5900
|
|
|
5827
|
-
**
|
|
5828
|
-
|
|
5829
|
-
|
|
5901
|
+
**No tier gate** (since 2026-09-23, decision 26 — the paired
|
|
5902
|
+
`audio_watermark` operation lost its `enterprise` gate the same
|
|
5903
|
+
day; `X8m2vbvS`), and no 403 is declared: decode reads an
|
|
5904
|
+
already-uploaded file, so no upload quota applies here. Any
|
|
5905
|
+
authenticated caller may call it once it ships. Anonymous
|
|
5906
|
+
callers receive a 401.
|
|
5830
5907
|
|
|
5831
5908
|
**Scope: own watermarks only.** The decoder will refuse to
|
|
5832
5909
|
extract from media the caller did not mark themselves
|
|
@@ -5847,7 +5924,7 @@ paths:
|
|
|
5847
5924
|
`feature_not_available` (422) until the Lambda lands. Per
|
|
5848
5925
|
Tension 1 (ADR-0001 §1.3).
|
|
5849
5926
|
operationId: decodeAudioWatermark
|
|
5850
|
-
security: [{bearerAuth: []}, {sessionAuth: []}] # required (explicit 401 in response set;
|
|
5927
|
+
security: [{bearerAuth: []}, {sessionAuth: []}] # required (explicit 401 in response set; authenticated runtime call, no tier gate)
|
|
5851
5928
|
tags:
|
|
5852
5929
|
- AudioWatermark
|
|
5853
5930
|
x-availability: planned
|
|
@@ -5870,22 +5947,6 @@ paths:
|
|
|
5870
5947
|
application/json:
|
|
5871
5948
|
schema:
|
|
5872
5949
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
5873
|
-
'403':
|
|
5874
|
-
description: |
|
|
5875
|
-
Tier insufficient (free / pro caller) — returned as
|
|
5876
|
-
`FeatureTierRestrictedResponse` with
|
|
5877
|
-
`error_type: feature_tier_restricted`. Per ADR-0001 §1.3.
|
|
5878
|
-
content:
|
|
5879
|
-
application/json:
|
|
5880
|
-
schema:
|
|
5881
|
-
oneOf:
|
|
5882
|
-
- $ref: '#/components/schemas/TierRestrictionResponse'
|
|
5883
|
-
- $ref: '#/components/schemas/FeatureTierRestrictedResponse'
|
|
5884
|
-
discriminator:
|
|
5885
|
-
propertyName: error_type
|
|
5886
|
-
mapping:
|
|
5887
|
-
tier_restriction: '#/components/schemas/TierRestrictionResponse'
|
|
5888
|
-
feature_tier_restricted: '#/components/schemas/FeatureTierRestrictedResponse'
|
|
5889
5950
|
'404':
|
|
5890
5951
|
description: |
|
|
5891
5952
|
No watermark detected in the supplied asset, OR the
|
|
@@ -6047,9 +6108,11 @@ paths:
|
|
|
6047
6108
|
Per ticket [I23 `DffjC3zm`](https://trello.com/c/DffjC3zm).
|
|
6048
6109
|
|
|
6049
6110
|
Each transaction is immutable once written. Workflow-create
|
|
6050
|
-
reservations appear here as a single row
|
|
6051
|
-
|
|
6052
|
-
|
|
6111
|
+
reservations appear here as a single row (`reference_type:
|
|
6112
|
+
workflow_reservation`); credits returned appear as separate
|
|
6113
|
+
rows carrying the workflow in `reference_id` and a
|
|
6114
|
+
`reference_type` naming how they came back (see
|
|
6115
|
+
`CreditTransaction.reference_type`).
|
|
6053
6116
|
|
|
6054
6117
|
Default page is 20 transactions, ordered most-recent-first.
|
|
6055
6118
|
operationId: getCreditsUsage
|
|
@@ -6119,7 +6182,7 @@ paths:
|
|
|
6119
6182
|
purchased_amount: null
|
|
6120
6183
|
pricing_version: "v3.2.0"
|
|
6121
6184
|
description: "Workflow reservation: compress.video short_form"
|
|
6122
|
-
reference_type: "
|
|
6185
|
+
reference_type: "workflow_reservation"
|
|
6123
6186
|
reference_id: "019539ac-2222-7000-8000-000000000001"
|
|
6124
6187
|
created_at: "2026-04-26T13:55:00Z"
|
|
6125
6188
|
- id: "019539ad-3333-7000-8000-aaaaaaaaaa02"
|
|
@@ -6134,14 +6197,14 @@ paths:
|
|
|
6134
6197
|
purchased_amount: -25
|
|
6135
6198
|
pricing_version: "v3.2.0"
|
|
6136
6199
|
description: "Workflow reservation: merge.video long_form_re_encode"
|
|
6137
|
-
reference_type: "
|
|
6200
|
+
reference_type: "workflow_reservation"
|
|
6138
6201
|
reference_id: "019539ac-2222-7000-8000-000000000002"
|
|
6139
6202
|
created_at: "2026-04-26T13:54:00Z"
|
|
6140
6203
|
total: 47
|
|
6141
6204
|
limit: 20
|
|
6142
6205
|
offset: 0
|
|
6143
|
-
|
|
6144
|
-
summary:
|
|
6206
|
+
reservation_release_followup:
|
|
6207
|
+
summary: Release row returning the prior workflow_001 reservation
|
|
6145
6208
|
value:
|
|
6146
6209
|
success: true
|
|
6147
6210
|
data:
|
|
@@ -6151,7 +6214,7 @@ paths:
|
|
|
6151
6214
|
# workflow_001.monthly_balance_after (955); after
|
|
6152
6215
|
# adds back 45 → 1000.
|
|
6153
6216
|
- id: "019539ad-3333-7000-8000-aaaaaaaaaa03"
|
|
6154
|
-
type: "
|
|
6217
|
+
type: "reservation_release"
|
|
6155
6218
|
amount: 45
|
|
6156
6219
|
monthly_balance_before: 955
|
|
6157
6220
|
monthly_balance_after: 1000
|
|
@@ -6161,8 +6224,8 @@ paths:
|
|
|
6161
6224
|
monthly_amount: 45
|
|
6162
6225
|
purchased_amount: null
|
|
6163
6226
|
pricing_version: "v3.2.0"
|
|
6164
|
-
description: "
|
|
6165
|
-
reference_type: "
|
|
6227
|
+
description: "Reservation released: terminal failure on operation-compression-video"
|
|
6228
|
+
reference_type: "workflow_reservation_release"
|
|
6166
6229
|
reference_id: "019539ac-2222-7000-8000-000000000001"
|
|
6167
6230
|
created_at: "2026-04-26T13:56:00Z"
|
|
6168
6231
|
total: 47
|
|
@@ -6302,8 +6365,8 @@ paths:
|
|
|
6302
6365
|
tier_default: 10485760
|
|
6303
6366
|
overridden: false
|
|
6304
6367
|
max_total_input_size_bytes:
|
|
6305
|
-
effective:
|
|
6306
|
-
tier_default:
|
|
6368
|
+
effective: 5000000000
|
|
6369
|
+
tier_default: 5000000000
|
|
6307
6370
|
overridden: false
|
|
6308
6371
|
enterprise_with_upload_override:
|
|
6309
6372
|
summary: >-
|
|
@@ -6376,8 +6439,11 @@ paths:
|
|
|
6376
6439
|
**How to observe the grant:** poll `GET /api/v2/credits/usage`
|
|
6377
6440
|
for a transaction whose `reference_id` equals the `session_id`
|
|
6378
6441
|
returned here, and whose `reference_type` is
|
|
6379
|
-
`stripe_checkout_session`.
|
|
6380
|
-
correlation between a checkout and its credits.
|
|
6442
|
+
`stripe_checkout_session`. **Today that is the only
|
|
6443
|
+
client-observable correlation** between a checkout and its credits.
|
|
6444
|
+
`GET /api/billing/checkout/{sessionId}/status` is declared as the
|
|
6445
|
+
second one, but it is `planned` (a `422 feature_not_available`)
|
|
6446
|
+
until the API implements it.
|
|
6381
6447
|
|
|
6382
6448
|
🔴 **MATCH ON `reference_type` + `reference_id`, AND DO NOT
|
|
6383
6449
|
FILTER ON `type`.** The pack grant is written as an
|
|
@@ -6535,7 +6601,7 @@ paths:
|
|
|
6535
6601
|
value:
|
|
6536
6602
|
success: false
|
|
6537
6603
|
error_type: feature_not_available
|
|
6538
|
-
error:
|
|
6604
|
+
error: UNPROCESSABLE_ENTITY
|
|
6539
6605
|
message: "Checkout is not yet available."
|
|
6540
6606
|
violations:
|
|
6541
6607
|
- feature: endpoint.billing.checkout
|
|
@@ -6601,6 +6667,105 @@ paths:
|
|
|
6601
6667
|
schema:
|
|
6602
6668
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
6603
6669
|
|
|
6670
|
+
/api/billing/checkout/{sessionId}/status:
|
|
6671
|
+
get:
|
|
6672
|
+
summary: Status of a checkout session the caller created
|
|
6673
|
+
description: |
|
|
6674
|
+
Whether the credits for a checkout the caller started have been
|
|
6675
|
+
granted. Ticket [`7cSI8eIa`](https://trello.com/c/7cSI8eIa) — declared
|
|
6676
|
+
BEFORE the API builds it (hub ruling, Option A, 2026-08-29); the API
|
|
6677
|
+
half is [`JHrV4MUg`](https://trello.com/c/JHrV4MUg).
|
|
6678
|
+
|
|
6679
|
+
**Why it exists:** between "checkout created" and "the provider's
|
|
6680
|
+
callback lands" nothing used to record that the session existed or
|
|
6681
|
+
whose it was — so a post-checkout page, asked about the NORMAL
|
|
6682
|
+
page-load state, had nothing to ask. The fix records the session at
|
|
6683
|
+
creation; this endpoint reads that record and the credit ledger.
|
|
6684
|
+
|
|
6685
|
+
| `status` | meaning |
|
|
6686
|
+
|---|---|
|
|
6687
|
+
| `paid` | the purchase this session was for has been applied to the caller's account — for a credit **pack**, a credit transaction referencing this session exists; for a **subscription**, the subscription it started is active on the caller's account |
|
|
6688
|
+
| `pending` | the session is recorded as created BY THE CALLER and its purchase has not been applied yet — **not a failure** |
|
|
6689
|
+
| `unknown` | anything else |
|
|
6690
|
+
|
|
6691
|
+
🔴 **`unknown` DELIBERATELY COLLAPSES "not yours" WITH "never
|
|
6692
|
+
existed". This is a decision, not missing detail.** Telling them
|
|
6693
|
+
apart would make this endpoint an oracle for whether an arbitrary
|
|
6694
|
+
session id is real — a probe confirming a stranger's purchase exists.
|
|
6695
|
+
The requirement is *paid AND yours*; the honest refusal admits
|
|
6696
|
+
neither. ⛔ **Do not "improve" the answer by distinguishing the two**
|
|
6697
|
+
(a 403 or 404 for someone else's session is the same oracle).
|
|
6698
|
+
|
|
6699
|
+
⛔ **No provider call on this read path.** It will be polled; a
|
|
6700
|
+
third-party call would turn provider latency and outages into page
|
|
6701
|
+
states and put the secret key on a read path.
|
|
6702
|
+
|
|
6703
|
+
⛔ **No timing is stated here either** — the reason is the one given
|
|
6704
|
+
on `POST /api/billing/checkout` (the delay is the provider's callback
|
|
6705
|
+
latency, which this system does not measure). `pending` is a normal
|
|
6706
|
+
state to keep polling on, not an error.
|
|
6707
|
+
operationId: getCheckoutSessionStatus
|
|
6708
|
+
security: [{bearerAuth: []}, {sessionAuth: []}] # required; answers only about the caller's own sessions
|
|
6709
|
+
x-identity-scoped: true # a session belongs to the caller who created it
|
|
6710
|
+
x-availability: planned
|
|
6711
|
+
tags:
|
|
6712
|
+
- Billing
|
|
6713
|
+
parameters:
|
|
6714
|
+
- name: sessionId
|
|
6715
|
+
in: path
|
|
6716
|
+
required: true
|
|
6717
|
+
description: The `session_id` returned by `POST /api/billing/checkout`.
|
|
6718
|
+
schema:
|
|
6719
|
+
type: string
|
|
6720
|
+
minLength: 1
|
|
6721
|
+
responses:
|
|
6722
|
+
'200':
|
|
6723
|
+
description: |
|
|
6724
|
+
The session's status for this caller. **Once implemented, always
|
|
6725
|
+
200 for an authenticated caller**, whatever the session id —
|
|
6726
|
+
`unknown` is the answer for anything not provably the caller's (see
|
|
6727
|
+
the collapse rationale above). While the endpoint is `planned` it
|
|
6728
|
+
answers `422 feature_not_available` instead.
|
|
6729
|
+
content:
|
|
6730
|
+
application/json:
|
|
6731
|
+
schema:
|
|
6732
|
+
$ref: '#/components/schemas/CheckoutSessionStatusResponse'
|
|
6733
|
+
examples:
|
|
6734
|
+
paid:
|
|
6735
|
+
summary: Credits granted
|
|
6736
|
+
value:
|
|
6737
|
+
success: true
|
|
6738
|
+
data:
|
|
6739
|
+
session_id: cs_test_a1b2c3
|
|
6740
|
+
status: paid
|
|
6741
|
+
pending:
|
|
6742
|
+
summary: Recorded for this caller, grant not landed yet
|
|
6743
|
+
value:
|
|
6744
|
+
success: true
|
|
6745
|
+
data:
|
|
6746
|
+
session_id: cs_test_a1b2c3
|
|
6747
|
+
status: pending
|
|
6748
|
+
unknown:
|
|
6749
|
+
summary: Not provably this caller's — or never existed
|
|
6750
|
+
value:
|
|
6751
|
+
success: true
|
|
6752
|
+
data:
|
|
6753
|
+
session_id: cs_test_zzz
|
|
6754
|
+
status: unknown
|
|
6755
|
+
'401':
|
|
6756
|
+
description: Authentication required.
|
|
6757
|
+
content:
|
|
6758
|
+
application/json:
|
|
6759
|
+
schema:
|
|
6760
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
6761
|
+
'422':
|
|
6762
|
+
description: |
|
|
6763
|
+
`feature_not_available` while this endpoint is `planned`.
|
|
6764
|
+
content:
|
|
6765
|
+
application/json:
|
|
6766
|
+
schema:
|
|
6767
|
+
$ref: '#/components/schemas/FeatureNotAvailableResponse'
|
|
6768
|
+
|
|
6604
6769
|
# ============================================
|
|
6605
6770
|
# CONTACT ENDPOINT
|
|
6606
6771
|
# ============================================
|
|
@@ -6828,12 +6993,22 @@ components:
|
|
|
6828
6993
|
enum: [false]
|
|
6829
6994
|
error:
|
|
6830
6995
|
type: string
|
|
6996
|
+
x-string-vocabulary: open
|
|
6831
6997
|
description: |
|
|
6832
|
-
|
|
6833
|
-
`
|
|
6998
|
+
Machine-readable error code. **Each published code is stable; the
|
|
6999
|
+
SET is open** (`x-string-vocabulary: open`): handle an unknown code
|
|
7000
|
+
as a generic error. E.g.
|
|
7001
|
+
`VALIDATION_FAILED`, `BALANCE_EXHAUSTED`,
|
|
6834
7002
|
`REQUIRES_REENCODE`). Canonical English; never localised.
|
|
6835
7003
|
SDKs duck-type on this field for typed error-branch
|
|
6836
|
-
helpers
|
|
7004
|
+
helpers — **except where an HTTP-status-shaped code
|
|
7005
|
+
(`UNPROCESSABLE_ENTITY`, `BAD_REQUEST`, …) covers several
|
|
7006
|
+
branches: there `error_type` is the discriminator.**
|
|
7007
|
+
Example: `POST /api/billing/checkout` answers
|
|
7008
|
+
`UNPROCESSABLE_ENTITY` both when checkout is switched off
|
|
7009
|
+
(`error_type: feature_not_available`) and when a pack or
|
|
7010
|
+
plan is not provisioned (no `error_type`); only
|
|
7011
|
+
`error_type` tells them apart.
|
|
6837
7012
|
|
|
6838
7013
|
Multipart-session resume codes (per ticket
|
|
6839
7014
|
[`HxUmVr3Y`](https://trello.com/c/HxUmVr3Y), V2.10.0):
|
|
@@ -6954,21 +7129,33 @@ components:
|
|
|
6954
7129
|
dispatch on `error_type` instead of structural `instanceOf`
|
|
6955
7130
|
guards (which mis-fire on camelCase-vs-snake_case property
|
|
6956
7131
|
names). Distinct from the `error` machine code below: `error`
|
|
6957
|
-
carries the specific failure code (`
|
|
7132
|
+
carries the specific failure code (`VALIDATION_FAILED`,
|
|
6958
7133
|
`REQUIRES_REENCODE`, `CYCLIC_WORKFLOW_EDGES`, …) while
|
|
6959
7134
|
`error_type` only names the envelope shape.
|
|
6960
7135
|
error:
|
|
6961
7136
|
type: string
|
|
6962
|
-
|
|
6963
|
-
|
|
6964
|
-
|
|
7137
|
+
x-string-vocabulary: open
|
|
7138
|
+
description: |
|
|
7139
|
+
Error code. **Each published code is stable; the SET is open**
|
|
7140
|
+
(`x-string-vocabulary: open`): handle an unknown code as a generic
|
|
7141
|
+
validation error. Codes emitted today: `VALIDATION_FAILED`
|
|
7142
|
+
(request, query-param **and workflow-create option/value**
|
|
7143
|
+
validation failure — the API emits it for every create-time
|
|
7144
|
+
option error: unknown key, out of range, wrong type, bad enum
|
|
7145
|
+
value; `details[]` items carry `field` = the option key and
|
|
7146
|
+
`message`), `REQUIRES_REENCODE`
|
|
6965
7147
|
(per ticket I16-CONS — `merge.video` with
|
|
6966
7148
|
`re_encode_mode: never` and incompatible inputs; caller
|
|
6967
7149
|
resolves by switching to `re_encode_mode: auto` or `always`),
|
|
6968
7150
|
`CYCLIC_WORKFLOW_EDGES` (cyclic/self explicit `workflow_edges`,
|
|
6969
|
-
per `g8PPkbNu`)
|
|
6970
|
-
|
|
6971
|
-
|
|
7151
|
+
per `g8PPkbNu`).
|
|
7152
|
+
⚠️ **`INVALID_OPTIONS` is NOT a create-time wire code**, though
|
|
7153
|
+
earlier text here said it was and the example showed it: the
|
|
7154
|
+
API has always sent `VALIDATION_FAILED` for option failures
|
|
7155
|
+
(measured on prod by `compression_e2e`, 2026-09-23;
|
|
7156
|
+
`WorkflowController` maps every `validation_error` to it).
|
|
7157
|
+
`invalid_options` lives on the worker's
|
|
7158
|
+
`OperationResult.error_code` (asyncapi), not on this envelope.
|
|
6972
7159
|
SDKs duck-type on this field for typed error-branch helpers.
|
|
6973
7160
|
message:
|
|
6974
7161
|
type: string
|
|
@@ -7075,6 +7262,7 @@ components:
|
|
|
7075
7262
|
enum: [false]
|
|
7076
7263
|
error:
|
|
7077
7264
|
type: string
|
|
7265
|
+
x-string-vocabulary: open
|
|
7078
7266
|
description: |
|
|
7079
7267
|
Stable machine-readable failure code. `UNPROCESSABLE_ENTITY`
|
|
7080
7268
|
for the generic auth domain rejections (register /
|
|
@@ -7987,6 +8175,32 @@ components:
|
|
|
7987
8175
|
data:
|
|
7988
8176
|
$ref: '#/components/schemas/AccountLimits'
|
|
7989
8177
|
|
|
8178
|
+
CheckoutSessionStatusResponse:
|
|
8179
|
+
type: object
|
|
8180
|
+
# Envelope CLOSED, payload OPEN — the repo's success-envelope convention:
|
|
8181
|
+
# top-level drift is detected, and new `data` fields stay additive.
|
|
8182
|
+
additionalProperties: false
|
|
8183
|
+
required: [success, data]
|
|
8184
|
+
properties:
|
|
8185
|
+
success:
|
|
8186
|
+
type: boolean
|
|
8187
|
+
enum: [true]
|
|
8188
|
+
data:
|
|
8189
|
+
type: object
|
|
8190
|
+
required: [session_id, status]
|
|
8191
|
+
properties:
|
|
8192
|
+
session_id:
|
|
8193
|
+
type: string
|
|
8194
|
+
description: Echo of the path parameter.
|
|
8195
|
+
status:
|
|
8196
|
+
type: string
|
|
8197
|
+
enum: [paid, pending, unknown]
|
|
8198
|
+
x-enum-openness: closed
|
|
8199
|
+
description: |
|
|
8200
|
+
`paid` / `pending` / `unknown` — see
|
|
8201
|
+
`GET /api/billing/checkout/{sessionId}/status`. `unknown`
|
|
8202
|
+
collapses "not yours" and "never existed" on purpose.
|
|
8203
|
+
|
|
7990
8204
|
AccountLimits:
|
|
7991
8205
|
type: object
|
|
7992
8206
|
# Open payload (response data target stays open for additive evolution —
|
|
@@ -8047,6 +8261,29 @@ components:
|
|
|
8047
8261
|
# api emits it. Unit is SECONDS — carried by the key name, per
|
|
8048
8262
|
# AccountLimitEntry.
|
|
8049
8263
|
$ref: '#/components/schemas/AccountLimitEntry'
|
|
8264
|
+
max_upload_image_pixels:
|
|
8265
|
+
# OPTIONAL in this expand step (ONxpaAlk); NOT required until api
|
|
8266
|
+
# emits it. The upload gate's pixel ceiling for decodable rasters
|
|
8267
|
+
# (width x height from the header) — the 413
|
|
8268
|
+
# IMAGE_DIMENSIONS_TOO_LARGE threshold. It is an ENV KNOB on the
|
|
8269
|
+
# API (UPLOAD_MAX_IMAGE_PIXELS), so the contract carries the
|
|
8270
|
+
# SHAPE and the server serves the NUMBER; a number written here
|
|
8271
|
+
# could drift from the running value by a task-definition edit.
|
|
8272
|
+
# Not tier-varying today: `tier_default` equals `effective`.
|
|
8273
|
+
# SINGLE-SHOT only (POST /api/uploads): sized for the API's inline
|
|
8274
|
+
# decode. Multipart has its own key below (ae4Q1yCb).
|
|
8275
|
+
$ref: '#/components/schemas/AccountLimitEntry'
|
|
8276
|
+
max_multipart_upload_image_pixels:
|
|
8277
|
+
# OPTIONAL in this expand step (ae4Q1yCb, owner ruling 2026-09-24);
|
|
8278
|
+
# NOT required until api emits it. The MULTIPART upload pixel
|
|
8279
|
+
# ceiling (width x height from the header) — the 413
|
|
8280
|
+
# IMAGE_DIMENSIONS_TOO_LARGE threshold on the multipart path. A
|
|
8281
|
+
# SEPARATE, HIGHER API setting than max_upload_image_pixels:
|
|
8282
|
+
# default 50 MP (hub, 2026-09-24), about half the workers'
|
|
8283
|
+
# declared 100 MP source cap, which is unproven end to end; it
|
|
8284
|
+
# rises only after a 100 MP staging proof. It MUST admit a 24 MP
|
|
8285
|
+
# photo. The server serves the number. Not tier-varying today.
|
|
8286
|
+
$ref: '#/components/schemas/AccountLimitEntry'
|
|
8050
8287
|
|
|
8051
8288
|
AccountLimitEntry:
|
|
8052
8289
|
type: object
|
|
@@ -8101,9 +8338,10 @@ components:
|
|
|
8101
8338
|
description: |
|
|
8102
8339
|
Single ledger entry. Immutable once written. A workflow-create
|
|
8103
8340
|
reservation appears here as a single row with `source_bucket`
|
|
8104
|
-
indicating which pool(s) were debited;
|
|
8105
|
-
|
|
8106
|
-
`reference_type
|
|
8341
|
+
indicating which pool(s) were debited; a returned reservation
|
|
8342
|
+
appears as a separate `reservation_release` row referencing the
|
|
8343
|
+
workflow via `reference_id` (see `reference_type` for the
|
|
8344
|
+
values that distinguish a release from a settle refund).
|
|
8107
8345
|
|
|
8108
8346
|
`type`, `pricing_version`, and `reference_type` are
|
|
8109
8347
|
deliberately free-form strings — their value sets evolve with
|
|
@@ -8132,11 +8370,16 @@ components:
|
|
|
8132
8370
|
$ref: '#/components/schemas/UuidV7'
|
|
8133
8371
|
type:
|
|
8134
8372
|
type: string
|
|
8135
|
-
|
|
8136
|
-
|
|
8137
|
-
|
|
8138
|
-
|
|
8139
|
-
|
|
8373
|
+
x-string-vocabulary: open
|
|
8374
|
+
description: |
|
|
8375
|
+
Ledger entry type — free-form string. Values the API emits
|
|
8376
|
+
today (its `CreditTransactionType`, a closed set): `grant`,
|
|
8377
|
+
`deduction`, `adjustment`, `overdraft_repayment`,
|
|
8378
|
+
`reservation`, `reservation_release`. **There is no
|
|
8379
|
+
`refund`, `top_up` or `monthly_grant`** — earlier text listed
|
|
8380
|
+
them, and a consumer filtering on one matched nothing. Not
|
|
8381
|
+
enumerated in the schema to avoid contract churn as billing
|
|
8382
|
+
event taxonomy evolves; SDKs duck-type.
|
|
8140
8383
|
amount:
|
|
8141
8384
|
type: integer
|
|
8142
8385
|
description: |
|
|
@@ -8200,6 +8443,7 @@ components:
|
|
|
8200
8443
|
applies symmetrically.
|
|
8201
8444
|
pricing_version:
|
|
8202
8445
|
type: string
|
|
8446
|
+
x-string-vocabulary: none
|
|
8203
8447
|
description: |
|
|
8204
8448
|
Pricing-table version applied to this transaction.
|
|
8205
8449
|
Free-form string (server emits a semver-shaped or
|
|
@@ -8213,10 +8457,16 @@ components:
|
|
|
8213
8457
|
description: Human-readable description of the ledger entry.
|
|
8214
8458
|
reference_type:
|
|
8215
8459
|
type: string
|
|
8216
|
-
|
|
8217
|
-
|
|
8218
|
-
|
|
8219
|
-
|
|
8460
|
+
x-string-vocabulary: open
|
|
8461
|
+
description: |
|
|
8462
|
+
What the transaction references. Free-form string. Values
|
|
8463
|
+
the API emits for workflow credits: `workflow_reservation`
|
|
8464
|
+
(the debit), `workflow_reservation_release`,
|
|
8465
|
+
`workflow_pause_release`, `workflow_expiry_release` and
|
|
8466
|
+
`workflow_settle_refund` (credits returned);
|
|
8467
|
+
`stripe_checkout_session` for a credit-pack purchase. Match
|
|
8468
|
+
on this field, not on `type`, to tell a release from a
|
|
8469
|
+
settle refund.
|
|
8220
8470
|
reference_id:
|
|
8221
8471
|
type: string
|
|
8222
8472
|
description: |
|
|
@@ -8274,6 +8524,7 @@ components:
|
|
|
8274
8524
|
# additively from the API ahead of this contract.
|
|
8275
8525
|
state:
|
|
8276
8526
|
type: [string, "null"]
|
|
8527
|
+
x-string-vocabulary: open
|
|
8277
8528
|
description: |
|
|
8278
8529
|
Reservation lifecycle state — free-form string (kept opaque like
|
|
8279
8530
|
`type`/`reference_type` for churn-resistance; SDKs duck-type).
|
|
@@ -8585,10 +8836,11 @@ components:
|
|
|
8585
8836
|
Effect of a workflow cancel on outstanding credit
|
|
8586
8837
|
reservations.
|
|
8587
8838
|
- `unspent_reservation_released`: caller refunded for the
|
|
8588
|
-
unspent portion of the original reservation;
|
|
8589
|
-
appears as a separate `CreditTransaction` (`type:
|
|
8590
|
-
`reference_type:
|
|
8591
|
-
|
|
8839
|
+
unspent portion of the original reservation; the return
|
|
8840
|
+
appears as a separate `CreditTransaction` (`type:
|
|
8841
|
+
reservation_release`, `reference_type:
|
|
8842
|
+
workflow_reservation_release`, `reference_id` matching the
|
|
8843
|
+
cancelled workflow). There is no `type: refund`.
|
|
8592
8844
|
- `none`: no refund issued (all reserved credits already
|
|
8593
8845
|
consumed by completed jobs at cancel time, OR the
|
|
8594
8846
|
workflow was already terminal in a previous cancel — the
|
|
@@ -9837,6 +10089,12 @@ components:
|
|
|
9837
10089
|
OperationType:
|
|
9838
10090
|
type: string
|
|
9839
10091
|
description: |
|
|
10092
|
+
⚠️ **HOMONYM:** `asyncapi/events.yaml` also declares an `OperationType` —
|
|
10093
|
+
the narrower event PAYLOAD vocabulary. This one is the CREATE surface.
|
|
10094
|
+
Same name, different membership; generated SDKs emit both, and the
|
|
10095
|
+
import path is the only distinguisher (not renamed — breaking;
|
|
10096
|
+
`bFy3zo5Y`). Relation asserted in `schemas/cross-document-enums.yaml`.
|
|
10097
|
+
|
|
9840
10098
|
Available operation types:
|
|
9841
10099
|
- compress: Reduce file size (images, audio, video, documents)
|
|
9842
10100
|
- thumbnail: Legacy thumbnail value. Generates a preview image
|
|
@@ -9862,11 +10120,11 @@ components:
|
|
|
9862
10120
|
- convert: Change file format (all types)
|
|
9863
10121
|
- custom_luma: Apply a caller-uploaded luma matte to a base video for a custom luma-matte transition effect. Multi-input (`role: base` + `role: transition_mask`). `availability: planned` (no tier gate); dispatch returns `feature_not_available` (422) until Lambda ships. Distinct from FFmpeg `xfade=custom` (which is an expression, not an operation). Per ticket I29 (Trello EPUE5Vs1).
|
|
9864
10122
|
- audio_overlay: Mix a secondary audio asset over a primary audio or video base (DJ tags, podcast intros/outros, station IDs, jingles). Multi-input (`role: base` + `role: overlay`). `availability: planned`; dispatch returns `feature_not_available` (422) until Lambda ships. **NOT** the same as `audio_watermark` — that operation is steganographic (imperceptible identifier embedded for ownership tracking), tracked separately by I20. Per ticket I19 (Trello Xr3Z4GBF).
|
|
9865
|
-
- audio_watermark: Embed a steganographic forensic watermark into an audio asset (or a video's audio track) — Cinavia / Resemble PerTh territory. Single-input. `availability: planned`
|
|
10123
|
+
- audio_watermark: Embed a steganographic forensic watermark into an audio asset (or a video's audio track) — Cinavia / Resemble PerTh territory. Single-input. `availability: planned` (no tier gate since 2026-09-23); dispatch returns `feature_not_available` (422) until Lambda ships. Pairs with `POST /api/audio-watermark/decode` for own-watermarks-only extraction. Per ticket I20 (Trello omiCq7Vn).
|
|
9866
10124
|
- audio_to_video: Produce a video from an audio input plus an OPTIONAL still image overlay. Multi-input role-based with the first OPTIONAL role on the contract (`role: base` audio required, `role: overlay` image 0..1 — see `per_role_cardinality`). When overlay is omitted, the video uses a solid background colour. `availability: planned` — WITHDRAWN 2026-09-15: measured 0.300 s of encode per second of output PLUS A 7 s FIXED COST, so the advertised PT2H needs 2167 s against a 900 s platform maximum (0.300 x 7200 alone is 2160 — the intercept is what makes the figure 2167, and a consumer dividing 600 by 0.300 gets a 2000 s in-flight boundary where the real one is 1976 s). Returns `feature_not_available` (422) at workflow-create. An already-accepted workflow is not cancelled (availability is checked at create) and fails only when its output duration exceeds ~1976 s ON THE INPUT THE RATE WAS MEASURED WITH (a real photographic 1080p still plus looped real audio), where 0.300 s per second plus a 7 s fixed cost reaches the worker's 600 s cap — the 60 s and 120 s measured cells both COMPLETED. The driver is the STILL'S RESOLUTION, not duration alone: a 4K still is roughly 4x the rate (unmeasured), which would put the boundary near a quarter of that, and this schema places no constraint on the overlay's resolution. Per ticket [`SlluxMBN`](https://trello.com/c/SlluxMBN) + ADR-0015 (introduces `per_role_cardinality` vocab).
|
|
9867
10125
|
- video_watermark: Apply an image overlay onto a base video via FFmpeg's `overlay` filter. Multi-input role-based (`role: base` video + `role: overlay` image, exactly one of each per `per_role_cardinality`). Re-encode required; audio stream-copy passthrough. Distinct from `image_watermark` (pure-Rust/image-only). `availability: planned` — WITHDRAWN 2026-09-15, operation AND `short_form`: a real 1080p source at the advertised PT5M / 500 MB was killed at 606 s by the worker's 600 s encode cap, no output. Returns `feature_not_available` (422) at workflow-create; an already-accepted workflow is not cancelled and fails only if it exceeds that cap; the 606 s kill is ONE measured point and nothing measured says where the boundary is. `long_form` and `multi_overlay_stack` were already `planned`. Per ticket [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) + ADR-0013.
|
|
9868
10126
|
- video_text_watermark: Render a text overlay onto a base video via FFmpeg's `drawtext` filter. Single-input — text and styling in options. Same `watermark_mode` (single/tiled), anchor + margin vocab as `text_watermark`. Re-encode required; audio stream-copy passthrough. `availability: planned` — WITHDRAWN 2026-09-15, operation AND `short_form`: a real 1080p source at the advertised PT5M was killed at 604 s by the worker's 600 s encode cap. Returns `feature_not_available` (422) at workflow-create. ⚠️ This entry previously read "until Lambda ships", which was wrong in a way that mattered: the worker SHIPPED and runs — it is the CEILING that cannot be served. Per ticket [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) + ADR-0013.
|
|
9869
|
-
- split: Fan one input file into N outputs across GIF / PDF / audio / video MIME families. Single-input per-mime-group catalog (mirrors merge/convert): GIF uses `frame_range` (REQUIRED) + `output_format`; PDF uses `page_range` OR `page_groups` (mutually exclusive); audio + video use a `mode` discriminator (interval/count/cut_points) + numeric-seconds wire format + `precision` flag (fast/exact). 200-output hard cap per ADR-0009 §D5 with per-mode preflight math; output naming `output-001..output-200`. Long-form video routes to a separate `split-video-fargate` worker via `processing_class`. `availability: beta` for the `audio` and `video` mime_groups (workers live on staging — shape-stable + opt-in, MUST NOT 422); video activates BOTH classes (`video.processing_class.short_form: beta` AND `long_form: beta` — `split-video-fargate` deployed + wired on staging
|
|
10127
|
+
- split: Fan one input file into N outputs across GIF / PDF / audio / video MIME families. Single-input per-mime-group catalog (mirrors merge/convert): GIF uses `frame_range` (REQUIRED) + `output_format`; PDF uses `page_range` OR `page_groups` (mutually exclusive); audio + video use a `mode` discriminator (interval/count/cut_points) + numeric-seconds wire format + `precision` flag (fast/exact). 200-output hard cap per ADR-0009 §D5 with per-mode preflight math; output naming `output-001..output-200`. Long-form video routes to a separate `split-video-fargate` worker via `processing_class`. `availability: beta` for the `audio` and `video` mime_groups (workers live on staging — shape-stable + opt-in, MUST NOT 422); video activates BOTH classes (`video.processing_class.short_form: beta` AND `long_form: beta` — `split-video-fargate` deployed + wired on staging; it stays `beta` until a PRODUCTION `customer_path` run is recorded in `availability/prod-verification-log.yaml` per [`rcwvUKhI`](https://trello.com/c/rcwvUKhI)). The `image_gif` and `document_pdf` mime_groups stay `availability: planned` and dispatch returns `feature_not_available` (422) until their workers ship. Per ticket [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) + ADR-0014.
|
|
9870
10128
|
- passthrough: Inert lossless source operation. A single-input source job whose SOLE operation is `passthrough` emits its source bytes UNCHANGED — no compression, no Lambda. The API self-completes the job at publish (terminal output = the upload `{bucket, key}` unchanged). Its purpose is to feed an uploaded file into a multi-input operation LOSSLESSLY: because `JobInputV2.source` is narrowed to exclude upload-direct, an upload that must enter a `merge` / `archive` / `image_watermark` op enters via a `passthrough` source job referenced downstream by `{type: job_output, from: <id>}` — preserving billing / DAG / lineage. Distinct from `operations: []` (which keeps its implicit-compress meaning on a single-input upload job); `passthrough` is the EXPLICIT lossless path via the "non-empty `operations[]` without `compress` = compression opt-out" rule. Media-agnostic; no options. `availability: beta` — activated (the inputs[]-narrowing + passthrough self-complete mechanism is deployed API-side); workflow-create accepts `passthrough` source jobs and MUST NOT return `feature_not_available`. **Never published to SNS** — deliberately absent from the AsyncAPI routing enums (API self-completes; no `ops-passthrough` queue). Per ticket [`4som89Uh`](https://trello.com/c/4som89Uh) + ADR-0004 (planned→beta flip).
|
|
9871
10129
|
|
|
9872
10130
|
- transform: Geometric/orientation transform — v1 = rotate (0/90/180/270) + flip (none/horizontal/vertical/both), ADR-0026. Single-input; `produces: same_as_input` (geometry preserves format/container). Chainable (NOT sole_op); canonical single-job chain order is `transform → convert → compress → thumbnail` (geometry before encode/derive so downstream width/height/fit refer to the final frame). Media groups: image (still jpeg/png/webp + animated `image_gif`), video (mp4/webm), document (PDF page-rotate only — no flip); audio not supported. ALL groups `availability: planned` (epic `fhiWebI0`) — workflow-create returns `feature_not_available` (422) until per-media Lambdas ship. A no-op transform (`rotate: 0` + `flip: none`) is rejected as `invalid_options`. The public operation type is `transform`; the API resolves an internal per-media SNS routing sub-type (`transform_image` / `transform_video` / `transform_document`) — those sub-types are routing-only and are NOT part of this public enum. Per ADR-0026.
|
|
@@ -10754,13 +11012,9 @@ components:
|
|
|
10754
11012
|
The two forms are mutually exclusive (a request supplies exactly
|
|
10755
11013
|
one — enforced by the `oneOf` below); they are NOT combined.
|
|
10756
11014
|
|
|
10757
|
-
🔴 **THE FLAT FORM IS `planned
|
|
10758
|
-
|
|
10759
|
-
|
|
10760
|
-
rather than the `feature_not_available` (422) envelope this contract
|
|
10761
|
-
requires for a `planned` shape — tracked against `compression_api`,
|
|
10762
|
-
so do not read that generic message as a validation error in your
|
|
10763
|
-
own payload.
|
|
11015
|
+
🔴 **THE FLAT FORM IS `planned`.** Send `jobs[]`. A flat request is
|
|
11016
|
+
rejected with the `feature_not_available` (422) envelope (feature
|
|
11017
|
+
`workflow.request.flat_form`) until the API accepts the flat form.
|
|
10764
11018
|
|
|
10765
11019
|
⚠️ **The equivalence stated above is the DESIGN, not observed
|
|
10766
11020
|
behaviour.** It describes what the server will do once the lowering
|
|
@@ -10916,11 +11170,12 @@ components:
|
|
|
10916
11170
|
$ref: '#/components/schemas/NotifyConfig'
|
|
10917
11171
|
description: |
|
|
10918
11172
|
Optional per-job completion-notification config
|
|
10919
|
-
(channel-agnostic).
|
|
10920
|
-
API emails the configured recipients
|
|
10921
|
-
events occur, with a
|
|
10922
|
-
link to the results —
|
|
10923
|
-
selection only.
|
|
11173
|
+
(channel-agnostic). Declares the `email` channel: once the
|
|
11174
|
+
dispatch engine ships, the API emails the configured recipients
|
|
11175
|
+
when the selected workflow events occur, with a
|
|
11176
|
+
**server-composed** presigned `/downloads` link to the results —
|
|
11177
|
+
the request carries recipients + event selection only. Nothing is
|
|
11178
|
+
sent today (see `NotifyConfig`).
|
|
10924
11179
|
|
|
10925
11180
|
**Advertised-ahead (contract-first, ticket
|
|
10926
11181
|
[`IQtEwVET`](https://trello.com/c/IQtEwVET)):** the completion-
|
|
@@ -11462,6 +11717,7 @@ components:
|
|
|
11462
11717
|
job that consumes this output.
|
|
11463
11718
|
node_id:
|
|
11464
11719
|
type: string
|
|
11720
|
+
x-string-vocabulary: open
|
|
11465
11721
|
description: |
|
|
11466
11722
|
Symbolic composition `node_id` correlating this delivered output
|
|
11467
11723
|
to its canonical node in `composition_plan` (e.g. `encode`,
|
|
@@ -11753,6 +12009,7 @@ components:
|
|
|
11753
12009
|
$ref: '#/components/schemas/ProcessingClass'
|
|
11754
12010
|
execution_pool:
|
|
11755
12011
|
type: string
|
|
12012
|
+
x-string-vocabulary: advisory
|
|
11756
12013
|
description: |
|
|
11757
12014
|
Logical pool name. **Opaque string** — not an enum — so
|
|
11758
12015
|
future pool naming evolves without contract churn. Known
|
|
@@ -12016,6 +12273,7 @@ components:
|
|
|
12016
12273
|
properties:
|
|
12017
12274
|
node_id:
|
|
12018
12275
|
type: string
|
|
12276
|
+
x-string-vocabulary: open
|
|
12019
12277
|
description: |
|
|
12020
12278
|
Stable **symbolic** canonical node id (e.g. `original`,
|
|
12021
12279
|
`processed_base`, `encode`, `thumbnail`). The correlation key
|
|
@@ -12038,6 +12296,7 @@ components:
|
|
|
12038
12296
|
nodes `type` is the operation as submitted.
|
|
12039
12297
|
chain_group:
|
|
12040
12298
|
type: string
|
|
12299
|
+
x-string-vocabulary: open
|
|
12041
12300
|
description: |
|
|
12042
12301
|
Which canonical stage this operation belongs to. **Open string,
|
|
12043
12302
|
NOT a fixed enum** (mirrors `ProcessingPlanJob.execution_pool`) —
|
|
@@ -12166,10 +12425,8 @@ components:
|
|
|
12166
12425
|
`blocked` is emitted when no tier-permitted pool exists for
|
|
12167
12426
|
the file — any caller probing a `corrupt` /
|
|
12168
12427
|
`unsupported_codec` file, or a caller below a class's
|
|
12169
|
-
`required_tier`. Since 2026-09-23 (decision 26)
|
|
12170
|
-
|
|
12171
|
-
(`enterprise`, both `planned`), so the tier branch is
|
|
12172
|
-
unreachable for every callable video class.
|
|
12428
|
+
`required_tier`. Since 2026-09-23 (decision 26) no class
|
|
12429
|
+
carries one, so the tier branch is currently unreachable.
|
|
12173
12430
|
# CLOSED. It GATES AN AFFORDANCE: `blocked` is a hard stop and the others
|
|
12174
12431
|
# predict routing. An unrecognised class cannot be safely treated as routable —
|
|
12175
12432
|
# a consumer guessing would offer an upload the server will refuse. A new
|
|
@@ -12750,7 +13007,9 @@ components:
|
|
|
12750
13007
|
description: |
|
|
12751
13008
|
OPTIONAL, drill-in-only "code for this run" / replay projection — the
|
|
12752
13009
|
allowlisted, re-submittable shape of the original request (for an SDK
|
|
12753
|
-
snippet / "run it again").
|
|
13010
|
+
snippet / "run it again"). Emitted on every workflow status
|
|
13011
|
+
response by an API that implements the projector; OPTIONAL so a
|
|
13012
|
+
consumer of an older API build tolerates its absence. NOT a
|
|
12754
13013
|
dump of the persisted option bag; see `CodegenSource`. Per ticket
|
|
12755
13014
|
`LO0R5gzk`.
|
|
12756
13015
|
|
|
@@ -12985,8 +13244,9 @@ components:
|
|
|
12985
13244
|
EXCLUDES all of that plus runtime results.
|
|
12986
13245
|
|
|
12987
13246
|
**Detail-only** — `WorkflowStatusResponse` only, NEVER `WorkflowSummary`
|
|
12988
|
-
(payload + the list view doesn't need it). OPTIONAL
|
|
12989
|
-
|
|
13247
|
+
(payload + the list view doesn't need it). OPTIONAL in the schema so a
|
|
13248
|
+
consumer of an older API build tolerates its absence; an API that
|
|
13249
|
+
implements the projector emits it on every status response.
|
|
12990
13250
|
|
|
12991
13251
|
**Scope: the reproducible JOB graph only.** Workflow-level request
|
|
12992
13252
|
fields (`delivery` / `export` / `processing`) are deliberately NOT part
|
|
@@ -13397,6 +13657,9 @@ components:
|
|
|
13397
13657
|
`never_started` (the operation was terminated without ever running
|
|
13398
13658
|
because its job reached a terminal state first — an upstream failure
|
|
13399
13659
|
OR a cancellation; API-derived, never worker-emitted),
|
|
13660
|
+
`processing_limit_exceeded` (a processing tool was killed at a
|
|
13661
|
+
budget set from this input — deterministic, non-retryable; a
|
|
13662
|
+
transient deadline is `timeout`),
|
|
13400
13663
|
`unknown` (unclassified),
|
|
13401
13664
|
`out_of_memory` (retryable), `timeout` (retryable),
|
|
13402
13665
|
`s3_download_failed` (retryable), `s3_upload_failed` (retryable).
|
|
@@ -13407,6 +13670,39 @@ components:
|
|
|
13407
13670
|
Human-readable failure detail. Present when `status` is `failed`;
|
|
13408
13671
|
absent otherwise. Mirrors `SseOperationFailedData.error_message`.
|
|
13409
13672
|
example: "output_too_large: Output (12156489 bytes) is not smaller than input (6187609 bytes)"
|
|
13673
|
+
message_key:
|
|
13674
|
+
$ref: '#/components/schemas/OperationMessageKey'
|
|
13675
|
+
message_params:
|
|
13676
|
+
$ref: '#/components/schemas/OperationMessageParams'
|
|
13677
|
+
|
|
13678
|
+
OperationMessageKey:
|
|
13679
|
+
type: string
|
|
13680
|
+
x-string-vocabulary: open
|
|
13681
|
+
pattern: '^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$'
|
|
13682
|
+
description: |
|
|
13683
|
+
Stable, never-localised key REFINING `error_code` on a failed
|
|
13684
|
+
operation, so a client can show specific, localised copy (e.g.
|
|
13685
|
+
`thumbnail.epub.no_cover`). OPTIONAL, failed only. Every value is
|
|
13686
|
+
declared, with the codes it may accompany and its parameters, in
|
|
13687
|
+
`schemas/operation-message-keys.yaml` (the one registry). Passed
|
|
13688
|
+
through unchanged from the worker's OperationResult. A client
|
|
13689
|
+
that does not know a key, or receives one whose registry
|
|
13690
|
+
`error_codes` do not include this `error_code`, ignores the key and
|
|
13691
|
+
falls back to the `error_code` headline;
|
|
13692
|
+
retry is still decided from the code. Ticket U7GQhjhX.
|
|
13693
|
+
example: "thumbnail.epub.no_cover"
|
|
13694
|
+
|
|
13695
|
+
OperationMessageParams:
|
|
13696
|
+
type: object
|
|
13697
|
+
additionalProperties:
|
|
13698
|
+
type: [string, integer, number, boolean]
|
|
13699
|
+
description: |
|
|
13700
|
+
Interpolation values for `message_key`, named and typed in
|
|
13701
|
+
`schemas/operation-message-keys.yaml`. JSON scalars only (string,
|
|
13702
|
+
integer, number, boolean) — no nested objects. Absent when the key
|
|
13703
|
+
declares no parameters (`params: {}`), and carries exactly the
|
|
13704
|
+
registry's parameters otherwise. Never carries free-text
|
|
13705
|
+
diagnostics; those stay in `error_message`.
|
|
13410
13706
|
|
|
13411
13707
|
OperationResultMetadata:
|
|
13412
13708
|
type: object
|
|
@@ -13418,9 +13714,15 @@ components:
|
|
|
13418
13714
|
diagnostics never leak. New keys are **additive named cuts** (the
|
|
13419
13715
|
`additionalProperties: false` closure is the point — an unmodelled
|
|
13420
13716
|
key is a coordinated contract change, not a silent rollout). Twin of
|
|
13421
|
-
the AsyncAPI `OperationResultMetadata` (wire ↔ read parity)
|
|
13717
|
+
the AsyncAPI `OperationResultMetadata` (wire ↔ read parity), except
|
|
13718
|
+
`already_optimal` / `estimated_saving_pct`, which the API projects
|
|
13719
|
+
from the wire `OperationMetrics` where the worker emits them. Distinct
|
|
13422
13720
|
from `OperationResult` (the deliverable output file): this carries
|
|
13423
13721
|
small per-operation metadata, not the output. Per `EurbZLMH` (B1).
|
|
13722
|
+
# The estimated_saving_pct => already_optimal:true relation is ENFORCED on
|
|
13723
|
+
# the wire OperationMetrics this is projected from, not here: this schema
|
|
13724
|
+
# also types the workflowCallback webhook payload, where oasdiff reads an
|
|
13725
|
+
# added if/then as a breaking REQUEST change.
|
|
13424
13726
|
properties:
|
|
13425
13727
|
watermark_id:
|
|
13426
13728
|
type: string
|
|
@@ -13433,6 +13735,28 @@ components:
|
|
|
13433
13735
|
whitelist ship now (additive) so the result_metadata pipeline +
|
|
13434
13736
|
read projection land without a later contract bump; absent in
|
|
13435
13737
|
practice until B3 is live.
|
|
13738
|
+
already_optimal:
|
|
13739
|
+
type: boolean
|
|
13740
|
+
description: |
|
|
13741
|
+
`true` when the operation completed by returning the ORIGINAL file
|
|
13742
|
+
unchanged, because compressing it would not have made it smaller
|
|
13743
|
+
(or the source was already efficiently encoded). The operation is
|
|
13744
|
+
a success, not a failure: `result` is the original. Show it as
|
|
13745
|
+
"already optimised", not as "same size". On an ordinary result it
|
|
13746
|
+
is absent or `false`; treat the two the same. Projected by the API from the wire
|
|
13747
|
+
`OperationMetrics.already_optimal` (ticket `roNRMilt`).
|
|
13748
|
+
example: true
|
|
13749
|
+
estimated_saving_pct:
|
|
13750
|
+
type: number
|
|
13751
|
+
minimum: 0
|
|
13752
|
+
maximum: 100
|
|
13753
|
+
description: |
|
|
13754
|
+
OPTIONAL, only with `already_optimal: true`: the worker's ESTIMATE
|
|
13755
|
+
of how much smaller, as a percentage of the input size, a re-encode
|
|
13756
|
+
would have made the file, when it declined before encoding. Absent
|
|
13757
|
+
when no estimate was made. An estimate, not a guarantee. Projected
|
|
13758
|
+
from the wire `OperationMetrics.estimated_saving_pct`.
|
|
13759
|
+
example: 3.5
|
|
13436
13760
|
|
|
13437
13761
|
OperationResult:
|
|
13438
13762
|
type: object
|
|
@@ -13527,6 +13851,7 @@ components:
|
|
|
13527
13851
|
`OperationMetrics.measured_quality`.
|
|
13528
13852
|
quality_metric:
|
|
13529
13853
|
type: string
|
|
13854
|
+
x-string-vocabulary: advisory
|
|
13530
13855
|
description: |
|
|
13531
13856
|
The perceptual metric that produced `measured_quality` — a free-form
|
|
13532
13857
|
string (not an enum) so it can evolve without contract churn. Present
|
|
@@ -13543,6 +13868,7 @@ components:
|
|
|
13543
13868
|
$ref: '#/components/schemas/ReEncodeDecision'
|
|
13544
13869
|
re_encode_reason:
|
|
13545
13870
|
type: string
|
|
13871
|
+
x-string-vocabulary: advisory
|
|
13546
13872
|
description: |
|
|
13547
13873
|
Advisory explanation for `re_encode_decision` (e.g.
|
|
13548
13874
|
`all_inputs_compatible`, `explicit_always_mode`,
|
|
@@ -13837,6 +14163,7 @@ components:
|
|
|
13837
14163
|
Mirrors `OperationMetrics.measured_quality`.
|
|
13838
14164
|
quality_metric:
|
|
13839
14165
|
type: string
|
|
14166
|
+
x-string-vocabulary: advisory
|
|
13840
14167
|
description: |
|
|
13841
14168
|
For an `auto_quality` encode: the perceptual metric that produced
|
|
13842
14169
|
`measured_quality` — a free-form string (not an enum) so it can evolve
|
|
@@ -13885,6 +14212,7 @@ components:
|
|
|
13885
14212
|
example: "thumb-2x"
|
|
13886
14213
|
node_id:
|
|
13887
14214
|
type: string
|
|
14215
|
+
x-string-vocabulary: open
|
|
13888
14216
|
description: |
|
|
13889
14217
|
Symbolic composition `node_id` correlating this download to its
|
|
13890
14218
|
canonical node in `WorkflowCreateResponse.composition_plan` (e.g.
|
|
@@ -14268,9 +14596,10 @@ components:
|
|
|
14268
14596
|
not: { required: [page_index] }
|
|
14269
14597
|
- title: Unindexed
|
|
14270
14598
|
description: |
|
|
14271
|
-
Output without
|
|
14272
|
-
|
|
14273
|
-
|
|
14599
|
+
Output without a page/position indexing field. Covers legacy
|
|
14600
|
+
single-output entries AND `render_variants` variant outputs (still
|
|
14601
|
+
`planned`, so not reachable through the API until that operation
|
|
14602
|
+
is). Mirrors the AsyncAPI `OperationResultOutputEntry` branch.
|
|
14274
14603
|
not:
|
|
14275
14604
|
anyOf:
|
|
14276
14605
|
- required: [page_index]
|
|
@@ -14346,6 +14675,10 @@ components:
|
|
|
14346
14675
|
generic reason.
|
|
14347
14676
|
error_message:
|
|
14348
14677
|
type: string
|
|
14678
|
+
message_key:
|
|
14679
|
+
$ref: '#/components/schemas/OperationMessageKey'
|
|
14680
|
+
message_params:
|
|
14681
|
+
$ref: '#/components/schemas/OperationMessageParams'
|
|
14349
14682
|
|
|
14350
14683
|
SseJobCompletedData:
|
|
14351
14684
|
type: object
|
|
@@ -14406,6 +14739,7 @@ components:
|
|
|
14406
14739
|
- partially_failed
|
|
14407
14740
|
reason:
|
|
14408
14741
|
type: string
|
|
14742
|
+
x-string-vocabulary: advisory
|
|
14409
14743
|
description: |
|
|
14410
14744
|
Optional advisory reason for the terminal state. Free-form
|
|
14411
14745
|
string; not an enum. Examples: "all jobs completed
|
|
@@ -15244,10 +15578,9 @@ components:
|
|
|
15244
15578
|
description: |
|
|
15245
15579
|
Operation-level availability tag. Optional — when absent, the
|
|
15246
15580
|
operation is treated as `stable` (parser obligation per
|
|
15247
|
-
ADR-0001 §1.4 / FORMAT.md §Availability Taxonomy).
|
|
15248
|
-
|
|
15249
|
-
|
|
15250
|
-
does not yet surface the field.
|
|
15581
|
+
ADR-0001 §1.4 / FORMAT.md §Availability Taxonomy). Echoed by
|
|
15582
|
+
`GET /api/operations/schema` whenever the operation schema
|
|
15583
|
+
declares it ([I3 `eCWIpug8`](https://trello.com/c/eCWIpug8)).
|
|
15251
15584
|
required_tier:
|
|
15252
15585
|
$ref: '#/components/schemas/UserTier'
|
|
15253
15586
|
description: |
|
|
@@ -15410,7 +15743,7 @@ components:
|
|
|
15410
15743
|
description: |
|
|
15411
15744
|
Optional mime-group-level INPUT-file size ceiling in BYTES
|
|
15412
15745
|
(ticket [`uKsFzORi`](https://trello.com/c/uKsFzORi)). Sibling of
|
|
15413
|
-
`max_output_pixels
|
|
15746
|
+
`max_output_pixels` (declared below). **Applies to the enclosing operation's input**, and
|
|
15414
15747
|
a consumer MUST scope it to the operation whose schema carries it —
|
|
15415
15748
|
**the same MIME can carry different ceilings under different
|
|
15416
15749
|
operations, because different workers process it.** ⚠️ This line
|
|
@@ -15433,6 +15766,33 @@ components:
|
|
|
15433
15766
|
`processing_class.<class>.constraints.max_input_size_bytes` instead —
|
|
15434
15767
|
never both, so the input ceiling lives in exactly one place per group.
|
|
15435
15768
|
CI-enforced by `scripts/check-per-tier-constraints.py`.
|
|
15769
|
+
max_output_pixels:
|
|
15770
|
+
type: integer
|
|
15771
|
+
format: int64
|
|
15772
|
+
minimum: 1
|
|
15773
|
+
description: |
|
|
15774
|
+
Optional mime-group-level OUTPUT area cap: a request is valid on
|
|
15775
|
+
this axis iff `width × height <= max_output_pixels`, read from the
|
|
15776
|
+
two option values. Declared here since 2026-09-23 (`gACSVjiK`): it
|
|
15777
|
+
was named as a "sibling" of `max_input_size_bytes` while existing
|
|
15778
|
+
only in the operation schemas and the availability sidecar, and a
|
|
15779
|
+
consumer diffing the served schema reported it as a missing key.
|
|
15780
|
+
⚠️ **Optional, and not yet round-tripped by `GET
|
|
15781
|
+
/api/operations/schema`** — the operation schemas under `schemas/`
|
|
15782
|
+
and `availability/availability.json` carry it today. See
|
|
15783
|
+
`schemas/FORMAT.md` §`max_output_pixels`.
|
|
15784
|
+
input_size_bound:
|
|
15785
|
+
type: string
|
|
15786
|
+
enum: [processing_time]
|
|
15787
|
+
x-enum-openness: closed
|
|
15788
|
+
description: |
|
|
15789
|
+
Declares that the group has **no byte ceiling on purpose**: the
|
|
15790
|
+
worker is bounded by processing time instead. XOR with
|
|
15791
|
+
`max_input_size_bytes` — exactly one is present when either is, so
|
|
15792
|
+
an absent pair means "nothing declared", never "unlimited".
|
|
15793
|
+
Declared here since 2026-09-23 (`gACSVjiK`) for the same reason as
|
|
15794
|
+
`max_output_pixels`, with the same round-trip caveat. See
|
|
15795
|
+
`schemas/FORMAT.md` §`input_size_bound`.
|
|
15436
15796
|
max_input_duration:
|
|
15437
15797
|
type: string
|
|
15438
15798
|
description: |
|
|
@@ -15609,6 +15969,7 @@ components:
|
|
|
15609
15969
|
description: Maximum value (for integer/float types)
|
|
15610
15970
|
pattern:
|
|
15611
15971
|
type: string
|
|
15972
|
+
x-string-vocabulary: none
|
|
15612
15973
|
description: |
|
|
15613
15974
|
ECMA-262 regular expression a `type: string` value MUST match
|
|
15614
15975
|
(the string analogue of `min`/`max`). Consumers pre-validate
|
|
@@ -15619,6 +15980,29 @@ components:
|
|
|
15619
15980
|
`#RRGGBB`; a CSS named colour was silently dropped to white). Only
|
|
15620
15981
|
meaningful for `type: string`. See `schemas/FORMAT.md`.
|
|
15621
15982
|
example: "^#[0-9a-fA-F]{6}$"
|
|
15983
|
+
items:
|
|
15984
|
+
type: object
|
|
15985
|
+
additionalProperties: true
|
|
15986
|
+
description: |
|
|
15987
|
+
`type: array` only. A JSON Schema 2020-12 OBJECT subschema every
|
|
15988
|
+
element must satisfy (boolean schemas are not used in this DSL;
|
|
15989
|
+
e.g. `{type: number, exclusiveMinimum: 0}` for
|
|
15990
|
+
`split.cut_points`, or an object shape for
|
|
15991
|
+
`image_watermark.overlays`). Named in JSON Schema's own camelCase,
|
|
15992
|
+
like `pattern`, because these ARE JSON Schema keywords and the
|
|
15993
|
+
published operation schemas already use them (fzrEO6GN).
|
|
15994
|
+
minItems:
|
|
15995
|
+
type: integer
|
|
15996
|
+
minimum: 0
|
|
15997
|
+
description: "`type: array` only. Fewest elements allowed."
|
|
15998
|
+
maxItems:
|
|
15999
|
+
type: integer
|
|
16000
|
+
minimum: 0
|
|
16001
|
+
description: "`type: array` only. Most elements allowed."
|
|
16002
|
+
uniqueItems:
|
|
16003
|
+
type: boolean
|
|
16004
|
+
description: |
|
|
16005
|
+
`type: array` only. `true`: elements must be pairwise distinct.
|
|
15622
16006
|
depends_on:
|
|
15623
16007
|
type: object
|
|
15624
16008
|
description: |
|
|
@@ -15810,15 +16194,22 @@ components:
|
|
|
15810
16194
|
NotifyConfig:
|
|
15811
16195
|
type: object
|
|
15812
16196
|
x-availability: planned
|
|
16197
|
+
# CLOSED to the declared channels: the API refuses an undeclared channel
|
|
16198
|
+
# key as validation_error, so the schema says so too (codex, #568).
|
|
16199
|
+
additionalProperties: false
|
|
15813
16200
|
description: |
|
|
15814
16201
|
Channel-agnostic per-job completion-notification config (ticket
|
|
15815
16202
|
[`IQtEwVET`](https://trello.com/c/IQtEwVET)). Currently the `email`
|
|
15816
16203
|
channel only; `webhook` folds onto the same dispatch engine later
|
|
15817
16204
|
(today webhook is configured via the top-level `callback_url` /
|
|
15818
16205
|
`callback_events`). **Advertised-ahead** — the API returns
|
|
15819
|
-
`feature_not_available` (422) for any
|
|
15820
|
-
dispatch engine ships
|
|
15821
|
-
|
|
16206
|
+
`feature_not_available` (422) for any use of a declared channel
|
|
16207
|
+
until the dispatch engine ships, with feature path
|
|
16208
|
+
`workflow.notify.<channel>` (today `workflow.notify.email`), the
|
|
16209
|
+
same dotted grammar as `workflow.request.flat_form`. An undeclared
|
|
16210
|
+
channel key is a `validation_error` (422). `x-availability` is
|
|
16211
|
+
decorative per ADR-0001 §1.5; the API is the authority on the 422
|
|
16212
|
+
gate.
|
|
15822
16213
|
|
|
15823
16214
|
An **empty `notify`** (object present but no channel set) is a
|
|
15824
16215
|
no-op — the workflow runs normally with no notifications; it is
|