---
title: "Register a voice imported from a URL"
method: POST
path: "/v1/models/imported"
tags: ["models"]
---

# Register a voice imported from a URL

`POST /v1/models/imported`

## Request

- Base URL: `https://api.ditto.audio` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ditto.audio/v1/models/imported`
- Auth: HTTP bearer

Stores only the source URL, the resolved file list and provenance. Re-posting an existing sourceUrl refreshes that record instead of creating a duplicate.

## Request body

- CreateImportedVoiceDto
  - `sourceUrl` string, required
  - `name` string, required
  - `engine` string
  - `files` ImportedVoiceFileDto[]
    - `fileName` string, required
    - `role` string, required: model | index | config | sidecar | other
    - `sizeBytes` number
    - `url` string: Direct byte URL (may expire; sourceUrl is the fallback).
    - `md5` string: Upstream md5, when the source published one.
    - `insideArchive` object: Set when the file is a member of a zip: { archiveUrl, memberPath }.
  - `sourceMeta` object: Provenance: page title/author/license/pageUrl.
  - `via` string[]: Locator chain that resolved the URL.
  - `sampleRate` number
  - `encoderBaseSlug` string: Catalog slug whose HuBERT/RMVPE encoders this import overlays.
  - `hasIndex` boolean: Whether a FAISS/npy retrieval index came with the model.

## Response `201`

---

[API](https://skmtc.dev/ditto/apis/ditto-audio-api.md) · [All operations](https://skmtc.dev/ditto/apis/ditto-audio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ditto/apis/ditto-audio-api/revisions/30c8d7c218da?raw)
