{
  "aboutHtml": "<p>MAI-Voice-2.1-Flash는 빠른 음성 상호작용을 중심으로 설계된 Microsoft AI의 프롬프트 기반 텍스트 음성 변환 모델입니다. 제조사는 음성 어시스턴트, 고객 지원 대화, 전화 메뉴용으로 소개합니다. 23개 언어에서 자연스럽고 표현력 있는 음성을 생성하며 어조와 표현을 제어합니다. Flash는 실시간 응답에 중점을 둔 버전입니다. 별도 이름의 MAI-Voice-2.1은 긴 콘텐츠의 세밀한 표현과 충실도를 우선합니다.</p><h4>텍스트, 화자, 언어</h4><p>입력은 읽을 발화문과 선택한 목소리이며 선택적으로 SSML 표현 지시를 추가합니다. 관리형 목소리 목록은 화자, 로캘, 모델 버전을 구분합니다. Harper와 Grant는 언어별 항목이 있는 화자의 예입니다. 의도한 목표 언어 텍스트를 사용하고 적절한 로캘을 선택하세요. 준비된 영어 인사와 스페인어 설명은 각자의 문구가 있는 별도 발화 문단입니다.</p><p>모델 카드는 지원 언어 전반의 일관된 목소리 정체성과 대화용 다중 화자를 문서화합니다. 이는 현지화된 안내 전반에 하나의 알아볼 수 있는 내레이터가 필요한 애플리케이션이나 역할이 다른 짧은 대화에 도움이 됩니다. 대사를 의도한 화자에 명시적으로 배정하고 배정을 안정적으로 유지하세요. 오디오는 해당 대본을 읽은 결과이며 열린 질문으로부터 새로 작성한 답변이 아닙니다.</p><h4>어조와 말하기 스타일</h4><p>Microsoft는 SSML을 통한 문장 및 대화 차례 수준의 감정과 표현 제어를 설명합니다. 사용 가능한 스타일은 선택한 목소리에 따라 다릅니다. 관리형 목록에는 narrator, educational, customer_call_center 같은 작업 스타일과 특정 화자의 표현 스타일이 포함됩니다. 예를 들어 미국 Harper 항목에는 joyful와 relieved가 있습니다. 모든 화자가 같은 집합을 허용한다고 가정하지 말고 목소리에서 지원하는 스타일을 선택하세요.</p><p>실용적인 지원 문장은 “적절한 문서를 찾도록 도와드릴 수 있습니다. 제목을 말하거나 주제를 설명해 주세요.”입니다. 청취자가 행동할 수 있을 만큼 짧게 요청하고 상호작용에 맞는 차분하거나 격려하는 표현을 선택하세요. 학습 활동에서는 설명과 다음 질문을 별도 발화 단위로 작성하세요. 대본이 의도 변화를 명확히 하면 표현력이 의미를 뒷받침합니다.</p><h4>스트리밍과 오디오 전달</h4><p>Flash 모델 카드는 청취자가 응답 중에 끼어드는 상황을 처리하는 워크플로를 포함해 실시간 대화용 스트리밍 출력을 명시합니다. 애플리케이션은 오디오가 도착하는 대로 재생하고 끼어들기와 다음 차례를 조율할 수 있습니다. 따라서 모든 응답을 먼저 완전한 녹음으로 준비할 필요 없이 발화 메시지의 타이밍이 상호작용의 일부가 됩니다.</p><p>제조사는 합성 워크플로에서 출력 형식을 지정할 수 있게 합니다. 공개 예제는 24 kHz, 160 kbit/s 모노 MP3 파일을 생성합니다. 이는 하나의 문서화된 출력 설정이며 고정된 기본 형식 제약이 아닙니다. 의도한 재생 경로가 받는 오디오 표현 방식을 선택하고 결과 검토를 위해 화자와 발화 문구를 보관하세요.</p><h4>선택적인 참조 목소리 모드</h4><p>Microsoft의 사용자 지정 목소리 모드는 미세 조정 없이 5~60초 참조 클립에서 동의받은 화자에 맞출 수 있습니다. 참조가 생성된 연기에 영향을 주므로 모델 카드는 적당한 에너지의 자연스러운 대화체를 권장합니다. 이 모드에는 별도의 제조사 승인 및 녹음된 동의 절차가 있습니다. 사전 설정 라이브러리 목소리는 다른 준비 경로를 이룹니다.</p><p>브랜드 내레이터를 정의할 참조에는 깨끗하고 대표적인 문단을 사용하고 어떤 표현을 새 대본에 가져올지 정하세요. 사전 설정 음성에는 애플리케이션이 사용할 실제 이름, 명령, 목표 언어 문구를 준비하세요. 선택한 목소리로 문단을 들어 보고 대화 차례 사이의 전환을 살피세요. 유용한 결과는 의도적으로 선택한 화자, 명확한 텍스트, 청취자의 재생 환경에 맞는 오디오로 이루어진 표현력 있는 음성 상호작용입니다.</p>",
  "aboutText": "MAI-Voice-2.1-Flash는 빠른 음성 상호작용을 중심으로 설계된 Microsoft AI의 프롬프트 기반 텍스트 음성 변환 모델입니다. 제조사는 음성 어시스턴트, 고객 지원 대화, 전화 메뉴용으로 소개합니다. 23개 언어에서 자연스럽고 표현력 있는 음성을 생성하며 어조와 표현을 제어합니다. Flash는 실시간 응답에 중점을 둔 버전입니다. 별도 이름의 MAI-Voice-2.1은 긴 콘텐츠의 세밀한 표현과 충실도를 우선합니다.\n\n### 텍스트, 화자, 언어\n\n입력은 읽을 발화문과 선택한 목소리이며 선택적으로 SSML 표현 지시를 추가합니다. 관리형 목소리 목록은 화자, 로캘, 모델 버전을 구분합니다. Harper와 Grant는 언어별 항목이 있는 화자의 예입니다. 의도한 목표 언어 텍스트를 사용하고 적절한 로캘을 선택하세요. 준비된 영어 인사와 스페인어 설명은 각자의 문구가 있는 별도 발화 문단입니다.\n\n모델 카드는 지원 언어 전반의 일관된 목소리 정체성과 대화용 다중 화자를 문서화합니다. 이는 현지화된 안내 전반에 하나의 알아볼 수 있는 내레이터가 필요한 애플리케이션이나 역할이 다른 짧은 대화에 도움이 됩니다. 대사를 의도한 화자에 명시적으로 배정하고 배정을 안정적으로 유지하세요. 오디오는 해당 대본을 읽은 결과이며 열린 질문으로부터 새로 작성한 답변이 아닙니다.\n\n### 어조와 말하기 스타일\n\nMicrosoft는 SSML을 통한 문장 및 대화 차례 수준의 감정과 표현 제어를 설명합니다. 사용 가능한 스타일은 선택한 목소리에 따라 다릅니다. 관리형 목록에는 narrator, educational, customer_call_center 같은 작업 스타일과 특정 화자의 표현 스타일이 포함됩니다. 예를 들어 미국 Harper 항목에는 joyful와 relieved가 있습니다. 모든 화자가 같은 집합을 허용한다고 가정하지 말고 목소리에서 지원하는 스타일을 선택하세요.\n\n실용적인 지원 문장은 “적절한 문서를 찾도록 도와드릴 수 있습니다. 제목을 말하거나 주제를 설명해 주세요.”입니다. 청취자가 행동할 수 있을 만큼 짧게 요청하고 상호작용에 맞는 차분하거나 격려하는 표현을 선택하세요. 학습 활동에서는 설명과 다음 질문을 별도 발화 단위로 작성하세요. 대본이 의도 변화를 명확히 하면 표현력이 의미를 뒷받침합니다.\n\n### 스트리밍과 오디오 전달\n\nFlash 모델 카드는 청취자가 응답 중에 끼어드는 상황을 처리하는 워크플로를 포함해 실시간 대화용 스트리밍 출력을 명시합니다. 애플리케이션은 오디오가 도착하는 대로 재생하고 끼어들기와 다음 차례를 조율할 수 있습니다. 따라서 모든 응답을 먼저 완전한 녹음으로 준비할 필요 없이 발화 메시지의 타이밍이 상호작용의 일부가 됩니다.\n\n제조사는 합성 워크플로에서 출력 형식을 지정할 수 있게 합니다. 공개 예제는 24 kHz, 160 kbit/s 모노 MP3 파일을 생성합니다. 이는 하나의 문서화된 출력 설정이며 고정된 기본 형식 제약이 아닙니다. 의도한 재생 경로가 받는 오디오 표현 방식을 선택하고 결과 검토를 위해 화자와 발화 문구를 보관하세요.\n\n### 선택적인 참조 목소리 모드\n\nMicrosoft의 사용자 지정 목소리 모드는 미세 조정 없이 5~60초 참조 클립에서 동의받은 화자에 맞출 수 있습니다. 참조가 생성된 연기에 영향을 주므로 모델 카드는 적당한 에너지의 자연스러운 대화체를 권장합니다. 이 모드에는 별도의 제조사 승인 및 녹음된 동의 절차가 있습니다. 사전 설정 라이브러리 목소리는 다른 준비 경로를 이룹니다.\n\n브랜드 내레이터를 정의할 참조에는 깨끗하고 대표적인 문단을 사용하고 어떤 표현을 새 대본에 가져올지 정하세요. 사전 설정 음성에는 애플리케이션이 사용할 실제 이름, 명령, 목표 언어 문구를 준비하세요. 선택한 목소리로 문단을 들어 보고 대화 차례 사이의 전환을 살피세요. 유용한 결과는 의도적으로 선택한 화자, 명확한 텍스트, 청취자의 재생 환경에 맞는 오디오로 이루어진 표현력 있는 음성 상호작용입니다.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "e6fe44015f222e6e2a1c0c8b1e9e2d8b02a84075bc9085feb037b5d2f30b7f40",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ko",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Microsoft AI: MAI-Voice-2.1-Flash</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"닫기\">×</button></div><div class=\"idline\"><span>Microsoft AI /</span><code>microsoft/mai-voice-2.1-flash</code><button type=\"button\" id=\"copy-id\">ID 복사</button></div><nav class=\"card-jump-nav\" aria-label=\"모델 카드 섹션\"><button type=\"button\" data-card-jump=\"overview\">시작하기</button><button type=\"button\" data-card-jump=\"methods\">입력 및 메서드</button><button type=\"button\" data-card-jump=\"pricing\">요금</button><button type=\"button\" data-card-jump=\"examples\">예제</button><button type=\"button\" data-card-jump=\"results\">결과</button><button type=\"button\" data-card-jump=\"aliases\">별칭</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API 메서드\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|microsoft%2Fmai-voice-2.1-flash\">음성 합성</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">시작하기</h3><p class=\"mdesc-full\">Microsoft AI의 MAI-Voice-2.1-Flash는 대화형 음성 애플리케이션을 위해 23개 언어의 표현력 있는 음성을 생성합니다. 선별된 목소리 라이브러리를 제공하며 스트리밍, 다중 화자, 문장 수준의 표현 제어를 지원합니다.</p><dl class=\"card-io\" data-card-io><div><dt>허용 입력</dt><dd>텍스트</dd></div><div><dt>결과</dt><dd>오디오</dd></div></dl><details class=\"card-about\"><summary>모델 소개</summary><p class=\"note-s\" data-model-method-boundary>이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.</p><div class=\"mabout\" id=\"m-about\"><p>MAI-Voice-2.1-Flash는 빠른 음성 상호작용을 중심으로 설계된 Microsoft AI의 프롬프트 기반 텍스트 음성 변환 모델입니다. 제조사는 음성 어시스턴트, 고객 지원 대화, 전화 메뉴용으로 소개합니다. 23개 언어에서 자연스럽고 표현력 있는 음성을 생성하며 어조와 표현을 제어합니다. Flash는 실시간 응답에 중점을 둔 버전입니다. 별도 이름의 MAI-Voice-2.1은 긴 콘텐츠의 세밀한 표현과 충실도를 우선합니다.</p><h4>텍스트, 화자, 언어</h4><p>입력은 읽을 발화문과 선택한 목소리이며 선택적으로 SSML 표현 지시를 추가합니다. 관리형 목소리 목록은 화자, 로캘, 모델 버전을 구분합니다. Harper와 Grant는 언어별 항목이 있는 화자의 예입니다. 의도한 목표 언어 텍스트를 사용하고 적절한 로캘을 선택하세요. 준비된 영어 인사와 스페인어 설명은 각자의 문구가 있는 별도 발화 문단입니다.</p><p>모델 카드는 지원 언어 전반의 일관된 목소리 정체성과 대화용 다중 화자를 문서화합니다. 이는 현지화된 안내 전반에 하나의 알아볼 수 있는 내레이터가 필요한 애플리케이션이나 역할이 다른 짧은 대화에 도움이 됩니다. 대사를 의도한 화자에 명시적으로 배정하고 배정을 안정적으로 유지하세요. 오디오는 해당 대본을 읽은 결과이며 열린 질문으로부터 새로 작성한 답변이 아닙니다.</p><h4>어조와 말하기 스타일</h4><p>Microsoft는 SSML을 통한 문장 및 대화 차례 수준의 감정과 표현 제어를 설명합니다. 사용 가능한 스타일은 선택한 목소리에 따라 다릅니다. 관리형 목록에는 narrator, educational, customer_call_center 같은 작업 스타일과 특정 화자의 표현 스타일이 포함됩니다. 예를 들어 미국 Harper 항목에는 joyful와 relieved가 있습니다. 모든 화자가 같은 집합을 허용한다고 가정하지 말고 목소리에서 지원하는 스타일을 선택하세요.</p><p>실용적인 지원 문장은 “적절한 문서를 찾도록 도와드릴 수 있습니다. 제목을 말하거나 주제를 설명해 주세요.”입니다. 청취자가 행동할 수 있을 만큼 짧게 요청하고 상호작용에 맞는 차분하거나 격려하는 표현을 선택하세요. 학습 활동에서는 설명과 다음 질문을 별도 발화 단위로 작성하세요. 대본이 의도 변화를 명확히 하면 표현력이 의미를 뒷받침합니다.</p><h4>스트리밍과 오디오 전달</h4><p>Flash 모델 카드는 청취자가 응답 중에 끼어드는 상황을 처리하는 워크플로를 포함해 실시간 대화용 스트리밍 출력을 명시합니다. 애플리케이션은 오디오가 도착하는 대로 재생하고 끼어들기와 다음 차례를 조율할 수 있습니다. 따라서 모든 응답을 먼저 완전한 녹음으로 준비할 필요 없이 발화 메시지의 타이밍이 상호작용의 일부가 됩니다.</p><p>제조사는 합성 워크플로에서 출력 형식을 지정할 수 있게 합니다. 공개 예제는 24 kHz, 160 kbit/s 모노 MP3 파일을 생성합니다. 이는 하나의 문서화된 출력 설정이며 고정된 기본 형식 제약이 아닙니다. 의도한 재생 경로가 받는 오디오 표현 방식을 선택하고 결과 검토를 위해 화자와 발화 문구를 보관하세요.</p><h4>선택적인 참조 목소리 모드</h4><p>Microsoft의 사용자 지정 목소리 모드는 미세 조정 없이 5~60초 참조 클립에서 동의받은 화자에 맞출 수 있습니다. 참조가 생성된 연기에 영향을 주므로 모델 카드는 적당한 에너지의 자연스러운 대화체를 권장합니다. 이 모드에는 별도의 제조사 승인 및 녹음된 동의 절차가 있습니다. 사전 설정 라이브러리 목소리는 다른 준비 경로를 이룹니다.</p><p>브랜드 내레이터를 정의할 참조에는 깨끗하고 대표적인 문단을 사용하고 어떤 표현을 새 대본에 가져올지 정하세요. 사전 설정 음성에는 애플리케이션이 사용할 실제 이름, 명령, 목표 언어 문구를 준비하세요. 선택한 목소리로 문단을 들어 보고 대화 차례 사이의 전환을 살피세요. 유용한 결과는 의도적으로 선택한 화자, 명확한 텍스트, 청취자의 재생 환경에 맞는 오디오로 이루어진 표현력 있는 음성 상호작용입니다.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Ailoot에서 사용 가능 · 입력 및 메서드</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · 음성 합성</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>입력</dt><dd><code>text</code></dd></div><div><dt>출력</dt><dd><code>audio</code></dd></div><div><dt>출력 형식</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>필드</th><th>유형</th><th>요건</th><th>값과 한도</th><th>기본값</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>microsoft/mai-voice-2.1-flash</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>최소 길이: 1</div><div>단위: Unicode 문자</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>cs-CZ-Grant:MAI-Voice-2.1-Flash, cs-CZ-Harper:MAI-Voice-2.1-Flash, da-DK-Grant:MAI-Voice-2.1-Flash, da-DK-Harper:MAI-Voice-2.1-Flash, de-DE-Grant:MAI-Voice-2.1-Flash, de-DE-Harper:MAI-Voice-2.1-Flash, de-DE-Klaus:MAI-Voice-2.1-Flash, de-DE-Mia:MAI-Voice-2.1-Flash, en-AU-Isla:MAI-Voice-2.1-Flash, en-GB-Emily:MAI-Voice-2.1-Flash, en-GB-Harry:MAI-Voice-2.1-Flash, en-IN-Dhruv:MAI-Voice-2.1-Flash, en-IN-Priya:MAI-Voice-2.1-Flash, en-US-Ethan:MAI-Voice-2.1-Flash, en-US-Grant:MAI-Voice-2.1-Flash, en-US-Harper:MAI-Voice-2.1-Flash, en-US-Iris:MAI-Voice-2.1-Flash, en-US-Jasper:MAI-Voice-2.1-Flash, en-US-Olivia:MAI-Voice-2.1-Flash, en-US-Sage:MAI-Voice-2.1-Flash, es-ES-Marta:MAI-Voice-2.1-Flash, es-MX-Alejo:MAI-Voice-2.1-Flash, es-MX-Grant:MAI-Voice-2.1-Flash, es-MX-Harper:MAI-Voice-2.1-Flash, es-MX-Valeria:MAI-Voice-2.1-Flash, fi-FI-Grant:MAI-Voice-2.1-Flash, fi-FI-Harper:MAI-Voice-2.1-Flash, fr-FR-Grant:MAI-Voice-2.1-Flash, fr-FR-Harper:MAI-Voice-2.1-Flash, fr-FR-Marc:MAI-Voice-2.1-Flash, fr-FR-Soleil:MAI-Voice-2.1-Flash, hi-IN-Arjun:MAI-Voice-2.1-Flash, hi-IN-Dhruv:MAI-Voice-2.1-Flash, hi-IN-Grant:MAI-Voice-2.1-Flash, hi-IN-Harper:MAI-Voice-2.1-Flash, hi-IN-Kavya:MAI-Voice-2.1-Flash, hi-IN-Priya:MAI-Voice-2.1-Flash, hu-HU-Bence:MAI-Voice-2.1-Flash, hu-HU-Grant:MAI-Voice-2.1-Flash, hu-HU-Harper:MAI-Voice-2.1-Flash, hu-HU-Levente:MAI-Voice-2.1-Flash, hu-HU-Lilla:MAI-Voice-2.1-Flash, hu-HU-Reka:MAI-Voice-2.1-Flash, id-ID-Grant:MAI-Voice-2.1-Flash, id-ID-Harper:MAI-Voice-2.1-Flash, it-IT-Grant:MAI-Voice-2.1-Flash, it-IT-Harper:MAI-Voice-2.1-Flash, it-IT-Luca:MAI-Voice-2.1-Flash, it-IT-Rosa:MAI-Voice-2.1-Flash, ko-KR-Grant:MAI-Voice-2.1-Flash, ko-KR-Haena:MAI-Voice-2.1-Flash, ko-KR-Harper:MAI-Voice-2.1-Flash, ko-KR-Junho:MAI-Voice-2.1-Flash, nb-NO-Grant:MAI-Voice-2.1-Flash, nb-NO-Harper:MAI-Voice-2.1-Flash, nl-NL-Grant:MAI-Voice-2.1-Flash, nl-NL-Harper:MAI-Voice-2.1-Flash, nl-NL-Sander:MAI-Voice-2.1-Flash, pl-PL-Grant:MAI-Voice-2.1-Flash, pl-PL-Harper:MAI-Voice-2.1-Flash, pt-BR-Caio:MAI-Voice-2.1-Flash, pt-BR-Grant:MAI-Voice-2.1-Flash, pt-BR-Harper:MAI-Voice-2.1-Flash, pt-BR-Luana:MAI-Voice-2.1-Flash, pt-BR-Pedro:MAI-Voice-2.1-Flash, pt-BR-Rafael:MAI-Voice-2.1-Flash, pt-PT-Grant:MAI-Voice-2.1-Flash, pt-PT-Harper:MAI-Voice-2.1-Flash, pt-PT-Rui:MAI-Voice-2.1-Flash, ro-RO-Andrei:MAI-Voice-2.1-Flash, ro-RO-Elena:MAI-Voice-2.1-Flash, ro-RO-Grant:MAI-Voice-2.1-Flash, ro-RO-Harper:MAI-Voice-2.1-Flash, ro-RO-Ioana:MAI-Voice-2.1-Flash, ro-RO-Radu:MAI-Voice-2.1-Flash, ru-RU-Grant:MAI-Voice-2.1-Flash, ru-RU-Harper:MAI-Voice-2.1-Flash, ru-RU-Lev:MAI-Voice-2.1-Flash, ru-RU-Masha:MAI-Voice-2.1-Flash, sv-SE-Grant:MAI-Voice-2.1-Flash, sv-SE-Harper:MAI-Voice-2.1-Flash, th-TH-Grant:MAI-Voice-2.1-Flash, th-TH-Harper:MAI-Voice-2.1-Flash, th-TH-Krit:MAI-Voice-2.1-Flash, th-TH-Nattapong:MAI-Voice-2.1-Flash, tr-TR-Aydin:MAI-Voice-2.1-Flash, tr-TR-Elif:MAI-Voice-2.1-Flash, tr-TR-Grant:MAI-Voice-2.1-Flash, tr-TR-Harper:MAI-Voice-2.1-Flash, vi-VN-Grant:MAI-Voice-2.1-Flash, vi-VN-Harper:MAI-Voice-2.1-Flash, zh-CN-Bo:MAI-Voice-2.1-Flash, zh-CN-Grant:MAI-Voice-2.1-Flash, zh-CN-Harper:MAI-Voice-2.1-Flash, zh-CN-Lan:MAI-Voice-2.1-Flash, zh-CN-Mei:MAI-Voice-2.1-Flash, zh-CN-Wei:MAI-Voice-2.1-Flash</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>mp3</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>입력 자료 조합</summary><p class=\"note-s\"><b>text_to_speech</b> · 필수: input</p></details><details class=\"note-s\" data-method-contract><summary>메서드 매개변수와 수명 주기</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>매개변수</th><th>명세</th></tr></thead><tbody><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>content_type</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>application/json</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>required</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>model, input, voice, response_format</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>voice_ids</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>cs-CZ-Grant:MAI-Voice-2.1-Flash, cs-CZ-Harper:MAI-Voice-2.1-Flash, da-DK-Grant:MAI-Voice-2.1-Flash, da-DK-Harper:MAI-Voice-2.1-Flash, de-DE-Grant:MAI-Voice-2.1-Flash, de-DE-Harper:MAI-Voice-2.1-Flash, de-DE-Klaus:MAI-Voice-2.1-Flash, de-DE-Mia:MAI-Voice-2.1-Flash, en-AU-Isla:MAI-Voice-2.1-Flash, en-GB-Emily:MAI-Voice-2.1-Flash, en-GB-Harry:MAI-Voice-2.1-Flash, en-IN-Dhruv:MAI-Voice-2.1-Flash, en-IN-Priya:MAI-Voice-2.1-Flash, en-US-Ethan:MAI-Voice-2.1-Flash, en-US-Grant:MAI-Voice-2.1-Flash, en-US-Harper:MAI-Voice-2.1-Flash, en-US-Iris:MAI-Voice-2.1-Flash, en-US-Jasper:MAI-Voice-2.1-Flash, en-US-Olivia:MAI-Voice-2.1-Flash, en-US-Sage:MAI-Voice-2.1-Flash, es-ES-Marta:MAI-Voice-2.1-Flash, es-MX-Alejo:MAI-Voice-2.1-Flash, es-MX-Grant:MAI-Voice-2.1-Flash, es-MX-Harper:MAI-Voice-2.1-Flash, es-MX-Valeria:MAI-Voice-2.1-Flash, fi-FI-Grant:MAI-Voice-2.1-Flash, fi-FI-Harper:MAI-Voice-2.1-Flash, fr-FR-Grant:MAI-Voice-2.1-Flash, fr-FR-Harper:MAI-Voice-2.1-Flash, fr-FR-Marc:MAI-Voice-2.1-Flash, fr-FR-Soleil:MAI-Voice-2.1-Flash, hi-IN-Arjun:MAI-Voice-2.1-Flash, hi-IN-Dhruv:MAI-Voice-2.1-Flash, hi-IN-Grant:MAI-Voice-2.1-Flash, hi-IN-Harper:MAI-Voice-2.1-Flash, hi-IN-Kavya:MAI-Voice-2.1-Flash, hi-IN-Priya:MAI-Voice-2.1-Flash, hu-HU-Bence:MAI-Voice-2.1-Flash, hu-HU-Grant:MAI-Voice-2.1-Flash, hu-HU-Harper:MAI-Voice-2.1-Flash, hu-HU-Levente:MAI-Voice-2.1-Flash, hu-HU-Lilla:MAI-Voice-2.1-Flash, hu-HU-Reka:MAI-Voice-2.1-Flash, id-ID-Grant:MAI-Voice-2.1-Flash, id-ID-Harper:MAI-Voice-2.1-Flash, it-IT-Grant:MAI-Voice-2.1-Flash, it-IT-Harper:MAI-Voice-2.1-Flash, it-IT-Luca:MAI-Voice-2.1-Flash, it-IT-Rosa:MAI-Voice-2.1-Flash, ko-KR-Grant:MAI-Voice-2.1-Flash, ko-KR-Haena:MAI-Voice-2.1-Flash, ko-KR-Harper:MAI-Voice-2.1-Flash, ko-KR-Junho:MAI-Voice-2.1-Flash, nb-NO-Grant:MAI-Voice-2.1-Flash, nb-NO-Harper:MAI-Voice-2.1-Flash, nl-NL-Grant:MAI-Voice-2.1-Flash, nl-NL-Harper:MAI-Voice-2.1-Flash, nl-NL-Sander:MAI-Voice-2.1-Flash, pl-PL-Grant:MAI-Voice-2.1-Flash, pl-PL-Harper:MAI-Voice-2.1-Flash, pt-BR-Caio:MAI-Voice-2.1-Flash, pt-BR-Grant:MAI-Voice-2.1-Flash, pt-BR-Harper:MAI-Voice-2.1-Flash, pt-BR-Luana:MAI-Voice-2.1-Flash, pt-BR-Pedro:MAI-Voice-2.1-Flash, pt-BR-Rafael:MAI-Voice-2.1-Flash, pt-PT-Grant:MAI-Voice-2.1-Flash, pt-PT-Harper:MAI-Voice-2.1-Flash, pt-PT-Rui:MAI-Voice-2.1-Flash, ro-RO-Andrei:MAI-Voice-2.1-Flash, ro-RO-Elena:MAI-Voice-2.1-Flash, ro-RO-Grant:MAI-Voice-2.1-Flash, ro-RO-Harper:MAI-Voice-2.1-Flash, ro-RO-Ioana:MAI-Voice-2.1-Flash, ro-RO-Radu:MAI-Voice-2.1-Flash, ru-RU-Grant:MAI-Voice-2.1-Flash, ru-RU-Harper:MAI-Voice-2.1-Flash, ru-RU-Lev:MAI-Voice-2.1-Flash, ru-RU-Masha:MAI-Voice-2.1-Flash, sv-SE-Grant:MAI-Voice-2.1-Flash, sv-SE-Harper:MAI-Voice-2.1-Flash, th-TH-Grant:MAI-Voice-2.1-Flash, th-TH-Harper:MAI-Voice-2.1-Flash, th-TH-Krit:MAI-Voice-2.1-Flash, th-TH-Nattapong:MAI-Voice-2.1-Flash, tr-TR-Aydin:MAI-Voice-2.1-Flash, tr-TR-Elif:MAI-Voice-2.1-Flash, tr-TR-Grant:MAI-Voice-2.1-Flash, tr-TR-Harper:MAI-Voice-2.1-Flash, vi-VN-Grant:MAI-Voice-2.1-Flash, vi-VN-Harper:MAI-Voice-2.1-Flash, zh-CN-Bo:MAI-Voice-2.1-Flash, zh-CN-Grant:MAI-Voice-2.1-Flash, zh-CN-Harper:MAI-Voice-2.1-Flash, zh-CN-Lan:MAI-Voice-2.1-Flash, zh-CN-Mei:MAI-Voice-2.1-Flash, zh-CN-Wei:MAI-Voice-2.1-Flash</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>response_format</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>mp3</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>max_input_characters</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>null</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>other_options</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>false</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>input</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>정확한 UTF-8 텍스트; 정규화 없이 계산한 유니코드 문자 수</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>material_types</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>text</td></tr></tbody></table></div><p>수명 주기: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · 실제로 반환된 task_id 또는 미디어 라이브러리 기록</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">이 모델 프로필에 있는 정확한 음성을 선택하세요.</p><p class=\"note-s\">입력 문자 수와 오디오 초는 서로 다른 측정 단위입니다.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">요금</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.</p><dl data-price-conditions><dt>빠른 모드</dt><dd>미지정 <span class=\"note-s\">빠른 모드를 선택한 경우</span></dd><dt>Flex 모드</dt><dd>미지정 <span class=\"note-s\">flex 모드를 선택한 경우</span></dd><dt>최대 추론 수준</dt><dd>미지정 <span class=\"note-s\">최대 추론 수준에 default 조정값을 적용하는 경우</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot 요금</h4><h4>설정별 가격</h4><p class=\"note-s\">각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>설정</th><th>요금표</th><th>과금 대상 수량</th><th>과금 단위</th><th>요금</th></tr></thead><tbody><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>기본 토큰 요금</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>기본 요금</td><td data-cell-label=\"과금 대상 수량\"><span class=\"card-cell-label\">과금 대상 수량</span>—</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>—</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>입력 · 입력 토큰</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>출력 · 출력 토큰</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 읽기</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 쓰기</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 쓰기, 1시간</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div></td></tr><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>Ultra</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>—</td><td data-cell-label=\"과금 대상 수량\"><span class=\"card-cell-label\">과금 대상 수량</span>한자를 포함해 Unicode 코드 포인트 하나를 문자 하나로 계산합니다.</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>입력 문자 1K개당</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>입력 · 입력 문자</span> <b>$0.03</b> <span class=\"price-unit\">입력 문자 1K개당</span></div></td></tr></tbody></table></div></div><div data-declared-reference-pricing><h4>참조 요금 상세 정보</h4><p class=\"note-s\">모델 수준의 참조 요금표는 메서드 선택, 견적 또는 요금을 변경하지 않습니다. 실제 과금에는 선택한 Ailoot 메서드 요금이 적용됩니다.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Microsoft AI: MAI-Voice-2.1-Flash</summary><h4>설정별 가격</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>설정</th><th>과금 조건</th><th>요금</th></tr></thead><tbody><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>Microsoft AI: MAI-Voice-2.1-Flash · 기본 설정</th><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>기본 설정</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>입력 · 입력 문자 수</span> <b>US$0.00003</b> <span class=\"price-unit\">입력 문자당</span></div></td></tr></tbody></table></div></details></div><p class=\"note-s\">Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. <a href=\"/docs/ko/billing/reserve/\">금액 확보와 정산 방식 →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">요청 예제</h3><h4>Ailoot Ultra · 음성 합성</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1855-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1855-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1855-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1855-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;microsoft/mai-voice-2.1-flash&quot;, &quot;input&quot;: &quot;Good afternoon! This is a short voice take.&quot;}&#39;)\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nallowed=json.loads(&#39;[&quot;cs-CZ-Grant:MAI-Voice-2.1-Flash&quot;, &quot;cs-CZ-Harper:MAI-Voice-2.1-Flash&quot;, &quot;da-DK-Grant:MAI-Voice-2.1-Flash&quot;, &quot;da-DK-Harper:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Grant:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Harper:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Klaus:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Mia:MAI-Voice-2.1-Flash&quot;, &quot;en-AU-Isla:MAI-Voice-2.1-Flash&quot;, &quot;en-GB-Emily:MAI-Voice-2.1-Flash&quot;, &quot;en-GB-Harry:MAI-Voice-2.1-Flash&quot;, &quot;en-IN-Dhruv:MAI-Voice-2.1-Flash&quot;, &quot;en-IN-Priya:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Ethan:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Grant:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Harper:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Iris:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Jasper:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Olivia:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Sage:MAI-Voice-2.1-Flash&quot;, &quot;es-ES-Marta:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Alejo:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Grant:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Harper:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Valeria:MAI-Voice-2.1-Flash&quot;, &quot;fi-FI-Grant:MAI-Voice-2.1-Flash&quot;, &quot;fi-FI-Harper:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Marc:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Soleil:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Arjun:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Dhruv:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Grant:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Harper:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Kavya:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Priya:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Bence:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Grant:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Harper:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Levente:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Lilla:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Reka:MAI-Voice-2.1-Flash&quot;, &quot;id-ID-Grant:MAI-Voice-2.1-Flash&quot;, &quot;id-ID-Harper:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Grant:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Harper:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Luca:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Rosa:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Haena:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Junho:MAI-Voice-2.1-Flash&quot;, &quot;nb-NO-Grant:MAI-Voice-2.1-Flash&quot;, &quot;nb-NO-Harper:MAI-Voice-2.1-Flash&quot;, &quot;nl-NL-Grant:MAI-Voice-2.1-Flash&quot;, &quot;nl-NL-Harper:MAI-Voice-2.1-Flash&quot;, &quot;nl-NL-Sander:MAI-Voice-2.1-Flash&quot;, &quot;pl-PL-Grant:MAI-Voice-2.1-Flash&quot;, &quot;pl-PL-Harper:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Caio:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Luana:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Pedro:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Rafael:MAI-Voice-2.1-Flash&quot;, &quot;pt-PT-Grant:MAI-Voice-2.1-Flash&quot;, &quot;pt-PT-Harper:MAI-Voice-2.1-Flash&quot;, &quot;pt-PT-Rui:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Andrei:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Elena:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Grant:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Harper:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Ioana:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Radu:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Grant:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Harper:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Lev:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Masha:MAI-Voice-2.1-Flash&quot;, &quot;sv-SE-Grant:MAI-Voice-2.1-Flash&quot;, &quot;sv-SE-Harper:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Grant:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Harper:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Krit:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Nattapong:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Aydin:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Elif:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;vi-VN-Grant:MAI-Voice-2.1-Flash&quot;, &quot;vi-VN-Harper:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Bo:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Grant:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Harper:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Lan:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Mei:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Wei:MAI-Voice-2.1-Flash&quot;]&#39;)\nif voice not in allowed: raise SystemExit(&quot;Choose an accepted voice ID from this exact model profile&quot;)\np[&quot;voice&quot;]=voice\np[&quot;response_format&quot;]=&quot;mp3&quot;\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">결과 수신 및 저장</h3><h4>Ailoot Ultra · 음성 합성</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>기타 콘텐츠 조회</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1856-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1856-panel-0\" aria-selected=\"true\" tabindex=\"0\">미디어 라이브러리</button><button class=\"cg-tab\" id=\"model-code-1856-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1856-panel-1\" aria-selected=\"false\" tabindex=\"-1\">작업 상태</button><button class=\"cg-tab\" id=\"model-code-1856-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1856-panel-2\" aria-selected=\"false\" tabindex=\"-1\">자산 세부 정보</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1856-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1856-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-assets.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1856-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1856-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_MEDIA_TASK_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/tasks/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-task.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-task.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1856-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1856-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_ASSET_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/assets/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-asset.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-asset.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>완료된 결과 모두 보관</h5><p class=\"note-s\">반환된 완전한 응답, 파일, 콘텐츠 부분을 모두 보관하세요.</p><p class=\"note-s\">바이너리 결과 전체와 헤더를 보관하세요. JSON 또는 여러 출력이 반환되면 모든 데이터 항목을 보관하고 실제로 반환된 서명된 자산 URL을 각각 조회하세요.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>원래 응답을 확인해야 할 경우</h5><p class=\"note-s\">다시 제출하지 말고 정산 대조를 위해 최초 operation_id/X-Client-Request-ID를 보관하세요. 전용 오디오 폴링 라우트는 없습니다.</p></div><details class=\"card-about\" data-output-fields><summary>응답 필드</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>필드</th><th>유형</th></tr></thead><tbody><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>bytes</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>오류와 다음 단계</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>응답</th><th>조건</th><th>다음 단계</th></tr></thead><tbody><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>새 생성 요청 전에 표시된 필드를 수정하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span><code>server_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">별칭</h3><h4>모델 별칭</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=microsoft%2Fmai-voice-2.1-flash&amp;route=Ultra&amp;caller=microsoft%2Fmai-voice-2.1-flash&amp;fmt=speech\"><code>microsoft/mai-voice-2.1-flash</code></a></span></p><h4>메서드 경로 별칭</h4><p class=\"note-s\">위에 표시된 메서드 경로를 사용하세요.</p><h4>관련 호출용 ID</h4><p class=\"note-s\"><a href=\"#m=microsoft%2Fmai-voice-2.1-flash&amp;route=Ultra&amp;caller=microsoft%2Fmai-voice-2.1-flash&amp;fmt=speech\"><code>microsoft/mai-voice-2.1-flash</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "microsoft/mai-voice-2.1-flash",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|microsoft%2Fmai-voice-2.1-flash",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음",
                "http_status": 400,
                "recovery": "새 생성 요청 전에 표시된 필드를 수정하세요.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다",
                "http_status": null,
                "recovery": "최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "다시 제출하지 말고 정산 대조를 위해 최초 operation_id/X-Client-Request-ID를 보관하세요. 전용 오디오 폴링 라우트는 없습니다."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "바이너리 결과 전체와 헤더를 보관하세요. JSON 또는 여러 출력이 반환되면 모든 데이터 항목을 보관하고 실제로 반환된 서명된 자산 URL을 각각 조회하세요.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "microsoft/mai-voice-2.1-flash"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode 문자"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "cs-CZ-Grant:MAI-Voice-2.1-Flash",
                  "cs-CZ-Harper:MAI-Voice-2.1-Flash",
                  "da-DK-Grant:MAI-Voice-2.1-Flash",
                  "da-DK-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Grant:MAI-Voice-2.1-Flash",
                  "de-DE-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Klaus:MAI-Voice-2.1-Flash",
                  "de-DE-Mia:MAI-Voice-2.1-Flash",
                  "en-AU-Isla:MAI-Voice-2.1-Flash",
                  "en-GB-Emily:MAI-Voice-2.1-Flash",
                  "en-GB-Harry:MAI-Voice-2.1-Flash",
                  "en-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "en-IN-Priya:MAI-Voice-2.1-Flash",
                  "en-US-Ethan:MAI-Voice-2.1-Flash",
                  "en-US-Grant:MAI-Voice-2.1-Flash",
                  "en-US-Harper:MAI-Voice-2.1-Flash",
                  "en-US-Iris:MAI-Voice-2.1-Flash",
                  "en-US-Jasper:MAI-Voice-2.1-Flash",
                  "en-US-Olivia:MAI-Voice-2.1-Flash",
                  "en-US-Sage:MAI-Voice-2.1-Flash",
                  "es-ES-Marta:MAI-Voice-2.1-Flash",
                  "es-MX-Alejo:MAI-Voice-2.1-Flash",
                  "es-MX-Grant:MAI-Voice-2.1-Flash",
                  "es-MX-Harper:MAI-Voice-2.1-Flash",
                  "es-MX-Valeria:MAI-Voice-2.1-Flash",
                  "fi-FI-Grant:MAI-Voice-2.1-Flash",
                  "fi-FI-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Grant:MAI-Voice-2.1-Flash",
                  "fr-FR-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Marc:MAI-Voice-2.1-Flash",
                  "fr-FR-Soleil:MAI-Voice-2.1-Flash",
                  "hi-IN-Arjun:MAI-Voice-2.1-Flash",
                  "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "hi-IN-Grant:MAI-Voice-2.1-Flash",
                  "hi-IN-Harper:MAI-Voice-2.1-Flash",
                  "hi-IN-Kavya:MAI-Voice-2.1-Flash",
                  "hi-IN-Priya:MAI-Voice-2.1-Flash",
                  "hu-HU-Bence:MAI-Voice-2.1-Flash",
                  "hu-HU-Grant:MAI-Voice-2.1-Flash",
                  "hu-HU-Harper:MAI-Voice-2.1-Flash",
                  "hu-HU-Levente:MAI-Voice-2.1-Flash",
                  "hu-HU-Lilla:MAI-Voice-2.1-Flash",
                  "hu-HU-Reka:MAI-Voice-2.1-Flash",
                  "id-ID-Grant:MAI-Voice-2.1-Flash",
                  "id-ID-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Grant:MAI-Voice-2.1-Flash",
                  "it-IT-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Luca:MAI-Voice-2.1-Flash",
                  "it-IT-Rosa:MAI-Voice-2.1-Flash",
                  "ko-KR-Grant:MAI-Voice-2.1-Flash",
                  "ko-KR-Haena:MAI-Voice-2.1-Flash",
                  "ko-KR-Harper:MAI-Voice-2.1-Flash",
                  "ko-KR-Junho:MAI-Voice-2.1-Flash",
                  "nb-NO-Grant:MAI-Voice-2.1-Flash",
                  "nb-NO-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Grant:MAI-Voice-2.1-Flash",
                  "nl-NL-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Sander:MAI-Voice-2.1-Flash",
                  "pl-PL-Grant:MAI-Voice-2.1-Flash",
                  "pl-PL-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Caio:MAI-Voice-2.1-Flash",
                  "pt-BR-Grant:MAI-Voice-2.1-Flash",
                  "pt-BR-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Luana:MAI-Voice-2.1-Flash",
                  "pt-BR-Pedro:MAI-Voice-2.1-Flash",
                  "pt-BR-Rafael:MAI-Voice-2.1-Flash",
                  "pt-PT-Grant:MAI-Voice-2.1-Flash",
                  "pt-PT-Harper:MAI-Voice-2.1-Flash",
                  "pt-PT-Rui:MAI-Voice-2.1-Flash",
                  "ro-RO-Andrei:MAI-Voice-2.1-Flash",
                  "ro-RO-Elena:MAI-Voice-2.1-Flash",
                  "ro-RO-Grant:MAI-Voice-2.1-Flash",
                  "ro-RO-Harper:MAI-Voice-2.1-Flash",
                  "ro-RO-Ioana:MAI-Voice-2.1-Flash",
                  "ro-RO-Radu:MAI-Voice-2.1-Flash",
                  "ru-RU-Grant:MAI-Voice-2.1-Flash",
                  "ru-RU-Harper:MAI-Voice-2.1-Flash",
                  "ru-RU-Lev:MAI-Voice-2.1-Flash",
                  "ru-RU-Masha:MAI-Voice-2.1-Flash",
                  "sv-SE-Grant:MAI-Voice-2.1-Flash",
                  "sv-SE-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Grant:MAI-Voice-2.1-Flash",
                  "th-TH-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Krit:MAI-Voice-2.1-Flash",
                  "th-TH-Nattapong:MAI-Voice-2.1-Flash",
                  "tr-TR-Aydin:MAI-Voice-2.1-Flash",
                  "tr-TR-Elif:MAI-Voice-2.1-Flash",
                  "tr-TR-Grant:MAI-Voice-2.1-Flash",
                  "tr-TR-Harper:MAI-Voice-2.1-Flash",
                  "vi-VN-Grant:MAI-Voice-2.1-Flash",
                  "vi-VN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Bo:MAI-Voice-2.1-Flash",
                  "zh-CN-Grant:MAI-Voice-2.1-Flash",
                  "zh-CN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Lan:MAI-Voice-2.1-Flash",
                  "zh-CN-Mei:MAI-Voice-2.1-Flash",
                  "zh-CN-Wei:MAI-Voice-2.1-Flash"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "이 모델 프로필에 있는 정확한 음성을 선택하세요.",
            "입력 문자 수와 오디오 초는 서로 다른 측정 단위입니다."
          ],
          "input": {
            "content_type": "application/json",
            "input": "정확한 UTF-8 텍스트; 정규화 없이 계산한 유니코드 문자 수",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "cs-CZ-Grant:MAI-Voice-2.1-Flash",
              "cs-CZ-Harper:MAI-Voice-2.1-Flash",
              "da-DK-Grant:MAI-Voice-2.1-Flash",
              "da-DK-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Grant:MAI-Voice-2.1-Flash",
              "de-DE-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Klaus:MAI-Voice-2.1-Flash",
              "de-DE-Mia:MAI-Voice-2.1-Flash",
              "en-AU-Isla:MAI-Voice-2.1-Flash",
              "en-GB-Emily:MAI-Voice-2.1-Flash",
              "en-GB-Harry:MAI-Voice-2.1-Flash",
              "en-IN-Dhruv:MAI-Voice-2.1-Flash",
              "en-IN-Priya:MAI-Voice-2.1-Flash",
              "en-US-Ethan:MAI-Voice-2.1-Flash",
              "en-US-Grant:MAI-Voice-2.1-Flash",
              "en-US-Harper:MAI-Voice-2.1-Flash",
              "en-US-Iris:MAI-Voice-2.1-Flash",
              "en-US-Jasper:MAI-Voice-2.1-Flash",
              "en-US-Olivia:MAI-Voice-2.1-Flash",
              "en-US-Sage:MAI-Voice-2.1-Flash",
              "es-ES-Marta:MAI-Voice-2.1-Flash",
              "es-MX-Alejo:MAI-Voice-2.1-Flash",
              "es-MX-Grant:MAI-Voice-2.1-Flash",
              "es-MX-Harper:MAI-Voice-2.1-Flash",
              "es-MX-Valeria:MAI-Voice-2.1-Flash",
              "fi-FI-Grant:MAI-Voice-2.1-Flash",
              "fi-FI-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Grant:MAI-Voice-2.1-Flash",
              "fr-FR-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Marc:MAI-Voice-2.1-Flash",
              "fr-FR-Soleil:MAI-Voice-2.1-Flash",
              "hi-IN-Arjun:MAI-Voice-2.1-Flash",
              "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
              "hi-IN-Grant:MAI-Voice-2.1-Flash",
              "hi-IN-Harper:MAI-Voice-2.1-Flash",
              "hi-IN-Kavya:MAI-Voice-2.1-Flash",
              "hi-IN-Priya:MAI-Voice-2.1-Flash",
              "hu-HU-Bence:MAI-Voice-2.1-Flash",
              "hu-HU-Grant:MAI-Voice-2.1-Flash",
              "hu-HU-Harper:MAI-Voice-2.1-Flash",
              "hu-HU-Levente:MAI-Voice-2.1-Flash",
              "hu-HU-Lilla:MAI-Voice-2.1-Flash",
              "hu-HU-Reka:MAI-Voice-2.1-Flash",
              "id-ID-Grant:MAI-Voice-2.1-Flash",
              "id-ID-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Grant:MAI-Voice-2.1-Flash",
              "it-IT-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Luca:MAI-Voice-2.1-Flash",
              "it-IT-Rosa:MAI-Voice-2.1-Flash",
              "ko-KR-Grant:MAI-Voice-2.1-Flash",
              "ko-KR-Haena:MAI-Voice-2.1-Flash",
              "ko-KR-Harper:MAI-Voice-2.1-Flash",
              "ko-KR-Junho:MAI-Voice-2.1-Flash",
              "nb-NO-Grant:MAI-Voice-2.1-Flash",
              "nb-NO-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Grant:MAI-Voice-2.1-Flash",
              "nl-NL-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Sander:MAI-Voice-2.1-Flash",
              "pl-PL-Grant:MAI-Voice-2.1-Flash",
              "pl-PL-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Caio:MAI-Voice-2.1-Flash",
              "pt-BR-Grant:MAI-Voice-2.1-Flash",
              "pt-BR-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Luana:MAI-Voice-2.1-Flash",
              "pt-BR-Pedro:MAI-Voice-2.1-Flash",
              "pt-BR-Rafael:MAI-Voice-2.1-Flash",
              "pt-PT-Grant:MAI-Voice-2.1-Flash",
              "pt-PT-Harper:MAI-Voice-2.1-Flash",
              "pt-PT-Rui:MAI-Voice-2.1-Flash",
              "ro-RO-Andrei:MAI-Voice-2.1-Flash",
              "ro-RO-Elena:MAI-Voice-2.1-Flash",
              "ro-RO-Grant:MAI-Voice-2.1-Flash",
              "ro-RO-Harper:MAI-Voice-2.1-Flash",
              "ro-RO-Ioana:MAI-Voice-2.1-Flash",
              "ro-RO-Radu:MAI-Voice-2.1-Flash",
              "ru-RU-Grant:MAI-Voice-2.1-Flash",
              "ru-RU-Harper:MAI-Voice-2.1-Flash",
              "ru-RU-Lev:MAI-Voice-2.1-Flash",
              "ru-RU-Masha:MAI-Voice-2.1-Flash",
              "sv-SE-Grant:MAI-Voice-2.1-Flash",
              "sv-SE-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Grant:MAI-Voice-2.1-Flash",
              "th-TH-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Krit:MAI-Voice-2.1-Flash",
              "th-TH-Nattapong:MAI-Voice-2.1-Flash",
              "tr-TR-Aydin:MAI-Voice-2.1-Flash",
              "tr-TR-Elif:MAI-Voice-2.1-Flash",
              "tr-TR-Grant:MAI-Voice-2.1-Flash",
              "tr-TR-Harper:MAI-Voice-2.1-Flash",
              "vi-VN-Grant:MAI-Voice-2.1-Flash",
              "vi-VN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Bo:MAI-Voice-2.1-Flash",
              "zh-CN-Grant:MAI-Voice-2.1-Flash",
              "zh-CN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Lan:MAI-Voice-2.1-Flash",
              "zh-CN-Mei:MAI-Voice-2.1-Flash",
              "zh-CN-Wei:MAI-Voice-2.1-Flash"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "실제로 반환된 task_id 또는 미디어 라이브러리 기록",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "768d1dc9b9da20eb0942",
            "label": "Microsoft AI: MAI-Voice-2.1-Flash",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "기본 설정"
                },
                "label": "Microsoft AI: MAI-Voice-2.1-Flash · 기본 설정",
                "units": [
                  {
                    "amount": "0.000030",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "a7f384d81db64c9b1e8c0855",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"microsoft/mai-voice-2.1-flash\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"cs-CZ-Grant:MAI-Voice-2.1-Flash\", \"cs-CZ-Harper:MAI-Voice-2.1-Flash\", \"da-DK-Grant:MAI-Voice-2.1-Flash\", \"da-DK-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Grant:MAI-Voice-2.1-Flash\", \"de-DE-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Klaus:MAI-Voice-2.1-Flash\", \"de-DE-Mia:MAI-Voice-2.1-Flash\", \"en-AU-Isla:MAI-Voice-2.1-Flash\", \"en-GB-Emily:MAI-Voice-2.1-Flash\", \"en-GB-Harry:MAI-Voice-2.1-Flash\", \"en-IN-Dhruv:MAI-Voice-2.1-Flash\", \"en-IN-Priya:MAI-Voice-2.1-Flash\", \"en-US-Ethan:MAI-Voice-2.1-Flash\", \"en-US-Grant:MAI-Voice-2.1-Flash\", \"en-US-Harper:MAI-Voice-2.1-Flash\", \"en-US-Iris:MAI-Voice-2.1-Flash\", \"en-US-Jasper:MAI-Voice-2.1-Flash\", \"en-US-Olivia:MAI-Voice-2.1-Flash\", \"en-US-Sage:MAI-Voice-2.1-Flash\", \"es-ES-Marta:MAI-Voice-2.1-Flash\", \"es-MX-Alejo:MAI-Voice-2.1-Flash\", \"es-MX-Grant:MAI-Voice-2.1-Flash\", \"es-MX-Harper:MAI-Voice-2.1-Flash\", \"es-MX-Valeria:MAI-Voice-2.1-Flash\", \"fi-FI-Grant:MAI-Voice-2.1-Flash\", \"fi-FI-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Grant:MAI-Voice-2.1-Flash\", \"fr-FR-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Marc:MAI-Voice-2.1-Flash\", \"fr-FR-Soleil:MAI-Voice-2.1-Flash\", \"hi-IN-Arjun:MAI-Voice-2.1-Flash\", \"hi-IN-Dhruv:MAI-Voice-2.1-Flash\", \"hi-IN-Grant:MAI-Voice-2.1-Flash\", \"hi-IN-Harper:MAI-Voice-2.1-Flash\", \"hi-IN-Kavya:MAI-Voice-2.1-Flash\", \"hi-IN-Priya:MAI-Voice-2.1-Flash\", \"hu-HU-Bence:MAI-Voice-2.1-Flash\", \"hu-HU-Grant:MAI-Voice-2.1-Flash\", \"hu-HU-Harper:MAI-Voice-2.1-Flash\", \"hu-HU-Levente:MAI-Voice-2.1-Flash\", \"hu-HU-Lilla:MAI-Voice-2.1-Flash\", \"hu-HU-Reka:MAI-Voice-2.1-Flash\", \"id-ID-Grant:MAI-Voice-2.1-Flash\", \"id-ID-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Grant:MAI-Voice-2.1-Flash\", \"it-IT-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Luca:MAI-Voice-2.1-Flash\", \"it-IT-Rosa:MAI-Voice-2.1-Flash\", \"ko-KR-Grant:MAI-Voice-2.1-Flash\", \"ko-KR-Haena:MAI-Voice-2.1-Flash\", \"ko-KR-Harper:MAI-Voice-2.1-Flash\", \"ko-KR-Junho:MAI-Voice-2.1-Flash\", \"nb-NO-Grant:MAI-Voice-2.1-Flash\", \"nb-NO-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Grant:MAI-Voice-2.1-Flash\", \"nl-NL-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Sander:MAI-Voice-2.1-Flash\", \"pl-PL-Grant:MAI-Voice-2.1-Flash\", \"pl-PL-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Caio:MAI-Voice-2.1-Flash\", \"pt-BR-Grant:MAI-Voice-2.1-Flash\", \"pt-BR-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Luana:MAI-Voice-2.1-Flash\", \"pt-BR-Pedro:MAI-Voice-2.1-Flash\", \"pt-BR-Rafael:MAI-Voice-2.1-Flash\", \"pt-PT-Grant:MAI-Voice-2.1-Flash\", \"pt-PT-Harper:MAI-Voice-2.1-Flash\", \"pt-PT-Rui:MAI-Voice-2.1-Flash\", \"ro-RO-Andrei:MAI-Voice-2.1-Flash\", \"ro-RO-Elena:MAI-Voice-2.1-Flash\", \"ro-RO-Grant:MAI-Voice-2.1-Flash\", \"ro-RO-Harper:MAI-Voice-2.1-Flash\", \"ro-RO-Ioana:MAI-Voice-2.1-Flash\", \"ro-RO-Radu:MAI-Voice-2.1-Flash\", \"ru-RU-Grant:MAI-Voice-2.1-Flash\", \"ru-RU-Harper:MAI-Voice-2.1-Flash\", \"ru-RU-Lev:MAI-Voice-2.1-Flash\", \"ru-RU-Masha:MAI-Voice-2.1-Flash\", \"sv-SE-Grant:MAI-Voice-2.1-Flash\", \"sv-SE-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Grant:MAI-Voice-2.1-Flash\", \"th-TH-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Krit:MAI-Voice-2.1-Flash\", \"th-TH-Nattapong:MAI-Voice-2.1-Flash\", \"tr-TR-Aydin:MAI-Voice-2.1-Flash\", \"tr-TR-Elif:MAI-Voice-2.1-Flash\", \"tr-TR-Grant:MAI-Voice-2.1-Flash\", \"tr-TR-Harper:MAI-Voice-2.1-Flash\", \"vi-VN-Grant:MAI-Voice-2.1-Flash\", \"vi-VN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Bo:MAI-Voice-2.1-Flash\", \"zh-CN-Grant:MAI-Voice-2.1-Flash\", \"zh-CN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Lan:MAI-Voice-2.1-Flash\", \"zh-CN-Mei:MAI-Voice-2.1-Flash\", \"zh-CN-Wei:MAI-Voice-2.1-Flash\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.03000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    }
  ],
  "model_id": "microsoft/mai-voice-2.1-flash",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "c94c02fabf37930f629b17c55627ed20be686816ef04fc7cc7b0c383cee3316e",
    "input_html_sha256": "64a754146e93c3594e5689a77236c9c5a414e4e924961ddd07edeb7f153213d7",
    "private_audit_sha256": "e3757ee3df88a2790ce3b2f4babf8a3cffaace6524b8558b91df618adb095159",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ko/microsoft-mai-voice-2-1-flash/",
    "description": "Microsoft AI의 MAI-Voice-2.1-Flash는 대화형 음성 애플리케이션을 위해 23개 언어의 표현력 있는 음성을 생성합니다. 선별된 목소리 라이브러리를 제공하며 스트리밍, 다중 화자, 문장 수준의 표현 제어를 지원합니다.",
    "locale": "ko",
    "md_url": "https://ailoot.ai/models/ko/microsoft-mai-voice-2-1-flash/index.md",
    "title": "Microsoft AI: MAI-Voice-2.1-Flash — Ailoot",
    "url": "https://ailoot.ai/models/ko/microsoft-mai-voice-2-1-flash/"
  },
  "rawModel": {
    "about": "MAI-Voice-2.1-Flash는 빠른 음성 상호작용을 중심으로 설계된 Microsoft AI의 프롬프트 기반 텍스트 음성 변환 모델입니다. 제조사는 음성 어시스턴트, 고객 지원 대화, 전화 메뉴용으로 소개합니다. 23개 언어에서 자연스럽고 표현력 있는 음성을 생성하며 어조와 표현을 제어합니다. Flash는 실시간 응답에 중점을 둔 버전입니다. 별도 이름의 MAI-Voice-2.1은 긴 콘텐츠의 세밀한 표현과 충실도를 우선합니다.\n\n### 텍스트, 화자, 언어\n\n입력은 읽을 발화문과 선택한 목소리이며 선택적으로 SSML 표현 지시를 추가합니다. 관리형 목소리 목록은 화자, 로캘, 모델 버전을 구분합니다. Harper와 Grant는 언어별 항목이 있는 화자의 예입니다. 의도한 목표 언어 텍스트를 사용하고 적절한 로캘을 선택하세요. 준비된 영어 인사와 스페인어 설명은 각자의 문구가 있는 별도 발화 문단입니다.\n\n모델 카드는 지원 언어 전반의 일관된 목소리 정체성과 대화용 다중 화자를 문서화합니다. 이는 현지화된 안내 전반에 하나의 알아볼 수 있는 내레이터가 필요한 애플리케이션이나 역할이 다른 짧은 대화에 도움이 됩니다. 대사를 의도한 화자에 명시적으로 배정하고 배정을 안정적으로 유지하세요. 오디오는 해당 대본을 읽은 결과이며 열린 질문으로부터 새로 작성한 답변이 아닙니다.\n\n### 어조와 말하기 스타일\n\nMicrosoft는 SSML을 통한 문장 및 대화 차례 수준의 감정과 표현 제어를 설명합니다. 사용 가능한 스타일은 선택한 목소리에 따라 다릅니다. 관리형 목록에는 narrator, educational, customer_call_center 같은 작업 스타일과 특정 화자의 표현 스타일이 포함됩니다. 예를 들어 미국 Harper 항목에는 joyful와 relieved가 있습니다. 모든 화자가 같은 집합을 허용한다고 가정하지 말고 목소리에서 지원하는 스타일을 선택하세요.\n\n실용적인 지원 문장은 “적절한 문서를 찾도록 도와드릴 수 있습니다. 제목을 말하거나 주제를 설명해 주세요.”입니다. 청취자가 행동할 수 있을 만큼 짧게 요청하고 상호작용에 맞는 차분하거나 격려하는 표현을 선택하세요. 학습 활동에서는 설명과 다음 질문을 별도 발화 단위로 작성하세요. 대본이 의도 변화를 명확히 하면 표현력이 의미를 뒷받침합니다.\n\n### 스트리밍과 오디오 전달\n\nFlash 모델 카드는 청취자가 응답 중에 끼어드는 상황을 처리하는 워크플로를 포함해 실시간 대화용 스트리밍 출력을 명시합니다. 애플리케이션은 오디오가 도착하는 대로 재생하고 끼어들기와 다음 차례를 조율할 수 있습니다. 따라서 모든 응답을 먼저 완전한 녹음으로 준비할 필요 없이 발화 메시지의 타이밍이 상호작용의 일부가 됩니다.\n\n제조사는 합성 워크플로에서 출력 형식을 지정할 수 있게 합니다. 공개 예제는 24 kHz, 160 kbit/s 모노 MP3 파일을 생성합니다. 이는 하나의 문서화된 출력 설정이며 고정된 기본 형식 제약이 아닙니다. 의도한 재생 경로가 받는 오디오 표현 방식을 선택하고 결과 검토를 위해 화자와 발화 문구를 보관하세요.\n\n### 선택적인 참조 목소리 모드\n\nMicrosoft의 사용자 지정 목소리 모드는 미세 조정 없이 5~60초 참조 클립에서 동의받은 화자에 맞출 수 있습니다. 참조가 생성된 연기에 영향을 주므로 모델 카드는 적당한 에너지의 자연스러운 대화체를 권장합니다. 이 모드에는 별도의 제조사 승인 및 녹음된 동의 절차가 있습니다. 사전 설정 라이브러리 목소리는 다른 준비 경로를 이룹니다.\n\n브랜드 내레이터를 정의할 참조에는 깨끗하고 대표적인 문단을 사용하고 어떤 표현을 새 대본에 가져올지 정하세요. 사전 설정 음성에는 애플리케이션이 사용할 실제 이름, 명령, 목표 언어 문구를 준비하세요. 선택한 목소리로 문단을 들어 보고 대화 차례 사이의 전환을 살피세요. 유용한 결과는 의도적으로 선택한 화자, 명확한 텍스트, 청취자의 재생 환경에 맞는 오디오로 이루어진 표현력 있는 음성 상호작용입니다.",
    "alias_of": null,
    "aliases": [],
    "author": "Microsoft AI",
    "available": null,
    "canonical_model": "microsoft/mai-voice-2.1-flash",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.03000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ],
        "summary": "구성의 전체 요금 정보는 상세 정보에서 확인할 수 있습니다."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "microsoft/mai-voice-2.1-flash",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음",
                "http_status": 400,
                "recovery": "새 생성 요청 전에 표시된 필드를 수정하세요.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다",
                "http_status": null,
                "recovery": "최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "다시 제출하지 말고 정산 대조를 위해 최초 operation_id/X-Client-Request-ID를 보관하세요. 전용 오디오 폴링 라우트는 없습니다."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "바이너리 결과 전체와 헤더를 보관하세요. JSON 또는 여러 출력이 반환되면 모든 데이터 항목을 보관하고 실제로 반환된 서명된 자산 URL을 각각 조회하세요.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "microsoft/mai-voice-2.1-flash"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode 문자"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "cs-CZ-Grant:MAI-Voice-2.1-Flash",
                  "cs-CZ-Harper:MAI-Voice-2.1-Flash",
                  "da-DK-Grant:MAI-Voice-2.1-Flash",
                  "da-DK-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Grant:MAI-Voice-2.1-Flash",
                  "de-DE-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Klaus:MAI-Voice-2.1-Flash",
                  "de-DE-Mia:MAI-Voice-2.1-Flash",
                  "en-AU-Isla:MAI-Voice-2.1-Flash",
                  "en-GB-Emily:MAI-Voice-2.1-Flash",
                  "en-GB-Harry:MAI-Voice-2.1-Flash",
                  "en-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "en-IN-Priya:MAI-Voice-2.1-Flash",
                  "en-US-Ethan:MAI-Voice-2.1-Flash",
                  "en-US-Grant:MAI-Voice-2.1-Flash",
                  "en-US-Harper:MAI-Voice-2.1-Flash",
                  "en-US-Iris:MAI-Voice-2.1-Flash",
                  "en-US-Jasper:MAI-Voice-2.1-Flash",
                  "en-US-Olivia:MAI-Voice-2.1-Flash",
                  "en-US-Sage:MAI-Voice-2.1-Flash",
                  "es-ES-Marta:MAI-Voice-2.1-Flash",
                  "es-MX-Alejo:MAI-Voice-2.1-Flash",
                  "es-MX-Grant:MAI-Voice-2.1-Flash",
                  "es-MX-Harper:MAI-Voice-2.1-Flash",
                  "es-MX-Valeria:MAI-Voice-2.1-Flash",
                  "fi-FI-Grant:MAI-Voice-2.1-Flash",
                  "fi-FI-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Grant:MAI-Voice-2.1-Flash",
                  "fr-FR-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Marc:MAI-Voice-2.1-Flash",
                  "fr-FR-Soleil:MAI-Voice-2.1-Flash",
                  "hi-IN-Arjun:MAI-Voice-2.1-Flash",
                  "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "hi-IN-Grant:MAI-Voice-2.1-Flash",
                  "hi-IN-Harper:MAI-Voice-2.1-Flash",
                  "hi-IN-Kavya:MAI-Voice-2.1-Flash",
                  "hi-IN-Priya:MAI-Voice-2.1-Flash",
                  "hu-HU-Bence:MAI-Voice-2.1-Flash",
                  "hu-HU-Grant:MAI-Voice-2.1-Flash",
                  "hu-HU-Harper:MAI-Voice-2.1-Flash",
                  "hu-HU-Levente:MAI-Voice-2.1-Flash",
                  "hu-HU-Lilla:MAI-Voice-2.1-Flash",
                  "hu-HU-Reka:MAI-Voice-2.1-Flash",
                  "id-ID-Grant:MAI-Voice-2.1-Flash",
                  "id-ID-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Grant:MAI-Voice-2.1-Flash",
                  "it-IT-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Luca:MAI-Voice-2.1-Flash",
                  "it-IT-Rosa:MAI-Voice-2.1-Flash",
                  "ko-KR-Grant:MAI-Voice-2.1-Flash",
                  "ko-KR-Haena:MAI-Voice-2.1-Flash",
                  "ko-KR-Harper:MAI-Voice-2.1-Flash",
                  "ko-KR-Junho:MAI-Voice-2.1-Flash",
                  "nb-NO-Grant:MAI-Voice-2.1-Flash",
                  "nb-NO-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Grant:MAI-Voice-2.1-Flash",
                  "nl-NL-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Sander:MAI-Voice-2.1-Flash",
                  "pl-PL-Grant:MAI-Voice-2.1-Flash",
                  "pl-PL-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Caio:MAI-Voice-2.1-Flash",
                  "pt-BR-Grant:MAI-Voice-2.1-Flash",
                  "pt-BR-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Luana:MAI-Voice-2.1-Flash",
                  "pt-BR-Pedro:MAI-Voice-2.1-Flash",
                  "pt-BR-Rafael:MAI-Voice-2.1-Flash",
                  "pt-PT-Grant:MAI-Voice-2.1-Flash",
                  "pt-PT-Harper:MAI-Voice-2.1-Flash",
                  "pt-PT-Rui:MAI-Voice-2.1-Flash",
                  "ro-RO-Andrei:MAI-Voice-2.1-Flash",
                  "ro-RO-Elena:MAI-Voice-2.1-Flash",
                  "ro-RO-Grant:MAI-Voice-2.1-Flash",
                  "ro-RO-Harper:MAI-Voice-2.1-Flash",
                  "ro-RO-Ioana:MAI-Voice-2.1-Flash",
                  "ro-RO-Radu:MAI-Voice-2.1-Flash",
                  "ru-RU-Grant:MAI-Voice-2.1-Flash",
                  "ru-RU-Harper:MAI-Voice-2.1-Flash",
                  "ru-RU-Lev:MAI-Voice-2.1-Flash",
                  "ru-RU-Masha:MAI-Voice-2.1-Flash",
                  "sv-SE-Grant:MAI-Voice-2.1-Flash",
                  "sv-SE-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Grant:MAI-Voice-2.1-Flash",
                  "th-TH-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Krit:MAI-Voice-2.1-Flash",
                  "th-TH-Nattapong:MAI-Voice-2.1-Flash",
                  "tr-TR-Aydin:MAI-Voice-2.1-Flash",
                  "tr-TR-Elif:MAI-Voice-2.1-Flash",
                  "tr-TR-Grant:MAI-Voice-2.1-Flash",
                  "tr-TR-Harper:MAI-Voice-2.1-Flash",
                  "vi-VN-Grant:MAI-Voice-2.1-Flash",
                  "vi-VN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Bo:MAI-Voice-2.1-Flash",
                  "zh-CN-Grant:MAI-Voice-2.1-Flash",
                  "zh-CN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Lan:MAI-Voice-2.1-Flash",
                  "zh-CN-Mei:MAI-Voice-2.1-Flash",
                  "zh-CN-Wei:MAI-Voice-2.1-Flash"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "이 모델 프로필에 있는 정확한 음성을 선택하세요.",
            "입력 문자 수와 오디오 초는 서로 다른 측정 단위입니다."
          ],
          "input": {
            "content_type": "application/json",
            "input": "정확한 UTF-8 텍스트; 정규화 없이 계산한 유니코드 문자 수",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "cs-CZ-Grant:MAI-Voice-2.1-Flash",
              "cs-CZ-Harper:MAI-Voice-2.1-Flash",
              "da-DK-Grant:MAI-Voice-2.1-Flash",
              "da-DK-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Grant:MAI-Voice-2.1-Flash",
              "de-DE-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Klaus:MAI-Voice-2.1-Flash",
              "de-DE-Mia:MAI-Voice-2.1-Flash",
              "en-AU-Isla:MAI-Voice-2.1-Flash",
              "en-GB-Emily:MAI-Voice-2.1-Flash",
              "en-GB-Harry:MAI-Voice-2.1-Flash",
              "en-IN-Dhruv:MAI-Voice-2.1-Flash",
              "en-IN-Priya:MAI-Voice-2.1-Flash",
              "en-US-Ethan:MAI-Voice-2.1-Flash",
              "en-US-Grant:MAI-Voice-2.1-Flash",
              "en-US-Harper:MAI-Voice-2.1-Flash",
              "en-US-Iris:MAI-Voice-2.1-Flash",
              "en-US-Jasper:MAI-Voice-2.1-Flash",
              "en-US-Olivia:MAI-Voice-2.1-Flash",
              "en-US-Sage:MAI-Voice-2.1-Flash",
              "es-ES-Marta:MAI-Voice-2.1-Flash",
              "es-MX-Alejo:MAI-Voice-2.1-Flash",
              "es-MX-Grant:MAI-Voice-2.1-Flash",
              "es-MX-Harper:MAI-Voice-2.1-Flash",
              "es-MX-Valeria:MAI-Voice-2.1-Flash",
              "fi-FI-Grant:MAI-Voice-2.1-Flash",
              "fi-FI-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Grant:MAI-Voice-2.1-Flash",
              "fr-FR-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Marc:MAI-Voice-2.1-Flash",
              "fr-FR-Soleil:MAI-Voice-2.1-Flash",
              "hi-IN-Arjun:MAI-Voice-2.1-Flash",
              "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
              "hi-IN-Grant:MAI-Voice-2.1-Flash",
              "hi-IN-Harper:MAI-Voice-2.1-Flash",
              "hi-IN-Kavya:MAI-Voice-2.1-Flash",
              "hi-IN-Priya:MAI-Voice-2.1-Flash",
              "hu-HU-Bence:MAI-Voice-2.1-Flash",
              "hu-HU-Grant:MAI-Voice-2.1-Flash",
              "hu-HU-Harper:MAI-Voice-2.1-Flash",
              "hu-HU-Levente:MAI-Voice-2.1-Flash",
              "hu-HU-Lilla:MAI-Voice-2.1-Flash",
              "hu-HU-Reka:MAI-Voice-2.1-Flash",
              "id-ID-Grant:MAI-Voice-2.1-Flash",
              "id-ID-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Grant:MAI-Voice-2.1-Flash",
              "it-IT-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Luca:MAI-Voice-2.1-Flash",
              "it-IT-Rosa:MAI-Voice-2.1-Flash",
              "ko-KR-Grant:MAI-Voice-2.1-Flash",
              "ko-KR-Haena:MAI-Voice-2.1-Flash",
              "ko-KR-Harper:MAI-Voice-2.1-Flash",
              "ko-KR-Junho:MAI-Voice-2.1-Flash",
              "nb-NO-Grant:MAI-Voice-2.1-Flash",
              "nb-NO-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Grant:MAI-Voice-2.1-Flash",
              "nl-NL-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Sander:MAI-Voice-2.1-Flash",
              "pl-PL-Grant:MAI-Voice-2.1-Flash",
              "pl-PL-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Caio:MAI-Voice-2.1-Flash",
              "pt-BR-Grant:MAI-Voice-2.1-Flash",
              "pt-BR-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Luana:MAI-Voice-2.1-Flash",
              "pt-BR-Pedro:MAI-Voice-2.1-Flash",
              "pt-BR-Rafael:MAI-Voice-2.1-Flash",
              "pt-PT-Grant:MAI-Voice-2.1-Flash",
              "pt-PT-Harper:MAI-Voice-2.1-Flash",
              "pt-PT-Rui:MAI-Voice-2.1-Flash",
              "ro-RO-Andrei:MAI-Voice-2.1-Flash",
              "ro-RO-Elena:MAI-Voice-2.1-Flash",
              "ro-RO-Grant:MAI-Voice-2.1-Flash",
              "ro-RO-Harper:MAI-Voice-2.1-Flash",
              "ro-RO-Ioana:MAI-Voice-2.1-Flash",
              "ro-RO-Radu:MAI-Voice-2.1-Flash",
              "ru-RU-Grant:MAI-Voice-2.1-Flash",
              "ru-RU-Harper:MAI-Voice-2.1-Flash",
              "ru-RU-Lev:MAI-Voice-2.1-Flash",
              "ru-RU-Masha:MAI-Voice-2.1-Flash",
              "sv-SE-Grant:MAI-Voice-2.1-Flash",
              "sv-SE-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Grant:MAI-Voice-2.1-Flash",
              "th-TH-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Krit:MAI-Voice-2.1-Flash",
              "th-TH-Nattapong:MAI-Voice-2.1-Flash",
              "tr-TR-Aydin:MAI-Voice-2.1-Flash",
              "tr-TR-Elif:MAI-Voice-2.1-Flash",
              "tr-TR-Grant:MAI-Voice-2.1-Flash",
              "tr-TR-Harper:MAI-Voice-2.1-Flash",
              "vi-VN-Grant:MAI-Voice-2.1-Flash",
              "vi-VN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Bo:MAI-Voice-2.1-Flash",
              "zh-CN-Grant:MAI-Voice-2.1-Flash",
              "zh-CN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Lan:MAI-Voice-2.1-Flash",
              "zh-CN-Mei:MAI-Voice-2.1-Flash",
              "zh-CN-Wei:MAI-Voice-2.1-Flash"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "실제로 반환된 task_id 또는 미디어 라이브러리 기록",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "768d1dc9b9da20eb0942",
            "label": "Microsoft AI: MAI-Voice-2.1-Flash",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "기본 설정"
                },
                "label": "Microsoft AI: MAI-Voice-2.1-Flash · 기본 설정",
                "units": [
                  {
                    "amount": "0.000030",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "a7f384d81db64c9b1e8c0855",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"microsoft/mai-voice-2.1-flash\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"cs-CZ-Grant:MAI-Voice-2.1-Flash\", \"cs-CZ-Harper:MAI-Voice-2.1-Flash\", \"da-DK-Grant:MAI-Voice-2.1-Flash\", \"da-DK-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Grant:MAI-Voice-2.1-Flash\", \"de-DE-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Klaus:MAI-Voice-2.1-Flash\", \"de-DE-Mia:MAI-Voice-2.1-Flash\", \"en-AU-Isla:MAI-Voice-2.1-Flash\", \"en-GB-Emily:MAI-Voice-2.1-Flash\", \"en-GB-Harry:MAI-Voice-2.1-Flash\", \"en-IN-Dhruv:MAI-Voice-2.1-Flash\", \"en-IN-Priya:MAI-Voice-2.1-Flash\", \"en-US-Ethan:MAI-Voice-2.1-Flash\", \"en-US-Grant:MAI-Voice-2.1-Flash\", \"en-US-Harper:MAI-Voice-2.1-Flash\", \"en-US-Iris:MAI-Voice-2.1-Flash\", \"en-US-Jasper:MAI-Voice-2.1-Flash\", \"en-US-Olivia:MAI-Voice-2.1-Flash\", \"en-US-Sage:MAI-Voice-2.1-Flash\", \"es-ES-Marta:MAI-Voice-2.1-Flash\", \"es-MX-Alejo:MAI-Voice-2.1-Flash\", \"es-MX-Grant:MAI-Voice-2.1-Flash\", \"es-MX-Harper:MAI-Voice-2.1-Flash\", \"es-MX-Valeria:MAI-Voice-2.1-Flash\", \"fi-FI-Grant:MAI-Voice-2.1-Flash\", \"fi-FI-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Grant:MAI-Voice-2.1-Flash\", \"fr-FR-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Marc:MAI-Voice-2.1-Flash\", \"fr-FR-Soleil:MAI-Voice-2.1-Flash\", \"hi-IN-Arjun:MAI-Voice-2.1-Flash\", \"hi-IN-Dhruv:MAI-Voice-2.1-Flash\", \"hi-IN-Grant:MAI-Voice-2.1-Flash\", \"hi-IN-Harper:MAI-Voice-2.1-Flash\", \"hi-IN-Kavya:MAI-Voice-2.1-Flash\", \"hi-IN-Priya:MAI-Voice-2.1-Flash\", \"hu-HU-Bence:MAI-Voice-2.1-Flash\", \"hu-HU-Grant:MAI-Voice-2.1-Flash\", \"hu-HU-Harper:MAI-Voice-2.1-Flash\", \"hu-HU-Levente:MAI-Voice-2.1-Flash\", \"hu-HU-Lilla:MAI-Voice-2.1-Flash\", \"hu-HU-Reka:MAI-Voice-2.1-Flash\", \"id-ID-Grant:MAI-Voice-2.1-Flash\", \"id-ID-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Grant:MAI-Voice-2.1-Flash\", \"it-IT-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Luca:MAI-Voice-2.1-Flash\", \"it-IT-Rosa:MAI-Voice-2.1-Flash\", \"ko-KR-Grant:MAI-Voice-2.1-Flash\", \"ko-KR-Haena:MAI-Voice-2.1-Flash\", \"ko-KR-Harper:MAI-Voice-2.1-Flash\", \"ko-KR-Junho:MAI-Voice-2.1-Flash\", \"nb-NO-Grant:MAI-Voice-2.1-Flash\", \"nb-NO-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Grant:MAI-Voice-2.1-Flash\", \"nl-NL-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Sander:MAI-Voice-2.1-Flash\", \"pl-PL-Grant:MAI-Voice-2.1-Flash\", \"pl-PL-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Caio:MAI-Voice-2.1-Flash\", \"pt-BR-Grant:MAI-Voice-2.1-Flash\", \"pt-BR-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Luana:MAI-Voice-2.1-Flash\", \"pt-BR-Pedro:MAI-Voice-2.1-Flash\", \"pt-BR-Rafael:MAI-Voice-2.1-Flash\", \"pt-PT-Grant:MAI-Voice-2.1-Flash\", \"pt-PT-Harper:MAI-Voice-2.1-Flash\", \"pt-PT-Rui:MAI-Voice-2.1-Flash\", \"ro-RO-Andrei:MAI-Voice-2.1-Flash\", \"ro-RO-Elena:MAI-Voice-2.1-Flash\", \"ro-RO-Grant:MAI-Voice-2.1-Flash\", \"ro-RO-Harper:MAI-Voice-2.1-Flash\", \"ro-RO-Ioana:MAI-Voice-2.1-Flash\", \"ro-RO-Radu:MAI-Voice-2.1-Flash\", \"ru-RU-Grant:MAI-Voice-2.1-Flash\", \"ru-RU-Harper:MAI-Voice-2.1-Flash\", \"ru-RU-Lev:MAI-Voice-2.1-Flash\", \"ru-RU-Masha:MAI-Voice-2.1-Flash\", \"sv-SE-Grant:MAI-Voice-2.1-Flash\", \"sv-SE-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Grant:MAI-Voice-2.1-Flash\", \"th-TH-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Krit:MAI-Voice-2.1-Flash\", \"th-TH-Nattapong:MAI-Voice-2.1-Flash\", \"tr-TR-Aydin:MAI-Voice-2.1-Flash\", \"tr-TR-Elif:MAI-Voice-2.1-Flash\", \"tr-TR-Grant:MAI-Voice-2.1-Flash\", \"tr-TR-Harper:MAI-Voice-2.1-Flash\", \"vi-VN-Grant:MAI-Voice-2.1-Flash\", \"vi-VN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Bo:MAI-Voice-2.1-Flash\", \"zh-CN-Grant:MAI-Voice-2.1-Flash\", \"zh-CN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Lan:MAI-Voice-2.1-Flash\", \"zh-CN-Mei:MAI-Voice-2.1-Flash\", \"zh-CN-Wei:MAI-Voice-2.1-Flash\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.03000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "microsoft/mai-voice-2.1-flash",
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra"
      }
    ],
    "name": "Microsoft AI: MAI-Voice-2.1-Flash",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "hosted_reference"
        },
        "dimensions": {
          "variant": null
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000030",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "variant": null
            },
            "key": "pricing.prompt",
            "label": "prompt",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_not_separately_charged_output",
            "conditions": {
              "variant": null
            },
            "key": "pricing.completion",
            "label": "completion",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "not_separately_charged_output"
          }
        ]
      }
    ],
    "public_id": "microsoft/mai-voice-2.1-flash",
    "short": "Microsoft AI의 MAI-Voice-2.1-Flash는 대화형 음성 애플리케이션을 위해 23개 언어의 표현력 있는 음성을 생성합니다. 선별된 목소리 라이브러리를 제공하며 스트리밍, 다중 화자, 문장 수준의 표현 제어를 지원합니다."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Microsoft AI의 MAI-Voice-2.1-Flash는 대화형 음성 애플리케이션을 위해 23개 언어의 표현력 있는 음성을 생성합니다. 선별된 목소리 라이브러리를 제공하며 스트리밍, 다중 화자, 문장 수준의 표현 제어를 지원합니다.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "025857637017bbbe5aaeefc4dd428d15fa3123561a63aefeafeedcaff814d0d6",
    "renderer_sha256": "6825a317438b70ab0939441dcebefece462384e77f7e96cce899605c4b208caa"
  },
  "sourceRevision": "2ee2ff2749e3b0433fb55e38d245dccd5011ca62dd8e605c262af291c3ab1749"
}
