openapi: 3.2.0 info: title: AutoContent Platform Voices API version: 1.0.0 description: First-class content Assets with prepaid USD billing. Generic document and video routes do not exist. servers: - url: https://api.autocontentapi.com/v1 tags: - name: Voices paths: /voices: get: operationId: listVoices summary: List compatible stock and Project Voices tags: - Voices security: - platformOAuth: [] - platformApiKey: [] x-required-scopes: - platform.read x-principal: oauth_or_api_key x-idempotency-required: false parameters: - name: cursor in: query required: false schema: type: string minLength: 1 maxLength: 4096 - name: limit in: query required: false schema: type: string pattern: ^(?:[1-9]|[1-9][0-9]|100)$ - name: project_id in: query required: true schema: type: string pattern: ^prj_[A-Za-z0-9_-]+$ - name: asset_type in: query required: false schema: type: string enum: - article - lead_magnet - ebook - slides - infographic - quiz - podcast_episode - short_video - explainer_video - launch_video - product_demo_video - ad_video - name: model in: query required: false schema: type: string minLength: 1 maxLength: 200 - name: language in: query required: false schema: type: string minLength: 2 maxLength: 255 format: bcp47 - name: kind in: query required: false schema: type: string enum: - stock - custom - name: status in: query required: false schema: type: string enum: - processing - ready - failed - revoked responses: '200': description: Successful response. content: application/json: schema: type: object additionalProperties: false required: - data - next_cursor properties: data: type: array items: $ref: '#/components/schemas/Voice' next_cursor: oneOf: - type: string minLength: 1 - type: 'null' default: $ref: '#/components/responses/AutoContentError' /voices/{id}: get: operationId: getVoice summary: Get a visible Voice and readiness state tags: - Voices security: - platformOAuth: [] - platformApiKey: [] x-required-scopes: - platform.read x-principal: oauth_or_api_key x-idempotency-required: false parameters: - name: id in: path required: true schema: type: string pattern: ^voice_[A-Za-z0-9_-]+$ responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/Voice' default: $ref: '#/components/responses/AutoContentError' delete: operationId: revokeVoice summary: Revoke a custom Project Voice tags: - Voices security: - platformOAuth: [] - platformApiKey: [] x-required-scopes: - platform.generate x-principal: oauth_or_api_key x-idempotency-required: false parameters: - name: id in: path required: true schema: type: string pattern: ^voice_[A-Za-z0-9_-]+$ responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/Voice' default: $ref: '#/components/responses/AutoContentError' components: schemas: ErrorEnvelope: type: object additionalProperties: false required: - error properties: error: $ref: '#/components/schemas/ErrorBody' ErrorBody: type: object additionalProperties: false required: - code - message - correlation_id - doc_url properties: code: type: string enum: - invalid_request - unknown_asset_type - invalid_asset_options - invalid_model_options - model_not_supported - model_retired - project_not_ready - project_limit_exceeded - provider_operation_limit_exceeded - source_not_ready - source_unreachable - source_paywalled - product_visual_required - no_qualified_trend - no_qualified_knowledge - input_resolution_failed - max_cost_exceeded - payment_required - content_loop_budget_exceeded - content_loop_limit_exceeded - idempotency_conflict - idempotency_in_progress - consent_required - voice_not_found - voice_not_ready - voice_not_supported - avatar_not_found - avatar_not_ready - avatar_not_supported - artifact_verification_failed - rate_limited - webhook_limit_exceeded - not_found - unauthorized - forbidden - internal_error message: type: string details: oneOf: - type: array items: $ref: '#/components/schemas/ErrorDetail' - type: object correlation_id: type: string pattern: ^corr_[A-Za-z0-9_-]+$ doc_url: type: string format: uri ErrorDetail: type: object additionalProperties: false required: - reason properties: field: type: string reason: type: string AssetType: type: string enum: - article - lead_magnet - ebook - slides - infographic - quiz - podcast_episode - short_video - explainer_video - launch_video - product_demo_video - ad_video Voice: type: object additionalProperties: false required: - id - project_id - display_name - kind - status - compatibility - created_at - error properties: id: type: string pattern: ^voice_[A-Za-z0-9_-]+$ project_id: oneOf: - type: string pattern: ^prj_[A-Za-z0-9_-]+$ - type: 'null' display_name: type: string minLength: 1 maxLength: 80 kind: type: string enum: - stock - custom status: type: string enum: - processing - ready - failed - revoked compatibility: type: array items: type: object additionalProperties: false required: - asset_type - model_id - language properties: asset_type: $ref: '#/components/schemas/AssetType' model_id: type: string minLength: 1 language: type: string minLength: 2 maxLength: 255 format: bcp47 created_at: oneOf: - type: string format: date-time - type: 'null' error: oneOf: - $ref: '#/components/schemas/ResourceError' - type: 'null' ResourceError: type: object additionalProperties: false required: - code - message properties: code: type: string minLength: 1 message: type: string minLength: 1 responses: AutoContentError: description: Normalized AutoContent error; provider payloads are never returned. headers: Retry-After: description: Whole seconds before retry when the error supplies a bounded retry time. schema: type: integer minimum: 1 content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' example: error: code: max_cost_exceeded message: Current price exceeds max_cost_usd. correlation_id: corr_42 doc_url: https://docs.autocontentapi.com/errors/max-cost-exceeded securitySchemes: platformOAuth: type: http scheme: bearer bearerFormat: Platform OAuth JWT platformApiKey: type: http scheme: bearer bearerFormat: acp_ Platform API key