@giveitsmaller/contracts 0.60.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accepted-options/accepted-options.json +1 -1
- package/accepted-options/image-output-routes.json +1 -1
- package/availability/availability.json +27 -6
- package/code-builder/code-builder-metadata.json +2 -2
- package/dist/openapi/models/AccountLimitEntry.d.ts +7 -5
- package/dist/openapi/models/AccountLimitEntry.js +1 -1
- package/dist/openapi/models/AccountLimits.d.ts +1 -1
- package/dist/openapi/models/AccountLimits.js +1 -1
- package/dist/openapi/models/AccountLimitsLimits.d.ts +7 -1
- package/dist/openapi/models/AccountLimitsLimits.js +3 -1
- package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
- package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
- package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
- package/dist/openapi/models/AuthErrorResponse.js +1 -1
- package/dist/openapi/models/AuthErrorType.d.ts +1 -1
- package/dist/openapi/models/AuthErrorType.js +1 -1
- package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
- package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
- package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
- package/dist/openapi/models/AvailabilityValue.js +1 -1
- package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
- package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
- package/dist/openapi/models/BillingCheckoutRequest.d.ts +1 -1
- package/dist/openapi/models/BillingCheckoutRequest.js +1 -1
- package/dist/openapi/models/BillingCheckoutSession.d.ts +1 -1
- package/dist/openapi/models/BillingCheckoutSession.js +1 -1
- package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +1 -1
- package/dist/openapi/models/CallbackEventType.d.ts +1 -1
- package/dist/openapi/models/CallbackEventType.js +1 -1
- package/dist/openapi/models/CancelAccountDeletion200Response.d.ts +46 -0
- package/dist/openapi/models/CancelAccountDeletion200Response.js +54 -0
- package/dist/openapi/models/CancelAccountDeletion200ResponseData.d.ts +32 -0
- package/dist/openapi/models/CancelAccountDeletion200ResponseData.js +43 -0
- package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
- package/dist/openapi/models/CapabilityCondition.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
- package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
- package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
- package/dist/openapi/models/CapabilityConstraint.js +1 -1
- package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
- package/dist/openapi/models/CapabilityInputSpec.js +1 -1
- package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
- package/dist/openapi/models/CapabilityProduces.js +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf.d.ts +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf.js +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
- package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
- package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
- package/dist/openapi/models/ChangePasswordRequest.js +1 -1
- package/dist/openapi/models/CodegenSource.d.ts +1 -1
- package/dist/openapi/models/CodegenSource.js +1 -1
- package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceInput.js +1 -1
- package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceJob.js +1 -1
- package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceJobSource.js +1 -1
- package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
- package/dist/openapi/models/CodegenSourceOperation.js +1 -1
- package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +21 -4
- package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
- package/dist/openapi/models/CompositionPlan.d.ts +1 -1
- package/dist/openapi/models/CompositionPlan.js +1 -1
- package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
- package/dist/openapi/models/CompositionPlanJob.js +1 -1
- package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
- package/dist/openapi/models/CompositionPlanOperation.js +1 -1
- package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
- package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
- package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
- package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
- package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
- package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
- package/dist/openapi/models/ConnectionSource.d.ts +1 -1
- package/dist/openapi/models/ConnectionSource.js +1 -1
- package/dist/openapi/models/ContactRequest.d.ts +1 -1
- package/dist/openapi/models/ContactRequest.js +1 -1
- package/dist/openapi/models/ContactSubject.d.ts +1 -1
- package/dist/openapi/models/ContactSubject.js +1 -1
- package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
- package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
- package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
- package/dist/openapi/models/CreateApiKey201Response.js +1 -1
- package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
- package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
- package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
- package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
- package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +1 -1
- package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +1 -1
- package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
- package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
- package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
- package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
- package/dist/openapi/models/CreateWorkflow401Response.d.ts +1 -1
- package/dist/openapi/models/CreateWorkflow401Response.js +1 -1
- package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
- package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
- package/dist/openapi/models/CreditTransaction.d.ts +1 -1
- package/dist/openapi/models/CreditTransaction.js +1 -1
- package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
- package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
- package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
- package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
- package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
- package/dist/openapi/models/CreditsUsageResponse.js +1 -1
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
- package/dist/openapi/models/Delivery.d.ts +1 -1
- package/dist/openapi/models/Delivery.js +1 -1
- package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
- package/dist/openapi/models/DeliveryOutputRef.js +1 -1
- package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
- package/dist/openapi/models/DeliveryPlan.js +1 -1
- package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
- package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
- package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
- package/dist/openapi/models/DeliveryPlanReason.js +1 -1
- package/dist/openapi/models/DeliverySelection.d.ts +1 -1
- package/dist/openapi/models/DeliverySelection.js +1 -1
- package/dist/openapi/models/DownloadBundle.d.ts +1 -1
- package/dist/openapi/models/DownloadBundle.js +1 -1
- package/dist/openapi/models/DroppedOption.d.ts +1 -1
- package/dist/openapi/models/DroppedOption.js +1 -1
- package/dist/openapi/models/EmailNotify.d.ts +1 -1
- package/dist/openapi/models/EmailNotify.js +1 -1
- package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
- package/dist/openapi/models/EndpointProjection.d.ts +1 -1
- package/dist/openapi/models/EndpointProjection.js +1 -1
- package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
- package/dist/openapi/models/ErrorEnvelope.js +1 -1
- package/dist/openapi/models/EstimateQuality.d.ts +1 -1
- package/dist/openapi/models/EstimateQuality.js +1 -1
- package/dist/openapi/models/EstimateRange.d.ts +1 -1
- package/dist/openapi/models/EstimateRange.js +1 -1
- package/dist/openapi/models/ExportAccountData200Response.d.ts +46 -0
- package/dist/openapi/models/ExportAccountData200Response.js +54 -0
- package/dist/openapi/models/ExportAccountData200ResponseData.d.ts +62 -0
- package/dist/openapi/models/ExportAccountData200ResponseData.js +55 -0
- package/dist/openapi/models/ExternalDestination.d.ts +1 -1
- package/dist/openapi/models/ExternalDestination.js +1 -1
- package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
- package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
- package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
- package/dist/openapi/models/ExternalImportRequest.js +1 -1
- package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
- package/dist/openapi/models/ExternalImportToken.js +1 -1
- package/dist/openapi/models/ExternalSource.d.ts +1 -1
- package/dist/openapi/models/ExternalSource.js +1 -1
- package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
- package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
- package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
- package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
- package/dist/openapi/models/FeatureViolation.d.ts +1 -1
- package/dist/openapi/models/FeatureViolation.js +1 -1
- package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
- package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
- package/dist/openapi/models/JobDefinition.d.ts +1 -1
- package/dist/openapi/models/JobDefinition.js +1 -1
- package/dist/openapi/models/JobDownload.d.ts +1 -1
- package/dist/openapi/models/JobDownload.js +1 -1
- package/dist/openapi/models/JobInputV2.d.ts +1 -1
- package/dist/openapi/models/JobInputV2.js +1 -1
- package/dist/openapi/models/JobMediaClass.d.ts +1 -1
- package/dist/openapi/models/JobMediaClass.js +1 -1
- package/dist/openapi/models/JobOutputSource.d.ts +1 -1
- package/dist/openapi/models/JobOutputSource.js +1 -1
- package/dist/openapi/models/JobResponse.d.ts +1 -1
- package/dist/openapi/models/JobResponse.js +1 -1
- package/dist/openapi/models/JobStatus.d.ts +1 -1
- package/dist/openapi/models/JobStatus.js +1 -1
- package/dist/openapi/models/JobType.d.ts +1 -1
- package/dist/openapi/models/JobType.js +1 -1
- package/dist/openapi/models/LivenessResponse.d.ts +1 -1
- package/dist/openapi/models/LivenessResponse.js +1 -1
- package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
- package/dist/openapi/models/LoginUser200Response.js +1 -1
- package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
- package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
- package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
- package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
- package/dist/openapi/models/LoginUser401Response.d.ts +1 -1
- package/dist/openapi/models/LoginUser401Response.js +1 -1
- package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
- package/dist/openapi/models/LoginUserRequest.js +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
- package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
- package/dist/openapi/models/MediaCategory.d.ts +31 -0
- package/dist/openapi/models/MediaCategory.js +49 -0
- package/dist/openapi/models/MetadataResponse.d.ts +1 -1
- package/dist/openapi/models/MetadataResponse.js +1 -1
- package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
- package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
- package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
- package/dist/openapi/models/MetadataResponseExif.js +1 -1
- package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
- package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
- package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
- package/dist/openapi/models/MimeGroupSchema.js +1 -1
- package/dist/openapi/models/MultiInputSource.d.ts +1 -1
- package/dist/openapi/models/MultiInputSource.js +1 -1
- package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
- package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
- package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
- package/dist/openapi/models/MultipartPartListing.js +1 -1
- package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
- package/dist/openapi/models/MultipartPresignRequest.js +1 -1
- package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartPresignResponse.js +1 -1
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
- package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
- package/dist/openapi/models/MultipartStatusResponse.js +1 -1
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
- package/dist/openapi/models/NotifyConfig.d.ts +1 -1
- package/dist/openapi/models/NotifyConfig.js +1 -1
- package/dist/openapi/models/OperationCapability.d.ts +1 -1
- package/dist/openapi/models/OperationCapability.js +1 -1
- package/dist/openapi/models/OperationDefinition.d.ts +1 -1
- package/dist/openapi/models/OperationDefinition.js +1 -1
- package/dist/openapi/models/OperationDownload.d.ts +1 -1
- package/dist/openapi/models/OperationDownload.js +1 -1
- package/dist/openapi/models/OperationInputModel.d.ts +1 -1
- package/dist/openapi/models/OperationInputModel.js +1 -1
- package/dist/openapi/models/OperationResponse.d.ts +1 -1
- package/dist/openapi/models/OperationResponse.js +1 -1
- package/dist/openapi/models/OperationResult.d.ts +1 -1
- package/dist/openapi/models/OperationResult.js +1 -1
- package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
- package/dist/openapi/models/OperationResultMetadata.js +1 -1
- package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
- package/dist/openapi/models/OperationResultMetrics.js +1 -1
- package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
- package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
- package/dist/openapi/models/OperationStatus.d.ts +1 -1
- package/dist/openapi/models/OperationStatus.js +1 -1
- package/dist/openapi/models/OperationType.d.ts +1 -1
- package/dist/openapi/models/OperationType.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponse.d.ts +8 -1
- package/dist/openapi/models/OperationsSchemaResponse.js +4 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.d.ts +1 -1
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesProcessing.js +1 -1
- package/dist/openapi/models/OptionSchema.d.ts +1 -1
- package/dist/openapi/models/OptionSchema.js +1 -1
- package/dist/openapi/models/OutputProperties.d.ts +1 -1
- package/dist/openapi/models/OutputProperties.js +1 -1
- package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
- package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
- package/dist/openapi/models/PerClassAvailabilityEntry.d.ts +1 -1
- package/dist/openapi/models/PerClassAvailabilityEntry.js +1 -1
- package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
- package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
- package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
- package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
- package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
- package/dist/openapi/models/PresignedUrlPart.js +1 -1
- package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
- package/dist/openapi/models/ProbePendingResponse.js +1 -1
- package/dist/openapi/models/ProcessingClass.d.ts +1 -1
- package/dist/openapi/models/ProcessingClass.js +1 -1
- package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
- package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
- package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassEntry.js +1 -1
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
- package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassHint.js +1 -1
- package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassReason.js +1 -1
- package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
- package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
- package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
- package/dist/openapi/models/ProcessingPlan.js +1 -1
- package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
- package/dist/openapi/models/ProcessingPlanJob.js +1 -1
- package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
- package/dist/openapi/models/ReEncodeDecision.js +1 -1
- package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
- package/dist/openapi/models/ReadinessResponse.js +1 -1
- package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
- package/dist/openapi/models/RegisterUser422Response.js +1 -1
- package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
- package/dist/openapi/models/RegisterUserRequest.js +1 -1
- package/dist/openapi/models/RequestAccountDeletion200Response.d.ts +46 -0
- package/dist/openapi/models/RequestAccountDeletion200Response.js +54 -0
- package/dist/openapi/models/RequestAccountDeletion200ResponseData.d.ts +41 -0
- package/dist/openapi/models/RequestAccountDeletion200ResponseData.js +47 -0
- package/dist/openapi/models/RequestAccountDeletionRequest.d.ts +32 -0
- package/dist/openapi/models/RequestAccountDeletionRequest.js +43 -0
- package/dist/openapi/models/ResendVerificationEmailRequest.d.ts +1 -1
- package/dist/openapi/models/ResendVerificationEmailRequest.js +1 -1
- package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
- package/dist/openapi/models/ResetPasswordRequest.js +1 -1
- package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
- package/dist/openapi/models/ResponseEnvelope.js +1 -1
- package/dist/openapi/models/RetryResponse.d.ts +1 -1
- package/dist/openapi/models/RetryResponse.js +1 -1
- package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
- package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
- package/dist/openapi/models/SseCompletionBase.js +1 -1
- package/dist/openapi/models/SseEventType.d.ts +1 -1
- package/dist/openapi/models/SseEventType.js +1 -1
- package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
- package/dist/openapi/models/SseJobCompletedData.js +1 -1
- package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
- package/dist/openapi/models/SseJobFailedData.js +1 -1
- package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
- package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
- package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
- package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
- package/dist/openapi/models/SseOperationCompletedData.js +1 -1
- package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
- package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
- package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
- package/dist/openapi/models/SseOperationFailedData.js +1 -1
- package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
- package/dist/openapi/models/SseOperationProgressData.js +1 -1
- package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
- package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
- package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
- package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
- package/dist/openapi/models/TierDefaultLimits.d.ts +59 -0
- package/dist/openapi/models/TierDefaultLimits.js +47 -0
- package/dist/openapi/models/TierDefaults.d.ts +66 -0
- package/dist/openapi/models/TierDefaults.js +49 -0
- package/dist/openapi/models/TierDefaultsByAudience.d.ts +73 -0
- package/dist/openapi/models/TierDefaultsByAudience.js +60 -0
- package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
- package/dist/openapi/models/TierRestrictionKind.js +1 -1
- package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
- package/dist/openapi/models/TierRestrictionResponse.js +1 -1
- package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
- package/dist/openapi/models/UpdateProfile200Response.js +1 -1
- package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
- package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
- package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
- package/dist/openapi/models/UpdateProfile422Response.js +1 -1
- package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
- package/dist/openapi/models/UpdateProfileRequest.js +1 -1
- package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
- package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
- package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
- package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
- package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
- package/dist/openapi/models/UploadFile403Response.js +1 -1
- package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
- package/dist/openapi/models/UploadFile422Response.js +1 -1
- package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
- package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
- package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
- package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
- package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
- package/dist/openapi/models/UploadProbeResponse.js +1 -1
- package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
- package/dist/openapi/models/UploadProbeStatus.js +1 -1
- package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
- package/dist/openapi/models/UploadResponse.d.ts +1 -1
- package/dist/openapi/models/UploadResponse.js +1 -1
- package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
- package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
- package/dist/openapi/models/UploadSource.d.ts +1 -1
- package/dist/openapi/models/UploadSource.js +1 -1
- package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
- package/dist/openapi/models/UploadThresholds.d.ts +1 -1
- package/dist/openapi/models/UploadThresholds.js +1 -1
- package/dist/openapi/models/UserTier.d.ts +1 -1
- package/dist/openapi/models/UserTier.js +1 -1
- package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
- package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
- package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
- package/dist/openapi/models/VerifyEmailRequest.js +1 -1
- package/dist/openapi/models/WarningType.d.ts +1 -1
- package/dist/openapi/models/WarningType.js +1 -1
- package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
- package/dist/openapi/models/WebhookOperationContext.js +1 -1
- package/dist/openapi/models/WebhookPayload.d.ts +1 -1
- package/dist/openapi/models/WebhookPayload.js +1 -1
- package/dist/openapi/models/WorkflowArchiveResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowArchiveResponse.js +1 -1
- package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowArchiveSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
- package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
- package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
- package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
- package/dist/openapi/models/WorkflowCreateResponse.d.ts +41 -6
- package/dist/openapi/models/WorkflowCreateResponse.js +4 -1
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowCreditSummary.d.ts +1 -1
- package/dist/openapi/models/WorkflowCreditSummary.js +1 -1
- package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
- package/dist/openapi/models/WorkflowEdge.js +1 -1
- package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
- package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowListResponse.js +1 -1
- package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
- package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
- package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
- package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
- package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
- package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
- package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
- package/dist/openapi/models/WorkflowProcessing.js +1 -1
- package/dist/openapi/models/WorkflowRestoreResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowRestoreResponse.js +1 -1
- package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowRestoreSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowSource.d.ts +1 -1
- package/dist/openapi/models/WorkflowSource.js +1 -1
- package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
- package/dist/openapi/models/WorkflowStatus.js +1 -1
- package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
- package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
- package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
- package/dist/openapi/models/WorkflowSummary.js +1 -1
- package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
- package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
- package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
- package/dist/openapi/models/WorkflowWarning.js +1 -1
- package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
- package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
- package/dist/openapi/models/index.d.ts +11 -0
- package/dist/openapi/models/index.js +11 -0
- package/dist/openapi/runtime.d.ts +1 -1
- package/dist/openapi/runtime.js +1 -1
- package/openapi/api.yaml +843 -36
- package/operation-capabilities/operation-capabilities.json +1 -1
- package/operations/schemas/render_variants.yaml +28 -3
- package/package.json +1 -1
package/openapi/api.yaml
CHANGED
|
@@ -89,15 +89,28 @@ info:
|
|
|
89
89
|
of truth instead of hardcoding magic numbers. A runtime
|
|
90
90
|
`GET /api/uploads/limits` endpoint for dynamic discovery
|
|
91
91
|
(per-tier / per-environment overrides) is a deferred follow-up.
|
|
92
|
-
version: 2.
|
|
92
|
+
version: 2.191.0
|
|
93
93
|
contact:
|
|
94
94
|
name: API Support
|
|
95
95
|
|
|
96
|
+
# The production host was ABSENT from this block entirely until 2026-08-11 —
|
|
97
|
+
# for EVERY endpoint, not just one. That was not merely untidy: prod's SSE
|
|
98
|
+
# consumer fell back to the wrong host precisely because the correct one lived
|
|
99
|
+
# only in deployment config, where nothing could catch the divergence. A host
|
|
100
|
+
# that exists only in an env var is a convention; a host declared here is a fact
|
|
101
|
+
# every generated client picks up.
|
|
102
|
+
#
|
|
103
|
+
# The staging/prod asymmetry is DELIBERATE and must not be "tidied": prod sets
|
|
104
|
+
# `environment_subdomain` to empty, so the domain base IS the root; staging sets
|
|
105
|
+
# it to `staging`, hence the extra label. Values resolved from terraform code by
|
|
106
|
+
# the terraform session, not from anyone's memory.
|
|
96
107
|
servers:
|
|
97
108
|
- url: http://localhost:8080
|
|
98
109
|
description: Local development
|
|
99
110
|
- url: https://api.staging.giveitsmaller.com
|
|
100
111
|
description: Staging environment
|
|
112
|
+
- url: https://api.giveitsmaller.com
|
|
113
|
+
description: Production environment
|
|
101
114
|
|
|
102
115
|
tags:
|
|
103
116
|
- name: Upload
|
|
@@ -1164,9 +1177,30 @@ paths:
|
|
|
1164
1177
|
NOT inline per-operation `result_metadata` or output details (avoids
|
|
1165
1178
|
N×M×K payload blow-up). Drill in via `GET /api/workflows/{id}/status`
|
|
1166
1179
|
(per-op detail incl. `result_metadata`) and
|
|
1167
|
-
`GET /api/workflows/{id}/downloads` (deliverables).
|
|
1168
|
-
|
|
1169
|
-
|
|
1180
|
+
`GET /api/workflows/{id}/downloads` (deliverables).
|
|
1181
|
+
|
|
1182
|
+
**Rows persist until GDPR purge — a workflow whose outputs have been
|
|
1183
|
+
retention-purged is STILL LISTED.** So a row appearing here does not
|
|
1184
|
+
imply its deliverables are still downloadable; read
|
|
1185
|
+
`retention_expires_at` on the downloads response for that.
|
|
1186
|
+
|
|
1187
|
+
⚠️ **This sentence used to say "whose 24h download window has expired".
|
|
1188
|
+
That figure was WRONG and was the only place in this spec it appeared.**
|
|
1189
|
+
The download-retention window is **per-tier — free 7 days / paid 30
|
|
1190
|
+
days / enterprise custom** — computed from the workflow's `created_at`
|
|
1191
|
+
and reported as `retention_expires_at` on
|
|
1192
|
+
`GET /api/workflows/{id}/downloads`
|
|
1193
|
+
([`G58ei6Z9`](https://trello.com/c/G58ei6Z9)). The stale clause almost
|
|
1194
|
+
certainly predates that field and nobody re-read it when the field
|
|
1195
|
+
landed.
|
|
1196
|
+
**It mattered because THREE clocks are involved and this was the one in
|
|
1197
|
+
the casually-read place:** `bundle.expires_at` is the short-lived
|
|
1198
|
+
pre-signed URL expiry (**access**), `retention_expires_at` is when the
|
|
1199
|
+
deliverables are removed (**data**), and the workflow's own
|
|
1200
|
+
`expires_at` is a record TTL on the paused path. **A download link
|
|
1201
|
+
expiring does not mean the object is gone** — a distinction this spec
|
|
1202
|
+
states correctly on `retention_expires_at` and used to contradict here.
|
|
1203
|
+
Per ticket [`nLK1IO1k`](https://trello.com/c/nLK1IO1k) (A1).
|
|
1170
1204
|
operationId: listWorkflows
|
|
1171
1205
|
security: [{bearerAuth: []}, {sessionAuth: []}] # required (explicit 401 — user-scoped list, no anonymous access)
|
|
1172
1206
|
x-identity-scoped: true # caller's own workflows — implicit identity-scoped, per ADR-0016 D3 (cf. credits/usage)
|
|
@@ -1450,6 +1484,7 @@ paths:
|
|
|
1450
1484
|
data:
|
|
1451
1485
|
workflow_id: "019539ac-2222-7000-8000-000000000001"
|
|
1452
1486
|
status: "pending"
|
|
1487
|
+
anonymous: false
|
|
1453
1488
|
created_at: "2026-04-26T14:30:00Z"
|
|
1454
1489
|
jobs:
|
|
1455
1490
|
- ref: "main"
|
|
@@ -1488,6 +1523,7 @@ paths:
|
|
|
1488
1523
|
data:
|
|
1489
1524
|
workflow_id: "019539ac-2222-7000-8000-000000000002"
|
|
1490
1525
|
status: "pending"
|
|
1526
|
+
anonymous: false
|
|
1491
1527
|
created_at: "2026-04-26T14:30:00Z"
|
|
1492
1528
|
jobs:
|
|
1493
1529
|
- ref: "file1"
|
|
@@ -2088,12 +2124,55 @@ paths:
|
|
|
2088
2124
|
schema:
|
|
2089
2125
|
type: string
|
|
2090
2126
|
description: |
|
|
2091
|
-
Capability token (the `cap` from the
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2127
|
+
Capability token (the `cap` from the workflow-create response)
|
|
2128
|
+
authorizing this read. Optional — an authenticated owner does not
|
|
2129
|
+
need it.
|
|
2130
|
+
|
|
2131
|
+
**`cap` is emitted only for anonymous (null-owner) creates TODAY,
|
|
2132
|
+
but do not read anything about OWNERSHIP from that** — see the
|
|
2133
|
+
`anonymous` field on the create response, which is the only
|
|
2134
|
+
supported way to determine it. This sentence used to describe `cap`
|
|
2135
|
+
as the anonymous-create token, and that phrasing is what licensed a
|
|
2136
|
+
consumer to treat its presence as proof of anonymity.
|
|
2137
|
+
|
|
2138
|
+
**A wrong or missing cap returns 404 `WorkflowNotFound`, never
|
|
2139
|
+
401/403 — and that holds for an OWNED workflow too**, not only a
|
|
2140
|
+
null-owner one, whenever the caller cannot otherwise prove they may
|
|
2141
|
+
read it. The reason is stated here rather than left as a rule,
|
|
2142
|
+
because a prohibition without its reason gets overturned by whoever
|
|
2143
|
+
reads it next: **a 403 would be an existence oracle.** It would let
|
|
2144
|
+
an unauthorized caller distinguish "this workflow exists and is not
|
|
2145
|
+
yours" from "no such workflow", which is exactly what the
|
|
2146
|
+
null-owner case deliberately avoids — and it is strictly worse on an
|
|
2147
|
+
owned workflow, where existence is tied to an identifiable account.
|
|
2148
|
+
|
|
2149
|
+
**Scope — what a capability grants WHEN it authorizes:
|
|
2150
|
+
`/status`, `/downloads` and `/events`, these three read paths and
|
|
2151
|
+
only these.** No write, no cancel, no retry, no archive. The
|
|
2152
|
+
authorizer is the single authority for all three, and **any
|
|
2153
|
+
asymmetry between the three paths would be a second authorizer in
|
|
2154
|
+
disguise.**
|
|
2155
|
+
|
|
2156
|
+
**WHEN a capability authorizes is a separate question, and TODAY
|
|
2157
|
+
THE ANSWER IS NARROWER: a null-owner workflow only.** An OWNED
|
|
2158
|
+
workflow authorizes on the session/owner match and **ignores the
|
|
2159
|
+
capability entirely** — presenting one does not grant a read. Do
|
|
2160
|
+
not implement capability acceptance on owned workflows from this
|
|
2161
|
+
paragraph.
|
|
2162
|
+
|
|
2163
|
+
That is scheduled to change: under
|
|
2164
|
+
[`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ) an owned workflow will
|
|
2165
|
+
authorize on **owner match OR a valid capability**, so that a
|
|
2166
|
+
logged-in caller can authorize a read against the separate stream
|
|
2167
|
+
host. **Until that ships, the scope rule above describes the grant,
|
|
2168
|
+
not its availability on owned workflows** — the two were stated as
|
|
2169
|
+
one sentence in the first draft of this text, which read as though
|
|
2170
|
+
capability acceptance were already ownership-independent. It is
|
|
2171
|
+
not.
|
|
2172
|
+
|
|
2173
|
+
Per ticket [`YQt88cq2`](https://trello.com/c/YQt88cq2); 404-vs-403
|
|
2174
|
+
and the scope rule confirmed against the implementation by api,
|
|
2175
|
+
2026-08-11 ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)).
|
|
2097
2176
|
responses:
|
|
2098
2177
|
'200':
|
|
2099
2178
|
description: Workflow status retrieved
|
|
@@ -2188,12 +2267,55 @@ paths:
|
|
|
2188
2267
|
schema:
|
|
2189
2268
|
type: string
|
|
2190
2269
|
description: |
|
|
2191
|
-
Capability token (the `cap` from the
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2270
|
+
Capability token (the `cap` from the workflow-create response)
|
|
2271
|
+
authorizing this read. Optional — an authenticated owner does not
|
|
2272
|
+
need it.
|
|
2273
|
+
|
|
2274
|
+
**`cap` is emitted only for anonymous (null-owner) creates TODAY,
|
|
2275
|
+
but do not read anything about OWNERSHIP from that** — see the
|
|
2276
|
+
`anonymous` field on the create response, which is the only
|
|
2277
|
+
supported way to determine it. This sentence used to describe `cap`
|
|
2278
|
+
as the anonymous-create token, and that phrasing is what licensed a
|
|
2279
|
+
consumer to treat its presence as proof of anonymity.
|
|
2280
|
+
|
|
2281
|
+
**A wrong or missing cap returns 404 `WorkflowNotFound`, never
|
|
2282
|
+
401/403 — and that holds for an OWNED workflow too**, not only a
|
|
2283
|
+
null-owner one, whenever the caller cannot otherwise prove they may
|
|
2284
|
+
read it. The reason is stated here rather than left as a rule,
|
|
2285
|
+
because a prohibition without its reason gets overturned by whoever
|
|
2286
|
+
reads it next: **a 403 would be an existence oracle.** It would let
|
|
2287
|
+
an unauthorized caller distinguish "this workflow exists and is not
|
|
2288
|
+
yours" from "no such workflow", which is exactly what the
|
|
2289
|
+
null-owner case deliberately avoids — and it is strictly worse on an
|
|
2290
|
+
owned workflow, where existence is tied to an identifiable account.
|
|
2291
|
+
|
|
2292
|
+
**Scope — what a capability grants WHEN it authorizes:
|
|
2293
|
+
`/status`, `/downloads` and `/events`, these three read paths and
|
|
2294
|
+
only these.** No write, no cancel, no retry, no archive. The
|
|
2295
|
+
authorizer is the single authority for all three, and **any
|
|
2296
|
+
asymmetry between the three paths would be a second authorizer in
|
|
2297
|
+
disguise.**
|
|
2298
|
+
|
|
2299
|
+
**WHEN a capability authorizes is a separate question, and TODAY
|
|
2300
|
+
THE ANSWER IS NARROWER: a null-owner workflow only.** An OWNED
|
|
2301
|
+
workflow authorizes on the session/owner match and **ignores the
|
|
2302
|
+
capability entirely** — presenting one does not grant a read. Do
|
|
2303
|
+
not implement capability acceptance on owned workflows from this
|
|
2304
|
+
paragraph.
|
|
2305
|
+
|
|
2306
|
+
That is scheduled to change: under
|
|
2307
|
+
[`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ) an owned workflow will
|
|
2308
|
+
authorize on **owner match OR a valid capability**, so that a
|
|
2309
|
+
logged-in caller can authorize a read against the separate stream
|
|
2310
|
+
host. **Until that ships, the scope rule above describes the grant,
|
|
2311
|
+
not its availability on owned workflows** — the two were stated as
|
|
2312
|
+
one sentence in the first draft of this text, which read as though
|
|
2313
|
+
capability acceptance were already ownership-independent. It is
|
|
2314
|
+
not.
|
|
2315
|
+
|
|
2316
|
+
Per ticket [`YQt88cq2`](https://trello.com/c/YQt88cq2); 404-vs-403
|
|
2317
|
+
and the scope rule confirmed against the implementation by api,
|
|
2318
|
+
2026-08-11 ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)).
|
|
2197
2319
|
responses:
|
|
2198
2320
|
'200':
|
|
2199
2321
|
description: Download URLs retrieved
|
|
@@ -2308,12 +2430,55 @@ paths:
|
|
|
2308
2430
|
schema:
|
|
2309
2431
|
type: string
|
|
2310
2432
|
description: |
|
|
2311
|
-
Capability token (the `cap` from the
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2433
|
+
Capability token (the `cap` from the workflow-create response)
|
|
2434
|
+
authorizing this read. Optional — an authenticated owner does not
|
|
2435
|
+
need it.
|
|
2436
|
+
|
|
2437
|
+
**`cap` is emitted only for anonymous (null-owner) creates TODAY,
|
|
2438
|
+
but do not read anything about OWNERSHIP from that** — see the
|
|
2439
|
+
`anonymous` field on the create response, which is the only
|
|
2440
|
+
supported way to determine it. This sentence used to describe `cap`
|
|
2441
|
+
as the anonymous-create token, and that phrasing is what licensed a
|
|
2442
|
+
consumer to treat its presence as proof of anonymity.
|
|
2443
|
+
|
|
2444
|
+
**A wrong or missing cap returns 404 `WorkflowNotFound`, never
|
|
2445
|
+
401/403 — and that holds for an OWNED workflow too**, not only a
|
|
2446
|
+
null-owner one, whenever the caller cannot otherwise prove they may
|
|
2447
|
+
read it. The reason is stated here rather than left as a rule,
|
|
2448
|
+
because a prohibition without its reason gets overturned by whoever
|
|
2449
|
+
reads it next: **a 403 would be an existence oracle.** It would let
|
|
2450
|
+
an unauthorized caller distinguish "this workflow exists and is not
|
|
2451
|
+
yours" from "no such workflow", which is exactly what the
|
|
2452
|
+
null-owner case deliberately avoids — and it is strictly worse on an
|
|
2453
|
+
owned workflow, where existence is tied to an identifiable account.
|
|
2454
|
+
|
|
2455
|
+
**Scope — what a capability grants WHEN it authorizes:
|
|
2456
|
+
`/status`, `/downloads` and `/events`, these three read paths and
|
|
2457
|
+
only these.** No write, no cancel, no retry, no archive. The
|
|
2458
|
+
authorizer is the single authority for all three, and **any
|
|
2459
|
+
asymmetry between the three paths would be a second authorizer in
|
|
2460
|
+
disguise.**
|
|
2461
|
+
|
|
2462
|
+
**WHEN a capability authorizes is a separate question, and TODAY
|
|
2463
|
+
THE ANSWER IS NARROWER: a null-owner workflow only.** An OWNED
|
|
2464
|
+
workflow authorizes on the session/owner match and **ignores the
|
|
2465
|
+
capability entirely** — presenting one does not grant a read. Do
|
|
2466
|
+
not implement capability acceptance on owned workflows from this
|
|
2467
|
+
paragraph.
|
|
2468
|
+
|
|
2469
|
+
That is scheduled to change: under
|
|
2470
|
+
[`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ) an owned workflow will
|
|
2471
|
+
authorize on **owner match OR a valid capability**, so that a
|
|
2472
|
+
logged-in caller can authorize a read against the separate stream
|
|
2473
|
+
host. **Until that ships, the scope rule above describes the grant,
|
|
2474
|
+
not its availability on owned workflows** — the two were stated as
|
|
2475
|
+
one sentence in the first draft of this text, which read as though
|
|
2476
|
+
capability acceptance were already ownership-independent. It is
|
|
2477
|
+
not.
|
|
2478
|
+
|
|
2479
|
+
Per ticket [`YQt88cq2`](https://trello.com/c/YQt88cq2); 404-vs-403
|
|
2480
|
+
and the scope rule confirmed against the implementation by api,
|
|
2481
|
+
2026-08-11 ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)).
|
|
2317
2482
|
|
|
2318
2483
|
**SSE transport note:** native browser `EventSource` cannot set
|
|
2319
2484
|
request headers (its constructor accepts only `url` + `withCredentials`
|
|
@@ -3865,6 +4030,402 @@ paths:
|
|
|
3865
4030
|
schema:
|
|
3866
4031
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
3867
4032
|
|
|
4033
|
+
/api/auth/account:
|
|
4034
|
+
delete:
|
|
4035
|
+
summary: Request deletion of the authenticated user's account
|
|
4036
|
+
# THE CONTRACT IS CATCHING UP TO SHIPPED BEHAVIOUR. Every status code,
|
|
4037
|
+
# error code and wire key below was read from the implementation
|
|
4038
|
+
# (AccountDeletionController + its feature tests), not designed here.
|
|
4039
|
+
#
|
|
4040
|
+
# ⚠️ WHAT HAPPENS TO STORED OUTPUTS IS DELIBERATELY NOT DECLARED. There
|
|
4041
|
+
# is a confirmed retention defect under a fleet-wide fix freeze, and a
|
|
4042
|
+
# deletion GUARANTEE is the one claim this repo must not lead the
|
|
4043
|
+
# implementation on: `planned` assumes the caller gets a refusal it can
|
|
4044
|
+
# see, and a retention gap refuses nothing. Declaring removal before
|
|
4045
|
+
# removal works would put a false claim on a privacy path. Tracked on
|
|
4046
|
+
# ticket [`NSIPubON`](https://trello.com/c/NSIPubON) as a USER decision,
|
|
4047
|
+
# alongside what happens to purchased credits.
|
|
4048
|
+
description: |
|
|
4049
|
+
Requests deletion of the caller's own account. **This is a request,
|
|
4050
|
+
not an immediate deletion** — it opens a **30-day grace period**
|
|
4051
|
+
during which `POST /api/auth/account/cancel-deletion` reverses it.
|
|
4052
|
+
|
|
4053
|
+
Re-verifies the caller's password: `current_password` is required.
|
|
4054
|
+
|
|
4055
|
+
**Deletion is REFUSED while the account has workflows in progress**
|
|
4056
|
+
(`409 WORKFLOWS_IN_PROGRESS`). A client must be prepared for that
|
|
4057
|
+
branch — it is not an error state the user can resolve by retrying
|
|
4058
|
+
immediately, and it is the answer to "what happens to my in-flight
|
|
4059
|
+
work": nothing, because the deletion does not start.
|
|
4060
|
+
|
|
4061
|
+
**Side effect a caller cannot otherwise discover:** a successful
|
|
4062
|
+
request **revokes the account's API keys immediately**, before the
|
|
4063
|
+
grace period elapses, and reports how many in `api_keys_revoked`.
|
|
4064
|
+
Cancelling the deletion does **not** restore them.
|
|
4065
|
+
|
|
4066
|
+
Hard deletion runs after grace expiry and is **not exposed to
|
|
4067
|
+
callers**; the terminal states surface as the `account_deleted` and
|
|
4068
|
+
`account_deletion_expired` error codes on subsequent requests.
|
|
4069
|
+
operationId: requestAccountDeletion
|
|
4070
|
+
security: [{bearerAuth: []}, {sessionAuth: []}] # required (authenticated principal)
|
|
4071
|
+
x-identity-scoped: true # identity-bound (caller's own account)
|
|
4072
|
+
tags:
|
|
4073
|
+
- Auth
|
|
4074
|
+
requestBody:
|
|
4075
|
+
required: true
|
|
4076
|
+
content:
|
|
4077
|
+
application/json:
|
|
4078
|
+
schema:
|
|
4079
|
+
type: object
|
|
4080
|
+
required:
|
|
4081
|
+
- current_password
|
|
4082
|
+
properties:
|
|
4083
|
+
current_password:
|
|
4084
|
+
type: string
|
|
4085
|
+
minLength: 1
|
|
4086
|
+
example:
|
|
4087
|
+
current_password: "s3cretpw"
|
|
4088
|
+
responses:
|
|
4089
|
+
'200':
|
|
4090
|
+
description: |
|
|
4091
|
+
Deletion requested; the 30-day grace period has started.
|
|
4092
|
+
content:
|
|
4093
|
+
application/json:
|
|
4094
|
+
schema:
|
|
4095
|
+
type: object
|
|
4096
|
+
additionalProperties: false
|
|
4097
|
+
required:
|
|
4098
|
+
- success
|
|
4099
|
+
- data
|
|
4100
|
+
properties:
|
|
4101
|
+
success:
|
|
4102
|
+
type: boolean
|
|
4103
|
+
enum: [true]
|
|
4104
|
+
data:
|
|
4105
|
+
type: object
|
|
4106
|
+
additionalProperties: false
|
|
4107
|
+
required:
|
|
4108
|
+
- message
|
|
4109
|
+
- api_keys_revoked
|
|
4110
|
+
properties:
|
|
4111
|
+
message:
|
|
4112
|
+
type: string
|
|
4113
|
+
description: Human-readable confirmation naming the grace period.
|
|
4114
|
+
api_keys_revoked:
|
|
4115
|
+
type: integer
|
|
4116
|
+
minimum: 0
|
|
4117
|
+
description: |
|
|
4118
|
+
How many of the account's API keys were revoked by
|
|
4119
|
+
this request. Revocation is **immediate** and is
|
|
4120
|
+
**not** undone by cancelling the deletion.
|
|
4121
|
+
example:
|
|
4122
|
+
success: true
|
|
4123
|
+
data:
|
|
4124
|
+
message: "Account deletion requested. You have 30 days to cancel."
|
|
4125
|
+
api_keys_revoked: 2
|
|
4126
|
+
'403':
|
|
4127
|
+
description: |
|
|
4128
|
+
The supplied `current_password` is incorrect
|
|
4129
|
+
(`error: INVALID_PASSWORD`, `error_type: invalid_password`).
|
|
4130
|
+
content:
|
|
4131
|
+
application/json:
|
|
4132
|
+
schema:
|
|
4133
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4134
|
+
example:
|
|
4135
|
+
success: false
|
|
4136
|
+
error: "INVALID_PASSWORD"
|
|
4137
|
+
error_type: "invalid_password"
|
|
4138
|
+
message: "Current password is incorrect."
|
|
4139
|
+
'409':
|
|
4140
|
+
description: |
|
|
4141
|
+
Two distinct conflicts, discriminated by `error_type`:
|
|
4142
|
+
|
|
4143
|
+
- `already_requested` (`error: ALREADY_REQUESTED`) — a deletion
|
|
4144
|
+
request is already open for this account.
|
|
4145
|
+
- `workflows_in_progress` (`error: WORKFLOWS_IN_PROGRESS`) — the
|
|
4146
|
+
account has running workflows and deletion is refused until
|
|
4147
|
+
they reach a terminal state.
|
|
4148
|
+
content:
|
|
4149
|
+
application/json:
|
|
4150
|
+
schema:
|
|
4151
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4152
|
+
example:
|
|
4153
|
+
success: false
|
|
4154
|
+
error: "WORKFLOWS_IN_PROGRESS"
|
|
4155
|
+
error_type: "workflows_in_progress"
|
|
4156
|
+
'401':
|
|
4157
|
+
description: No authenticated principal.
|
|
4158
|
+
content:
|
|
4159
|
+
application/json:
|
|
4160
|
+
schema:
|
|
4161
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4162
|
+
example:
|
|
4163
|
+
success: false
|
|
4164
|
+
error: "AUTHENTICATION_REQUIRED"
|
|
4165
|
+
error_type: "authentication_required"
|
|
4166
|
+
message: "Authentication required."
|
|
4167
|
+
'404':
|
|
4168
|
+
description: |
|
|
4169
|
+
The authenticated principal no longer resolves to a stored user
|
|
4170
|
+
(`error: USER_NOT_FOUND`).
|
|
4171
|
+
content:
|
|
4172
|
+
application/json:
|
|
4173
|
+
schema:
|
|
4174
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4175
|
+
example:
|
|
4176
|
+
success: false
|
|
4177
|
+
error: "USER_NOT_FOUND"
|
|
4178
|
+
'422':
|
|
4179
|
+
description: |
|
|
4180
|
+
Structured input validation failure — e.g. a blank
|
|
4181
|
+
`current_password`. `details[].field` carries the wire key
|
|
4182
|
+
`current_password`.
|
|
4183
|
+
content:
|
|
4184
|
+
application/json:
|
|
4185
|
+
schema:
|
|
4186
|
+
$ref: '#/components/schemas/ValidationErrorEnvelope'
|
|
4187
|
+
example:
|
|
4188
|
+
success: false
|
|
4189
|
+
error_type: validation_error
|
|
4190
|
+
error: "Validation failed"
|
|
4191
|
+
details:
|
|
4192
|
+
- field: "current_password"
|
|
4193
|
+
message: "Current password is required."
|
|
4194
|
+
'429':
|
|
4195
|
+
description: |
|
|
4196
|
+
Rate limit exceeded — the deletion request has its own per-user
|
|
4197
|
+
hourly limiter, separate from the cancel limiter. Carries a
|
|
4198
|
+
`Retry-After` response header.
|
|
4199
|
+
headers:
|
|
4200
|
+
Retry-After:
|
|
4201
|
+
description: Seconds to wait before retrying. Delta-seconds (RFC 9110).
|
|
4202
|
+
schema:
|
|
4203
|
+
type: integer
|
|
4204
|
+
minimum: 0
|
|
4205
|
+
example: 60
|
|
4206
|
+
content:
|
|
4207
|
+
application/json:
|
|
4208
|
+
schema:
|
|
4209
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4210
|
+
|
|
4211
|
+
/api/auth/account/cancel-deletion:
|
|
4212
|
+
post:
|
|
4213
|
+
summary: Cancel a pending account-deletion request
|
|
4214
|
+
description: |
|
|
4215
|
+
Reverses a deletion request while the **30-day grace period** is
|
|
4216
|
+
still open. Takes no request body — the caller's identity is the
|
|
4217
|
+
whole input.
|
|
4218
|
+
|
|
4219
|
+
**`410 Gone` is the expiry signal** and is the only way a client
|
|
4220
|
+
learns the grace period has run out. Distinguish it from `409`: a
|
|
4221
|
+
`409` means there was never a request to cancel, a `410` means there
|
|
4222
|
+
was one and it is too late.
|
|
4223
|
+
|
|
4224
|
+
**API keys revoked by the deletion request are NOT restored.**
|
|
4225
|
+
operationId: cancelAccountDeletion
|
|
4226
|
+
security: [{bearerAuth: []}, {sessionAuth: []}] # required (authenticated principal)
|
|
4227
|
+
x-identity-scoped: true # identity-bound (caller's own account)
|
|
4228
|
+
tags:
|
|
4229
|
+
- Auth
|
|
4230
|
+
responses:
|
|
4231
|
+
'200':
|
|
4232
|
+
description: The pending deletion request was cancelled.
|
|
4233
|
+
content:
|
|
4234
|
+
application/json:
|
|
4235
|
+
schema:
|
|
4236
|
+
type: object
|
|
4237
|
+
additionalProperties: false
|
|
4238
|
+
required:
|
|
4239
|
+
- success
|
|
4240
|
+
- data
|
|
4241
|
+
properties:
|
|
4242
|
+
success:
|
|
4243
|
+
type: boolean
|
|
4244
|
+
enum: [true]
|
|
4245
|
+
data:
|
|
4246
|
+
type: object
|
|
4247
|
+
additionalProperties: false
|
|
4248
|
+
required:
|
|
4249
|
+
- message
|
|
4250
|
+
properties:
|
|
4251
|
+
message:
|
|
4252
|
+
type: string
|
|
4253
|
+
example:
|
|
4254
|
+
success: true
|
|
4255
|
+
data:
|
|
4256
|
+
message: "Account deletion has been cancelled."
|
|
4257
|
+
'409':
|
|
4258
|
+
description: |
|
|
4259
|
+
No deletion request is open for this account
|
|
4260
|
+
(`error: NO_DELETION_REQUEST`, `error_type: no_deletion_request`).
|
|
4261
|
+
content:
|
|
4262
|
+
application/json:
|
|
4263
|
+
schema:
|
|
4264
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4265
|
+
example:
|
|
4266
|
+
success: false
|
|
4267
|
+
error: "NO_DELETION_REQUEST"
|
|
4268
|
+
error_type: "no_deletion_request"
|
|
4269
|
+
'410':
|
|
4270
|
+
description: |
|
|
4271
|
+
The 30-day grace period has expired and the deletion can no
|
|
4272
|
+
longer be cancelled (`error: GRACE_PERIOD_EXPIRED`,
|
|
4273
|
+
`error_type: grace_period_expired`). **This is the expiry
|
|
4274
|
+
signal** — see also the `account_deletion_expired` error code.
|
|
4275
|
+
content:
|
|
4276
|
+
application/json:
|
|
4277
|
+
schema:
|
|
4278
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4279
|
+
example:
|
|
4280
|
+
success: false
|
|
4281
|
+
error: "GRACE_PERIOD_EXPIRED"
|
|
4282
|
+
error_type: "grace_period_expired"
|
|
4283
|
+
'401':
|
|
4284
|
+
description: No authenticated principal.
|
|
4285
|
+
content:
|
|
4286
|
+
application/json:
|
|
4287
|
+
schema:
|
|
4288
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4289
|
+
example:
|
|
4290
|
+
success: false
|
|
4291
|
+
error: "AUTHENTICATION_REQUIRED"
|
|
4292
|
+
error_type: "authentication_required"
|
|
4293
|
+
message: "Authentication required."
|
|
4294
|
+
'404':
|
|
4295
|
+
description: |
|
|
4296
|
+
The authenticated principal no longer resolves to a stored user
|
|
4297
|
+
(`error: USER_NOT_FOUND`).
|
|
4298
|
+
content:
|
|
4299
|
+
application/json:
|
|
4300
|
+
schema:
|
|
4301
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4302
|
+
example:
|
|
4303
|
+
success: false
|
|
4304
|
+
error: "USER_NOT_FOUND"
|
|
4305
|
+
'429':
|
|
4306
|
+
description: |
|
|
4307
|
+
Rate limit exceeded — the cancel path has its own per-user hourly
|
|
4308
|
+
limiter, separate from the deletion-request limiter. Carries a
|
|
4309
|
+
`Retry-After` response header.
|
|
4310
|
+
headers:
|
|
4311
|
+
Retry-After:
|
|
4312
|
+
description: Seconds to wait before retrying. Delta-seconds (RFC 9110).
|
|
4313
|
+
schema:
|
|
4314
|
+
type: integer
|
|
4315
|
+
minimum: 0
|
|
4316
|
+
example: 60
|
|
4317
|
+
content:
|
|
4318
|
+
application/json:
|
|
4319
|
+
schema:
|
|
4320
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4321
|
+
|
|
4322
|
+
/api/auth/account/export:
|
|
4323
|
+
get:
|
|
4324
|
+
summary: Export the authenticated user's data (GDPR)
|
|
4325
|
+
description: |
|
|
4326
|
+
Returns the account's stored data as JSON: `profile`, `uploads`,
|
|
4327
|
+
`workflows`, `api_keys` and `billing`, plus an `exported_at`
|
|
4328
|
+
timestamp.
|
|
4329
|
+
|
|
4330
|
+
**The response carries the account's full PII**, so the server sets
|
|
4331
|
+
`Cache-Control: no-store` — **not** merely `no-cache`. A client MUST
|
|
4332
|
+
NOT write this payload to shared or persistent storage.
|
|
4333
|
+
|
|
4334
|
+
Independent of the deletion flow: exporting neither starts nor
|
|
4335
|
+
cancels a deletion.
|
|
4336
|
+
operationId: exportAccountData
|
|
4337
|
+
security: [{bearerAuth: []}, {sessionAuth: []}] # required (authenticated principal)
|
|
4338
|
+
x-identity-scoped: true # identity-bound (caller's own data)
|
|
4339
|
+
tags:
|
|
4340
|
+
- Auth
|
|
4341
|
+
responses:
|
|
4342
|
+
'200':
|
|
4343
|
+
description: |
|
|
4344
|
+
The account's exported data. The per-section payload shapes are
|
|
4345
|
+
**deliberately not pinned here** — they are a data dump for the
|
|
4346
|
+
account holder, not an integration surface, and pinning them
|
|
4347
|
+
would freeze internal record shapes into this contract.
|
|
4348
|
+
headers:
|
|
4349
|
+
Cache-Control:
|
|
4350
|
+
description: Always `no-store` — the payload carries full PII.
|
|
4351
|
+
schema:
|
|
4352
|
+
type: string
|
|
4353
|
+
example: "no-store"
|
|
4354
|
+
content:
|
|
4355
|
+
application/json:
|
|
4356
|
+
schema:
|
|
4357
|
+
type: object
|
|
4358
|
+
additionalProperties: false
|
|
4359
|
+
required:
|
|
4360
|
+
- success
|
|
4361
|
+
- data
|
|
4362
|
+
properties:
|
|
4363
|
+
success:
|
|
4364
|
+
type: boolean
|
|
4365
|
+
enum: [true]
|
|
4366
|
+
data:
|
|
4367
|
+
type: object
|
|
4368
|
+
required:
|
|
4369
|
+
- exported_at
|
|
4370
|
+
- profile
|
|
4371
|
+
properties:
|
|
4372
|
+
exported_at:
|
|
4373
|
+
type: string
|
|
4374
|
+
format: date-time
|
|
4375
|
+
profile:
|
|
4376
|
+
type: object
|
|
4377
|
+
uploads:
|
|
4378
|
+
type: array
|
|
4379
|
+
items:
|
|
4380
|
+
type: object
|
|
4381
|
+
workflows:
|
|
4382
|
+
type: array
|
|
4383
|
+
items:
|
|
4384
|
+
type: object
|
|
4385
|
+
api_keys:
|
|
4386
|
+
type: array
|
|
4387
|
+
items:
|
|
4388
|
+
type: object
|
|
4389
|
+
billing:
|
|
4390
|
+
type: object
|
|
4391
|
+
'401':
|
|
4392
|
+
description: No authenticated principal.
|
|
4393
|
+
content:
|
|
4394
|
+
application/json:
|
|
4395
|
+
schema:
|
|
4396
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4397
|
+
example:
|
|
4398
|
+
success: false
|
|
4399
|
+
error: "AUTHENTICATION_REQUIRED"
|
|
4400
|
+
error_type: "authentication_required"
|
|
4401
|
+
message: "Authentication required."
|
|
4402
|
+
'404':
|
|
4403
|
+
description: |
|
|
4404
|
+
The authenticated principal no longer resolves to a stored user
|
|
4405
|
+
(`error: USER_NOT_FOUND`).
|
|
4406
|
+
content:
|
|
4407
|
+
application/json:
|
|
4408
|
+
schema:
|
|
4409
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4410
|
+
example:
|
|
4411
|
+
success: false
|
|
4412
|
+
error: "USER_NOT_FOUND"
|
|
4413
|
+
'429':
|
|
4414
|
+
description: |
|
|
4415
|
+
Data-export rate limit reached. Carries a `Retry-After` response
|
|
4416
|
+
header.
|
|
4417
|
+
headers:
|
|
4418
|
+
Retry-After:
|
|
4419
|
+
description: Seconds to wait before retrying. Delta-seconds (RFC 9110).
|
|
4420
|
+
schema:
|
|
4421
|
+
type: integer
|
|
4422
|
+
minimum: 0
|
|
4423
|
+
example: 60
|
|
4424
|
+
content:
|
|
4425
|
+
application/json:
|
|
4426
|
+
schema:
|
|
4427
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
4428
|
+
|
|
3868
4429
|
/api/auth/confirm-email-change:
|
|
3869
4430
|
post:
|
|
3870
4431
|
summary: Confirm a pending email-address change
|
|
@@ -5054,6 +5615,18 @@ paths:
|
|
|
5054
5615
|
operationId: createBillingCheckoutSession
|
|
5055
5616
|
security: [{bearerAuth: []}, {sessionAuth: []}] # required (IS_AUTHENTICATED_FULLY; anonymous/partial sessions → 401)
|
|
5056
5617
|
x-identity-scoped: true # the checkout session is created for the authenticated caller
|
|
5618
|
+
# DOWNGRADE, and it clears standing policies 3 and 4 by MEASUREMENT
|
|
5619
|
+
# rather than by absence of evidence: e2e drove this endpoint on staging
|
|
5620
|
+
# 2026-08-11 and got 422 `feature_not_available` with
|
|
5621
|
+
# `availability: planned`, WITH CONTROLS — unauthenticated gives 401 and
|
|
5622
|
+
# GET gives 405, so the 422 is the feature gate and not a bad payload or
|
|
5623
|
+
# a missing route. api confirmed `STRIPE_CHECKOUT_ENABLED=false` and five
|
|
5624
|
+
# empty price IDs on the live task definition.
|
|
5625
|
+
#
|
|
5626
|
+
# Flipping this back to `stable` is an UPGRADE and is covered by the
|
|
5627
|
+
# standing freeze (hub, 2026-08-11): no availability upgrade to `stable`
|
|
5628
|
+
# before launch without an explicit per-flip ruling.
|
|
5629
|
+
x-availability: planned
|
|
5057
5630
|
tags:
|
|
5058
5631
|
- Billing
|
|
5059
5632
|
requestBody:
|
|
@@ -6620,6 +7193,138 @@ components:
|
|
|
6620
7193
|
$ref: '#/components/schemas/AccountLimitEntry'
|
|
6621
7194
|
max_total_input_size_bytes:
|
|
6622
7195
|
$ref: '#/components/schemas/AccountLimitEntry'
|
|
7196
|
+
max_duration_seconds:
|
|
7197
|
+
# OPTIONAL in this expand step; NOT in `required` above until
|
|
7198
|
+
# api emits it. Unit is SECONDS — carried by the key name, per
|
|
7199
|
+
# AccountLimitEntry.
|
|
7200
|
+
$ref: '#/components/schemas/AccountLimitEntry'
|
|
7201
|
+
|
|
7202
|
+
MediaCategory:
|
|
7203
|
+
type: string
|
|
7204
|
+
enum: [image, video, audio, document]
|
|
7205
|
+
description: |
|
|
7206
|
+
Coarse input media family, as used by the tier-default surface.
|
|
7207
|
+
**Not** a MIME type and **not** an operation `mime_group` — those are
|
|
7208
|
+
finer-grained and live in the operation schemas. This vocabulary
|
|
7209
|
+
exists so a client can filter a file picker without enumerating MIMEs.
|
|
7210
|
+
|
|
7211
|
+
TierDefaults:
|
|
7212
|
+
type: object
|
|
7213
|
+
additionalProperties: false
|
|
7214
|
+
description: |
|
|
7215
|
+
The **published default limits**, readable by an ANONYMOUS caller.
|
|
7216
|
+
|
|
7217
|
+
**Why this exists separately from `GET /api/v2/account/limits`:** that
|
|
7218
|
+
endpoint is per-account and override-aware, so it requires auth and
|
|
7219
|
+
returns `401` to an anonymous caller — **correctly**, because
|
|
7220
|
+
`effective` / `tier_default` / `overridden` is meaningless without an
|
|
7221
|
+
account. What a logged-out visitor needs is the **tier defaults**,
|
|
7222
|
+
which are not per-account. This publishes AS DATA what the `UserTier`
|
|
7223
|
+
description already publishes as prose.
|
|
7224
|
+
|
|
7225
|
+
**The server is authoritative for the values.** This contract declares
|
|
7226
|
+
the SHAPE; the numbers are computed per environment and per tier
|
|
7227
|
+
model, and a client MUST read them here rather than hard-coding a
|
|
7228
|
+
table (the drift this field exists to end).
|
|
7229
|
+
required:
|
|
7230
|
+
- media_categories
|
|
7231
|
+
- by_audience
|
|
7232
|
+
properties:
|
|
7233
|
+
media_categories:
|
|
7234
|
+
type: array
|
|
7235
|
+
minItems: 1
|
|
7236
|
+
uniqueItems: true
|
|
7237
|
+
items:
|
|
7238
|
+
$ref: '#/components/schemas/MediaCategory'
|
|
7239
|
+
description: |
|
|
7240
|
+
The input media families available **to every audience,
|
|
7241
|
+
including anonymous**. Declared ONCE, not per-tier, because it
|
|
7242
|
+
does not vary — hub decision 25 made audio universal, and there
|
|
7243
|
+
is now no tier boundary at which the category axis changes.
|
|
7244
|
+
|
|
7245
|
+
⚠️ **Deliberately NOT a per-audience allow-list.** A structure
|
|
7246
|
+
with one row per tier, every row identical, is a gate whose every
|
|
7247
|
+
row is open — it reads as an entitlement mechanism while
|
|
7248
|
+
encoding no entitlement, and the next reader maintains it as
|
|
7249
|
+
though it did. If a future tier DOES restrict categories, this
|
|
7250
|
+
field moves into `by_audience` in a deliberate change, and that
|
|
7251
|
+
change is where the restriction gets argued.
|
|
7252
|
+
by_audience:
|
|
7253
|
+
type: object
|
|
7254
|
+
additionalProperties: false
|
|
7255
|
+
description: |
|
|
7256
|
+
The limits that genuinely DO vary, keyed by audience. Contains
|
|
7257
|
+
only axes with real variance; an axis that is uniform belongs
|
|
7258
|
+
beside `media_categories`, not here.
|
|
7259
|
+
|
|
7260
|
+
**`anonymous` is a key here but deliberately NOT a `UserTier`
|
|
7261
|
+
value.** `UserTier` is a subscription tier and anonymous is the
|
|
7262
|
+
ABSENCE of one — putting it in that enum would place a
|
|
7263
|
+
non-subscription value inside the ordering that drives upgrade
|
|
7264
|
+
prompts (`free < pro < max < enterprise`), where it has no
|
|
7265
|
+
position.
|
|
7266
|
+
⚠️ **And keeping them distinct is not pedantry — the conflation
|
|
7267
|
+
has already shipped once.** This endpoint's `user_tier`
|
|
7268
|
+
description used to say anonymous callers "receive the `free`
|
|
7269
|
+
tier baseline view", which became false the moment the two were
|
|
7270
|
+
allowed to differ. **A vocabulary that cannot express the
|
|
7271
|
+
difference invites prose asserting they are the same.**
|
|
7272
|
+
required:
|
|
7273
|
+
- anonymous
|
|
7274
|
+
- free
|
|
7275
|
+
- pro
|
|
7276
|
+
- max
|
|
7277
|
+
- enterprise
|
|
7278
|
+
properties:
|
|
7279
|
+
anonymous:
|
|
7280
|
+
$ref: '#/components/schemas/TierDefaultLimits'
|
|
7281
|
+
free:
|
|
7282
|
+
$ref: '#/components/schemas/TierDefaultLimits'
|
|
7283
|
+
pro:
|
|
7284
|
+
$ref: '#/components/schemas/TierDefaultLimits'
|
|
7285
|
+
max:
|
|
7286
|
+
$ref: '#/components/schemas/TierDefaultLimits'
|
|
7287
|
+
enterprise:
|
|
7288
|
+
$ref: '#/components/schemas/TierDefaultLimits'
|
|
7289
|
+
|
|
7290
|
+
TierDefaultLimits:
|
|
7291
|
+
type: object
|
|
7292
|
+
additionalProperties: false
|
|
7293
|
+
description: |
|
|
7294
|
+
One audience's default limits. **Defaults, not entitlements** — a
|
|
7295
|
+
specific account may carry an override, which only
|
|
7296
|
+
`GET /api/v2/account/limits` can report.
|
|
7297
|
+
required:
|
|
7298
|
+
- max_upload_size_bytes
|
|
7299
|
+
- max_duration_seconds
|
|
7300
|
+
properties:
|
|
7301
|
+
max_upload_size_bytes:
|
|
7302
|
+
type: integer
|
|
7303
|
+
format: int64
|
|
7304
|
+
minimum: 1
|
|
7305
|
+
description: |
|
|
7306
|
+
Per-FILE upload cap. Same axis as
|
|
7307
|
+
`AccountLimits.limits.max_upload_size_bytes`.
|
|
7308
|
+
|
|
7309
|
+
⚠️ **A client MUST NOT treat this as the only size bound.** The
|
|
7310
|
+
per-operation processing ceilings (`max_input_size_bytes` in the
|
|
7311
|
+
operation schemas) are a **different axis and a different
|
|
7312
|
+
number**, and can be SMALLER than this cap — an upload that
|
|
7313
|
+
succeeds may still be rejected at operation time. A picker that
|
|
7314
|
+
shows one number without the other will let a user pick a file
|
|
7315
|
+
the product cannot process.
|
|
7316
|
+
max_duration_seconds:
|
|
7317
|
+
type: [integer, "null"]
|
|
7318
|
+
minimum: 0
|
|
7319
|
+
description: |
|
|
7320
|
+
Per-upload duration cap for time-based media. `null` where the
|
|
7321
|
+
audience has no duration cap.
|
|
7322
|
+
|
|
7323
|
+
⚠️ **DISTINCT from `processing_class.short_form.max_input_duration`
|
|
7324
|
+
(`PT5M`) in the operation schemas, which it may numerically
|
|
7325
|
+
equal.** That is the short-form/long-form PROCESSING boundary and
|
|
7326
|
+
applies to every audience; this is an entitlement. Two concepts,
|
|
7327
|
+
one integer — read this one for entitlement.
|
|
6623
7328
|
|
|
6624
7329
|
AccountLimitEntry:
|
|
6625
7330
|
type: object
|
|
@@ -6638,14 +7343,16 @@ components:
|
|
|
6638
7343
|
type: integer
|
|
6639
7344
|
minimum: 1
|
|
6640
7345
|
description: |
|
|
6641
|
-
The cap in force for this account
|
|
6642
|
-
|
|
7346
|
+
The cap in force for this account (`override ?? tier_default`),
|
|
7347
|
+
**in this limit's own unit** — bytes for the `*_bytes` keys,
|
|
7348
|
+
seconds for the `*_seconds` keys. **The unit is carried by the
|
|
7349
|
+
key name, not by this field.**
|
|
6643
7350
|
tier_default:
|
|
6644
7351
|
type: integer
|
|
6645
7352
|
minimum: 1
|
|
6646
7353
|
description: |
|
|
6647
|
-
The tier's default cap for this limit, in
|
|
6648
|
-
via the tier model).
|
|
7354
|
+
The tier's default cap for this limit, in the same unit as
|
|
7355
|
+
`effective` (already public via the tier model).
|
|
6649
7356
|
overridden:
|
|
6650
7357
|
type: boolean
|
|
6651
7358
|
description: |
|
|
@@ -10742,9 +11449,43 @@ components:
|
|
|
10742
11449
|
- processing_plan
|
|
10743
11450
|
- warnings
|
|
10744
11451
|
- created_at
|
|
11452
|
+
- anonymous
|
|
10745
11453
|
properties:
|
|
10746
11454
|
workflow_id:
|
|
10747
11455
|
$ref: '#/components/schemas/UuidV7'
|
|
11456
|
+
anonymous:
|
|
11457
|
+
type: boolean
|
|
11458
|
+
readOnly: true
|
|
11459
|
+
# REQUIRED and NOT nullable, deliberately: absence must be
|
|
11460
|
+
# STRUCTURALLY IMPOSSIBLE rather than merely discouraged. A field a
|
|
11461
|
+
# client is told to rely on, which can be missing, is a field the
|
|
11462
|
+
# client will write a fallback for — and the fallback here is the
|
|
11463
|
+
# exact inference this field exists to replace.
|
|
11464
|
+
#
|
|
11465
|
+
# END OF LIFE, recorded now while it costs nothing: this is a boolean
|
|
11466
|
+
# because there are exactly TWO creation modes today. If a third ever
|
|
11467
|
+
# appears (service account, delegated key), THIS FIELD IS AT END OF
|
|
11468
|
+
# LIFE and the fix is an enum — do NOT add a second boolean beside it.
|
|
11469
|
+
# Two booleans encoding three states is how a field stops being
|
|
11470
|
+
# answerable. Building the enum today would be premature; the marker
|
|
11471
|
+
# is not.
|
|
11472
|
+
description: |
|
|
11473
|
+
Whether this workflow was created **without an owning account**.
|
|
11474
|
+
**Always present.**
|
|
11475
|
+
|
|
11476
|
+
Clients MUST use this field to determine anonymity and **MUST NOT
|
|
11477
|
+
infer it from the presence or absence of `cap`.** That inference
|
|
11478
|
+
was licensed by this contract's own earlier wording, was correct
|
|
11479
|
+
when written, and is being withdrawn: `cap` is scheduled to become
|
|
11480
|
+
present for owned workflows too
|
|
11481
|
+
([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)), at which point any
|
|
11482
|
+
client deriving ownership from it silently misclassifies every
|
|
11483
|
+
authenticated workflow.
|
|
11484
|
+
|
|
11485
|
+
This field ships FIRST and alone, ahead of that change, so no
|
|
11486
|
+
consumer has to be correct at the same instant a producer changes
|
|
11487
|
+
behaviour.
|
|
11488
|
+
example: false
|
|
10748
11489
|
status:
|
|
10749
11490
|
$ref: '#/components/schemas/WorkflowStatus'
|
|
10750
11491
|
created_at:
|
|
@@ -10840,13 +11581,27 @@ components:
|
|
|
10840
11581
|
- "null"
|
|
10841
11582
|
readOnly: true
|
|
10842
11583
|
description: |
|
|
10843
|
-
Per-workflow capability token (plaintext)
|
|
10844
|
-
|
|
10845
|
-
authorizes reads of this workflow without a session. ABSENT for
|
|
10846
|
-
authenticated creates (the session authorizes those). Like
|
|
11584
|
+
Per-workflow capability token (plaintext) — the bearer that
|
|
11585
|
+
authorizes reads of this workflow without a session. Like
|
|
10847
11586
|
`webhook_secret`, this is the only time it is exposed; it does not
|
|
10848
11587
|
appear in status queries.
|
|
10849
11588
|
|
|
11589
|
+
**Do NOT use the presence or absence of this field to determine
|
|
11590
|
+
whether a workflow is anonymous — read `anonymous` instead.** Today
|
|
11591
|
+
`cap` is emitted only for anonymous (null-owner) creates and is
|
|
11592
|
+
absent for authenticated ones, so the inference currently *works*;
|
|
11593
|
+
that is precisely why it needs stating. It is scheduled to stop
|
|
11594
|
+
being true ([`H9dOu7kZ`](https://trello.com/c/H9dOu7kZ)): `cap` will
|
|
11595
|
+
be minted for owned workflows so that a logged-in caller can
|
|
11596
|
+
authorize a read against the separate stream host, where a session
|
|
11597
|
+
cookie does not reach.
|
|
11598
|
+
|
|
11599
|
+
The prohibition lives here, in the contract text, rather than only
|
|
11600
|
+
in a consumer's code review, because a consumer that encoded the
|
|
11601
|
+
old wording accurately was reading this contract correctly — that
|
|
11602
|
+
is the contract working, and it is this text's job to withdraw the
|
|
11603
|
+
licence.
|
|
11604
|
+
|
|
10850
11605
|
Pass it as the `X-Workflow-Capability` request header on
|
|
10851
11606
|
`GET /api/workflows/{id}/status` / `/downloads` / `/events`. A wrong
|
|
10852
11607
|
or missing cap on a null-owner workflow returns **404**
|
|
@@ -11289,11 +12044,50 @@ components:
|
|
|
11289
12044
|
|
|
11290
12045
|
CodegenUploadPlaceholder:
|
|
11291
12046
|
type: object
|
|
12047
|
+
# ⚠️ THIS DESCRIPTION USED TO SAY "the original upload is
|
|
12048
|
+
# consumed/expired". THAT WAS FALSE, and it contradicted this contract's
|
|
12049
|
+
# own schema: `UploadSource` accepts `{type: upload, file_id}` at
|
|
12050
|
+
# workflow-create, so a client reading the schema builds file reuse while
|
|
12051
|
+
# a client reading this sentence concludes it cannot work. Both shipped,
|
|
12052
|
+
# in the same published artefact.
|
|
12053
|
+
#
|
|
12054
|
+
# Corrected 2026-08-12 from api's code read: NOTHING marks an upload
|
|
12055
|
+
# consumed — no column, no flag, no state — nothing deletes it when a
|
|
12056
|
+
# workflow completes, and the `uploads` row is independent of workflow
|
|
12057
|
+
# lifecycle. An upload is REUSABLE.
|
|
12058
|
+
#
|
|
12059
|
+
# ⚠️ THE UPLOAD LIFETIME IS STILL UNDECLARED AND IS DELIBERATELY NOT
|
|
12060
|
+
# INVENTED HERE. The only true sense in which an upload "expires" is the
|
|
12061
|
+
# stored bytes ageing out of the input bucket, which is a storage
|
|
12062
|
+
# lifecycle and not currently a contract concept at all. That number is
|
|
12063
|
+
# terraform's measurement; it has been relayed to this session as 3 days
|
|
12064
|
+
# and NEITHER api NOR this session has verified it, so it is not written
|
|
12065
|
+
# into the contract. Asked of terraform 2026-08-12; lands as a follow-up
|
|
12066
|
+
# if and only if they confirm it AND confirm staging and prod agree —
|
|
12067
|
+
# this contract has no environment axis, so a lifetime true in one
|
|
12068
|
+
# environment and false in the other cannot be expressed honestly.
|
|
11292
12069
|
description: |
|
|
11293
12070
|
Stand-in for a user UPLOAD source in a replay projection — descriptive
|
|
11294
|
-
metadata so a consumer can re-prompt for an equivalent file.
|
|
11295
|
-
bytes or storage key
|
|
11296
|
-
|
|
12071
|
+
metadata so a consumer can re-prompt for an equivalent file. Carries
|
|
12072
|
+
NOT the bytes or the storage key, only the descriptive fields below.
|
|
12073
|
+
|
|
12074
|
+
**This placeholder is about what the PROJECTION carries, not about
|
|
12075
|
+
whether the upload still exists.** An upload is **not** consumed by
|
|
12076
|
+
being used: nothing marks it spent, and referencing the same `file_id`
|
|
12077
|
+
again at `POST /api/workflows` via `UploadSource` is valid — that is
|
|
12078
|
+
how a caller re-runs a file with different settings, or runs a
|
|
12079
|
+
different operation on it.
|
|
12080
|
+
|
|
12081
|
+
The projection omits the `file_id` because a replay snippet is meant to
|
|
12082
|
+
be re-runnable by **any** reader, including one who never held that
|
|
12083
|
+
upload; it is a code sample, not a resume token.
|
|
12084
|
+
|
|
12085
|
+
⚠️ **How long an upload remains referenceable is NOT declared by this
|
|
12086
|
+
contract.** The stored bytes are subject to an input-bucket retention
|
|
12087
|
+
lifecycle that this spec does not state, so a caller MUST be prepared
|
|
12088
|
+
for a `file_id` that was valid to stop being usable, and MUST NOT infer
|
|
12089
|
+
a lifetime from the workflow `expires_at` TTL — **those are different
|
|
12090
|
+
clocks on different objects, and the workflow one is longer.**
|
|
11297
12091
|
required:
|
|
11298
12092
|
- kind
|
|
11299
12093
|
properties:
|
|
@@ -12670,12 +13464,25 @@ components:
|
|
|
12670
13464
|
- type: string
|
|
12671
13465
|
- type: 'null'
|
|
12672
13466
|
example: "production"
|
|
13467
|
+
tier_defaults:
|
|
13468
|
+
# Anonymous-readable. Declared here rather than on
|
|
13469
|
+
# /api/v2/account/limits because that surface is per-account and
|
|
13470
|
+
# override-aware, so it 401s an anonymous caller — correctly.
|
|
13471
|
+
$ref: '#/components/schemas/TierDefaults'
|
|
12673
13472
|
user_tier:
|
|
12674
13473
|
description: |
|
|
12675
13474
|
Tier of the calling user. Anonymous (unauthenticated) callers
|
|
12676
|
-
see `null` on the wire
|
|
12677
|
-
|
|
12678
|
-
|
|
13475
|
+
see `null` on the wire. Used by clients to render upgrade
|
|
13476
|
+
prompts on tier-gated features.
|
|
13477
|
+
|
|
13478
|
+
⚠️ **`null` does NOT mean "the free tier".** This description
|
|
13479
|
+
previously said anonymous callers "receive the `free` tier
|
|
13480
|
+
baseline view"; that stopped being true when the anonymous and
|
|
13481
|
+
free limits were allowed to differ (hub decisions 22 + 25 —
|
|
13482
|
+
anonymous carries a shorter duration entitlement than a
|
|
13483
|
+
signed-in free user). **Anonymous is the ABSENCE of a tier, not
|
|
13484
|
+
the lowest one.** Read `tier_defaults.by_audience.anonymous`
|
|
13485
|
+
for what an unauthenticated caller may actually do.
|
|
12679
13486
|
oneOf:
|
|
12680
13487
|
- $ref: '#/components/schemas/UserTier'
|
|
12681
13488
|
- type: 'null'
|