API DocsAI Model APIsAudioFish AudioModel Management

Create Model

Upload reference audio to create a custom TTS voice model. Synchronous endpoint: the model is ready for speech synthesis immediately after creation.

Upload reference audio to create a custom TTS voice model. On success the response includes model details; use _id as reference_id on the Text to Speech endpoint.

Synchronous endpoint: this request uploads files. For regular REST calls use multipart/form-data and let the HTTP client set the multipart Content-Type boundary automatically. train_mode only supports fast; the model is ready immediately after creation.

Base URL

  • https://api.autorouter.top — Production

Authentication

BearerAuth: http (bearer) Authenticate using a Bearer Token. Format: Authorization: Bearer sk-xxxxxx

Endpoints

POST /fishaudio/model

Create a voice model

Upload reference audio and model metadata; the response returns the new model details.

Because files are uploaded, use multipart/form-data and do not set the boundary manually.

Request Body

Content-Type: multipart/form-data

Example:

{
  "type": "tts",
  "title": "My Voice",
  "description": "Cloned from a studio sample",
  "visibility": "private",
  "train_mode": "fast",
  "voices": ["sample.wav"],
  "texts": ["Hello, this is a studio sample."],
  "tags": ["custom", "english"],
  "enhance_audio_quality": true,
  "generate_sample": false
}

Properties:

NameTypeRequiredDescription
typestringYesModel type, always tts (text to speech)
titlestringYesModel title or name
train_modestringYesTraining mode, always fast. TTS models are ready immediately after creation
voicesfile | file[]YesReference audio used to tune the model, 1–20 files
descriptionstring | nullNoModel description
cover_imagefile | nullNoCover image. Required if the model is public
visibilitystringNoVisibility. Default private
textsstring | string[] | nullNoTranscripts corresponding to voices; if omitted, ASR is run on the audio
voice_design_signaturesstring | string[] | nullNoSignatures from Voice Design candidates, one per voice in the same order
tagsstring | string[] | nullNoModel tags
enhance_audio_qualitybooleanNoWhether to enhance audio quality. Default true
generate_samplebooleanNoWhether to generate default preview text. Default false

visibilitystring(Optional)

Model visibility. Default private.

  • private: visible only to the creator
  • unlist: anyone with the link can access
  • public: shown publicly. API requests with public are downgraded to private; use the web publish flow to publish publicly

Public models require cover_image.

voicesfile | file[](Required)

Reference audio files for tuning. Minimum 1, maximum 20.

  • Single file: field name voices, upload one audio file
  • Multiple files: repeat the voices field, one reference clip per file

If texts is omitted, the server runs ASR on the audio. Providing accurate transcripts improves clone quality.

textsstring | string[] | null(Optional)

Transcripts corresponding to voices, up to 20 items. Order must match voices.

  • If omitted, the server runs ASR on the audio
  • If provided, use the exact spoken text; accuracy directly affects clone quality

voice_design_signaturesstring | string[] | null(Optional)

Signatures from /v1/voice-design candidates, matching voices in count and order.

When every uploaded voice verifies, the model is stamped source=voice_design; an invalid signature rejects the request.

Responses

201: Created successfully

Content-Type: application/json

401: Unauthorized

Content-Type: application/json

503: Service overloaded

Content-Type: application/json

Request Example

curl -X POST "https://api.autorouter.top/fishaudio/model" \
  -H "Authorization: Bearer sk-xxxxxx" \
  -F "type=tts" \
  -F "title=My Voice" \
  -F "description=Cloned from a studio sample" \
  -F "visibility=private" \
  -F "train_mode=fast" \
  -F "voices=@/path/to/sample.wav" \
  -F "texts=Hello, this is a studio sample." \
  -F "tags=custom" \
  -F "enhance_audio_quality=true"

Response Example

{
  "_id": "7f8a9b0c1d2e3f4a5b6c7d8e",
  "type": "tts",
  "title": "My Voice",
  "description": "Cloned from a studio sample",
  "cover_image": "",
  "train_mode": "fast",
  "state": "trained",
  "tags": ["custom"],
  "samples": [],
  "created_at": "2026-09-20T01:00:00.000Z",
  "updated_at": "2026-09-20T01:00:00.000Z",
  "languages": ["en"],
  "visibility": "private",
  "lock_visibility": false,
  "default_text": "",
  "source": null,
  "licensed": false,
  "like_count": 0,
  "mark_count": 0,
  "shared_count": 0,
  "task_count": 0,
  "liked": false,
  "marked": false,
  "unliked": false,
  "author": {
    "_id": "64a1b2c3d4e5f67890123456",
    "nickname": "creator",
    "avatar": "https://example.com/avatar.png"
  }
}

Response fields:

NameTypeDescription
_idstringModel ID, usable as TTS reference_id
typestringModel type. tts is text-to-speech; svc is singing voice conversion
titlestringModel title
descriptionstringModel description. Defaults to an empty string
cover_imagestringCover image URL. Defaults to empty
train_modestringTraining mode. fast is ready immediately after creation; full is full training
statestringState. Enum: created, training, trained, failed
tagsstring[]Tag list
samplesobject[]Preview samples. Defaults to an empty array
created_atstringCreated at, ISO 8601
updated_atstringUpdated at, ISO 8601
languagesstring[]Language list
visibilitystringVisibility. Enum: public, unlist, private
lock_visibilitybooleanWhether visibility is locked. Default false
dmca_taken_downboolean | nullWhether the model was taken down for DMCA
takedown_categorystring | nullTakedown category: dmca, policy
default_textstringDefault preview text
sourcestring | nullSource. May be voice_design when every uploaded voice verifies
licensedbooleanWhether this is a Fish Audio licensed voice
qualityobject | nullAudio quality evaluation
like_countintegerLike count
mark_countintegerMark count
shared_countintegerShare count
task_countintegerUsage count
likedbooleanWhether the current user liked it
markedbooleanWhether the current user marked it
unlikedbooleanWhether the current user unliked it
authorobjectAuthor information

authorobject(Required)

Author information.

_idstring(Required)

Author user ID.

nicknamestring(Required)

Author nickname.

avatarstring(Required)

Author avatar URL.

samplesobject[](Optional)

List of preview samples. Defaults to an empty array.

titlestring(Required)

Sample title.

textstring(Required)

Text corresponding to the sample.

task_idstring(Required)

Task ID that generated this sample.

audiostring(Required)

Sample audio URL.

Error Handling

HTTP 401 / 403 Auth Errors

  • 401 Unauthorized: API Key is invalid or expired
  • 403 Forbidden: API Key cannot access this model (check the token model allowlist)

HTTP 402 Insufficient Balance

Returns insufficient user quota. Top up in the AutoRouter console.

HTTP 503 Service Overloaded

The server is too busy to process the request. Please retry later.

On this page