{
  "aboutHtml": "<p>Uma variante H3 rápida submetida a pós-treino</p><p>MiniMax H3 Max é uma variante do modelo base MiniMax H3 submetida a pós-treino, otimizada para geração mais rápida, cumprimento das instruções e qualidade audiovisual. A variante foi desenvolvida através de pós-treino pela fal Research. Mantém um contexto multimodal unificado e imagem e som sincronizados de forma nativa. A velocidade é uma prioridade de conceção, e não um tempo fixo de conclusão para cada instrução, duração ou aplicação.</p><p>Mantenha Max distinto do sistema H3 original e da variante separada Max Turbo. A interface atual da MiniMax apresenta Max a 480P ou 768P, com 768P por predefinição, 24 fotogramas por segundo e uma duração inteira entre 5 e 15 segundos. O seu fluxo Max documentado não oferece a definição 2K do sistema H3 original nem uma saída de quatro segundos.</p><p>Da instrução ao plano</p><p>Todas as gerações incluem instruções em texto não vazias, até 7 000 caracteres por elemento de texto. Descreva o sujeito, a composição inicial, a ação e o resultado e torne depois claras as indicações de câmara e som. Numa revelação curta de um objeto, identifique o que o espetador deve ver primeiro, como o objeto entra em cena e como o plano deve terminar.</p><p>Uma instrução útil de cinco segundos pode descrever uma chávena de cerâmica numa mesa de madeira, uma mão a pousar um pires ao seu lado, uma pequena aproximação da câmara e o som da cerâmica a tocar na madeira. Mantenha a ação suficientemente pequena para caber na duração selecionada e inspecione se o movimento e o som devolvidos acompanham o mesmo acontecimento.</p><p>Criação guiada por fotogramas</p><p>O fabricante documenta um fotograma inicial, um fotograma final ou ambos. Uma primeira imagem estabelece onde o clipe começa; uma última imagem estabelece o estado visual final. Explique o movimento que os liga, incluindo alterações de pose, posição de objetos, câmara ou iluminação. Numa transição entre dois fotogramas, evite instruções que introduzam uma cena incompatível entre os extremos.</p><p>A saída guiada por fotogramas obtém a proporção a partir da imagem de entrada. Para trabalho apenas em texto, escolha uma proporção concreta entre 21:9, 16:9, 4:3, 1:1, 3:4 ou 9:16. O trabalho guiado por referências pode utilizar uma proporção adaptativa ou uma das opções explícitas documentadas. Componha a referência ou a cena escrita para o enquadramento de destino, em vez de presumir que a mesma disposição funciona igualmente bem na vertical e na horizontal.</p><p>Referências multimodais</p><p>O esquema atual de geração Max da MiniMax documenta também imagens, vídeo e áudio de referência. Indique o que cada um deve influenciar: a identidade de uma personagem, um ambiente, um padrão de movimento, uma trajetória de câmara, o timbre de voz ou uma característica sonora. Os papéis de primeiro/último fotograma e os papéis de recursos multimédia de referência são mutuamente exclusivos nessa interface.</p><p>Num plano de personagem, identifique separadamente a referência de aspeto e a referência de movimento e forneça depois a ação e a fala pretendidas. Uma referência de voz que estabelece a interpretação é diferente de copiar o seu sinal de áudio completo. Seja explícito nas instruções quanto às características a conservar e às alterações a fazer e reveja o clipe audiovisual efetivo face a cada papel de referência.</p><p>Expansão de instruções</p><p>A definição de expansão específica de Max oferece as opções disabled, balanced e quality, com balanced por predefinição. Escolha disabled quando as instruções fornecidas devem passar sem expansão; utilize um modo de expansão documentado quando desejar interpretação adicional. Conserve as instruções originais para distinguir uma alteração introduzida durante a expansão do conteúdo pedido.</p><p>Descreva o som como parte da cena. Identifique os sons físicos, o ambiente e quaisquer palavras faladas e separe-os da música de fundo destinada apenas ao público. Forneça a fala exata e identifique quem a deve dizer, em vez de pedir diálogo não especificado. Ouça o resultado para além de o ver; uma imagem convincente não comprova que a redação falada ou o ritmo temporal estejam corretos.</p><p>Preparação das entradas e limites</p><p>O esquema atual do fabricante aceita imagens JPG, JPEG, PNG, WebP, HEIC ou HEIF, até 30 MB cada, com lados entre 256 e 5 760 píxeis e proporções entre 0.4 e 2.5. Os papéis inicial e final permitem uma imagem cada; o modo de referências permite até nove imagens. Preserve uma vista clara do sujeito e dos pormenores que têm de continuar identificáveis.</p><p>O vídeo de referência permite até três clipes MP4 ou MOV, cada um com 2–15 segundos e, em conjunto, no máximo 15 segundos, com um limite de 50 MB por ficheiro. Documenta vídeo H.264 ou H.265, áudio AAC ou MP3, lados entre 256 e 5 760 píxeis, proporções entre 0.4 e 2.5 e taxa de fotogramas entre 23.976 e 60. O áudio de referência permite até três clipes WAV ou MP3, cada um até 15 MB e com 2–15 segundos, em conjunto no máximo 15 segundos. O corpo do pedido tem um limite separado de 64 MB.</p><p>Utilize apenas referências que contribuam para o plano e identifique cada contribuição no texto. Um clipe de movimento curto e relevante é mais fácil de utilizar como orientação do que uma longa coleção de acontecimentos sem relação entre si. Mantenha explícitas a duração pretendida e a resolução de saída para comparar o resultado com as mesmas instruções.</p><p>O resultado concluído</p><p>O fluxo assíncrono do fabricante devolve a identidade de uma tarefa antes de o vídeo concluído estar disponível. A sua interface de consulta de tarefas recupera tarefas dos sete dias anteriores. Guarde o clipe efetivamente devolvido e a sua especificação para montagem ou revisão adicional; um identificador de tarefa não é o recurso audiovisual. Os endereços de transferência têm prazo de validade, pelo que deve conservar o próprio ficheiro quando guardar um resultado selecionado.</p><p>Reveja a continuidade dos sujeitos, o movimento, o texto visível, o diálogo e a sincronização do som no tamanho em que o clipe será utilizado. Utilize comentários concretos para outras instruções criativas: o gesto que mudou, a fala omitida ou o enquadramento que exige ajuste. O resultado útil é um plano audiovisual curto ligado ao conteúdo fornecido e às suas relações explícitas com as referências.</p>",
  "aboutText": "Uma variante H3 rápida submetida a pós-treino\n\nMiniMax H3 Max é uma variante do modelo base MiniMax H3 submetida a pós-treino, otimizada para geração mais rápida, cumprimento das instruções e qualidade audiovisual. A variante foi desenvolvida através de pós-treino pela fal Research. Mantém um contexto multimodal unificado e imagem e som sincronizados de forma nativa. A velocidade é uma prioridade de conceção, e não um tempo fixo de conclusão para cada instrução, duração ou aplicação.\n\nMantenha Max distinto do sistema H3 original e da variante separada Max Turbo. A interface atual da MiniMax apresenta Max a 480P ou 768P, com 768P por predefinição, 24 fotogramas por segundo e uma duração inteira entre 5 e 15 segundos. O seu fluxo Max documentado não oferece a definição 2K do sistema H3 original nem uma saída de quatro segundos.\n\nDa instrução ao plano\n\nTodas as gerações incluem instruções em texto não vazias, até 7 000 caracteres por elemento de texto. Descreva o sujeito, a composição inicial, a ação e o resultado e torne depois claras as indicações de câmara e som. Numa revelação curta de um objeto, identifique o que o espetador deve ver primeiro, como o objeto entra em cena e como o plano deve terminar.\n\nUma instrução útil de cinco segundos pode descrever uma chávena de cerâmica numa mesa de madeira, uma mão a pousar um pires ao seu lado, uma pequena aproximação da câmara e o som da cerâmica a tocar na madeira. Mantenha a ação suficientemente pequena para caber na duração selecionada e inspecione se o movimento e o som devolvidos acompanham o mesmo acontecimento.\n\nCriação guiada por fotogramas\n\nO fabricante documenta um fotograma inicial, um fotograma final ou ambos. Uma primeira imagem estabelece onde o clipe começa; uma última imagem estabelece o estado visual final. Explique o movimento que os liga, incluindo alterações de pose, posição de objetos, câmara ou iluminação. Numa transição entre dois fotogramas, evite instruções que introduzam uma cena incompatível entre os extremos.\n\nA saída guiada por fotogramas obtém a proporção a partir da imagem de entrada. Para trabalho apenas em texto, escolha uma proporção concreta entre 21:9, 16:9, 4:3, 1:1, 3:4 ou 9:16. O trabalho guiado por referências pode utilizar uma proporção adaptativa ou uma das opções explícitas documentadas. Componha a referência ou a cena escrita para o enquadramento de destino, em vez de presumir que a mesma disposição funciona igualmente bem na vertical e na horizontal.\n\nReferências multimodais\n\nO esquema atual de geração Max da MiniMax documenta também imagens, vídeo e áudio de referência. Indique o que cada um deve influenciar: a identidade de uma personagem, um ambiente, um padrão de movimento, uma trajetória de câmara, o timbre de voz ou uma característica sonora. Os papéis de primeiro/último fotograma e os papéis de recursos multimédia de referência são mutuamente exclusivos nessa interface.\n\nNum plano de personagem, identifique separadamente a referência de aspeto e a referência de movimento e forneça depois a ação e a fala pretendidas. Uma referência de voz que estabelece a interpretação é diferente de copiar o seu sinal de áudio completo. Seja explícito nas instruções quanto às características a conservar e às alterações a fazer e reveja o clipe audiovisual efetivo face a cada papel de referência.\n\nExpansão de instruções\n\nA definição de expansão específica de Max oferece as opções disabled, balanced e quality, com balanced por predefinição. Escolha disabled quando as instruções fornecidas devem passar sem expansão; utilize um modo de expansão documentado quando desejar interpretação adicional. Conserve as instruções originais para distinguir uma alteração introduzida durante a expansão do conteúdo pedido.\n\nDescreva o som como parte da cena. Identifique os sons físicos, o ambiente e quaisquer palavras faladas e separe-os da música de fundo destinada apenas ao público. Forneça a fala exata e identifique quem a deve dizer, em vez de pedir diálogo não especificado. Ouça o resultado para além de o ver; uma imagem convincente não comprova que a redação falada ou o ritmo temporal estejam corretos.\n\nPreparação das entradas e limites\n\nO esquema atual do fabricante aceita imagens JPG, JPEG, PNG, WebP, HEIC ou HEIF, até 30 MB cada, com lados entre 256 e 5 760 píxeis e proporções entre 0.4 e 2.5. Os papéis inicial e final permitem uma imagem cada; o modo de referências permite até nove imagens. Preserve uma vista clara do sujeito e dos pormenores que têm de continuar identificáveis.\n\nO vídeo de referência permite até três clipes MP4 ou MOV, cada um com 2–15 segundos e, em conjunto, no máximo 15 segundos, com um limite de 50 MB por ficheiro. Documenta vídeo H.264 ou H.265, áudio AAC ou MP3, lados entre 256 e 5 760 píxeis, proporções entre 0.4 e 2.5 e taxa de fotogramas entre 23.976 e 60. O áudio de referência permite até três clipes WAV ou MP3, cada um até 15 MB e com 2–15 segundos, em conjunto no máximo 15 segundos. O corpo do pedido tem um limite separado de 64 MB.\n\nUtilize apenas referências que contribuam para o plano e identifique cada contribuição no texto. Um clipe de movimento curto e relevante é mais fácil de utilizar como orientação do que uma longa coleção de acontecimentos sem relação entre si. Mantenha explícitas a duração pretendida e a resolução de saída para comparar o resultado com as mesmas instruções.\n\nO resultado concluído\n\nO fluxo assíncrono do fabricante devolve a identidade de uma tarefa antes de o vídeo concluído estar disponível. A sua interface de consulta de tarefas recupera tarefas dos sete dias anteriores. Guarde o clipe efetivamente devolvido e a sua especificação para montagem ou revisão adicional; um identificador de tarefa não é o recurso audiovisual. Os endereços de transferência têm prazo de validade, pelo que deve conservar o próprio ficheiro quando guardar um resultado selecionado.\n\nReveja a continuidade dos sujeitos, o movimento, o texto visível, o diálogo e a sincronização do som no tamanho em que o clipe será utilizado. Utilize comentários concretos para outras instruções criativas: o gesto que mudou, a fala omitida ou o enquadramento que exige ajuste. O resultado útil é um plano audiovisual curto ligado ao conteúdo fornecido e às suas relações explícitas com as referências.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f7e4fd5bb6d64b078999b333177e3e4ab690eeb0e1f12e043342da64768f109d",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "pt-pt",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">MM</span><h2 id=\"sheet-title\">MiniMax: H3 Max</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fechar\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>minimax/hailuo-3-max</code><button type=\"button\" id=\"copy-id\">Copiar ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Secções do cartão do modelo\"><button type=\"button\" data-card-jump=\"overview\">Introdução</button><button type=\"button\" data-card-jump=\"methods\">Entradas e métodos</button><button type=\"button\" data-card-jump=\"pricing\">Tarifários</button><button type=\"button\" data-card-jump=\"examples\">Exemplos</button><button type=\"button\" data-card-jump=\"results\">Resultados</button><button type=\"button\" data-card-jump=\"aliases\">Aliases</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Métodos da 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|videos|/v1/videos|minimax%2Fhailuo-3-max\">Vídeo</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\">Introdução</h3><p class=\"mdesc-full\">MiniMax H3 Max é uma variante H3 rápida, submetida a pós-treino, para vídeo curto com áudio sincronizado. O fluxo documentado da MiniMax suporta texto, imagens de fotogramas e referências multimodais, com saída a 480P ou 768P, duração de 5–15 segundos e opções próprias de expansão de instruções.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceites</dt><dd>Texto · Imagens</dd></div><div><dt>Resultados</dt><dd>Vídeo</dd></div></dl><details class=\"card-about\"><summary>Sobre o modelo</summary><p class=\"note-s\" data-model-method-boundary>Esta descrição apresenta as capacidades do modelo. As entradas, saídas e opções disponíveis no Ailoot para o método selecionado estão indicadas abaixo.</p><div class=\"mabout\" id=\"m-about\"><p>Uma variante H3 rápida submetida a pós-treino</p><p>MiniMax H3 Max é uma variante do modelo base MiniMax H3 submetida a pós-treino, otimizada para geração mais rápida, cumprimento das instruções e qualidade audiovisual. A variante foi desenvolvida através de pós-treino pela fal Research. Mantém um contexto multimodal unificado e imagem e som sincronizados de forma nativa. A velocidade é uma prioridade de conceção, e não um tempo fixo de conclusão para cada instrução, duração ou aplicação.</p><p>Mantenha Max distinto do sistema H3 original e da variante separada Max Turbo. A interface atual da MiniMax apresenta Max a 480P ou 768P, com 768P por predefinição, 24 fotogramas por segundo e uma duração inteira entre 5 e 15 segundos. O seu fluxo Max documentado não oferece a definição 2K do sistema H3 original nem uma saída de quatro segundos.</p><p>Da instrução ao plano</p><p>Todas as gerações incluem instruções em texto não vazias, até 7 000 caracteres por elemento de texto. Descreva o sujeito, a composição inicial, a ação e o resultado e torne depois claras as indicações de câmara e som. Numa revelação curta de um objeto, identifique o que o espetador deve ver primeiro, como o objeto entra em cena e como o plano deve terminar.</p><p>Uma instrução útil de cinco segundos pode descrever uma chávena de cerâmica numa mesa de madeira, uma mão a pousar um pires ao seu lado, uma pequena aproximação da câmara e o som da cerâmica a tocar na madeira. Mantenha a ação suficientemente pequena para caber na duração selecionada e inspecione se o movimento e o som devolvidos acompanham o mesmo acontecimento.</p><p>Criação guiada por fotogramas</p><p>O fabricante documenta um fotograma inicial, um fotograma final ou ambos. Uma primeira imagem estabelece onde o clipe começa; uma última imagem estabelece o estado visual final. Explique o movimento que os liga, incluindo alterações de pose, posição de objetos, câmara ou iluminação. Numa transição entre dois fotogramas, evite instruções que introduzam uma cena incompatível entre os extremos.</p><p>A saída guiada por fotogramas obtém a proporção a partir da imagem de entrada. Para trabalho apenas em texto, escolha uma proporção concreta entre 21:9, 16:9, 4:3, 1:1, 3:4 ou 9:16. O trabalho guiado por referências pode utilizar uma proporção adaptativa ou uma das opções explícitas documentadas. Componha a referência ou a cena escrita para o enquadramento de destino, em vez de presumir que a mesma disposição funciona igualmente bem na vertical e na horizontal.</p><p>Referências multimodais</p><p>O esquema atual de geração Max da MiniMax documenta também imagens, vídeo e áudio de referência. Indique o que cada um deve influenciar: a identidade de uma personagem, um ambiente, um padrão de movimento, uma trajetória de câmara, o timbre de voz ou uma característica sonora. Os papéis de primeiro/último fotograma e os papéis de recursos multimédia de referência são mutuamente exclusivos nessa interface.</p><p>Num plano de personagem, identifique separadamente a referência de aspeto e a referência de movimento e forneça depois a ação e a fala pretendidas. Uma referência de voz que estabelece a interpretação é diferente de copiar o seu sinal de áudio completo. Seja explícito nas instruções quanto às características a conservar e às alterações a fazer e reveja o clipe audiovisual efetivo face a cada papel de referência.</p><p>Expansão de instruções</p><p>A definição de expansão específica de Max oferece as opções disabled, balanced e quality, com balanced por predefinição. Escolha disabled quando as instruções fornecidas devem passar sem expansão; utilize um modo de expansão documentado quando desejar interpretação adicional. Conserve as instruções originais para distinguir uma alteração introduzida durante a expansão do conteúdo pedido.</p><p>Descreva o som como parte da cena. Identifique os sons físicos, o ambiente e quaisquer palavras faladas e separe-os da música de fundo destinada apenas ao público. Forneça a fala exata e identifique quem a deve dizer, em vez de pedir diálogo não especificado. Ouça o resultado para além de o ver; uma imagem convincente não comprova que a redação falada ou o ritmo temporal estejam corretos.</p><p>Preparação das entradas e limites</p><p>O esquema atual do fabricante aceita imagens JPG, JPEG, PNG, WebP, HEIC ou HEIF, até 30 MB cada, com lados entre 256 e 5 760 píxeis e proporções entre 0.4 e 2.5. Os papéis inicial e final permitem uma imagem cada; o modo de referências permite até nove imagens. Preserve uma vista clara do sujeito e dos pormenores que têm de continuar identificáveis.</p><p>O vídeo de referência permite até três clipes MP4 ou MOV, cada um com 2–15 segundos e, em conjunto, no máximo 15 segundos, com um limite de 50 MB por ficheiro. Documenta vídeo H.264 ou H.265, áudio AAC ou MP3, lados entre 256 e 5 760 píxeis, proporções entre 0.4 e 2.5 e taxa de fotogramas entre 23.976 e 60. O áudio de referência permite até três clipes WAV ou MP3, cada um até 15 MB e com 2–15 segundos, em conjunto no máximo 15 segundos. O corpo do pedido tem um limite separado de 64 MB.</p><p>Utilize apenas referências que contribuam para o plano e identifique cada contribuição no texto. Um clipe de movimento curto e relevante é mais fácil de utilizar como orientação do que uma longa coleção de acontecimentos sem relação entre si. Mantenha explícitas a duração pretendida e a resolução de saída para comparar o resultado com as mesmas instruções.</p><p>O resultado concluído</p><p>O fluxo assíncrono do fabricante devolve a identidade de uma tarefa antes de o vídeo concluído estar disponível. A sua interface de consulta de tarefas recupera tarefas dos sete dias anteriores. Guarde o clipe efetivamente devolvido e a sua especificação para montagem ou revisão adicional; um identificador de tarefa não é o recurso audiovisual. Os endereços de transferência têm prazo de validade, pelo que deve conservar o próprio ficheiro quando guardar um resultado selecionado.</p><p>Reveja a continuidade dos sujeitos, o movimento, o texto visível, o diálogo e a sincronização do som no tamanho em que o clipe será utilizado. Utilize comentários concretos para outras instruções criativas: o gesto que mudou, a fala omitida ou o enquadramento que exige ajuste. O resultado útil é um plano audiovisual curto ligado ao conteúdo fornecido e às suas relações explícitas com as referências.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponível no Ailoot · entradas e métodos</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Vídeo</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Entrada</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Saída</dt><dd><code>video</code></dd></div><div><dt>Formato de saída</dt><dd>bytes MP4 originais; sem normalização nem transcodificação</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valores e limites</th><th>Predefinição</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obrigatório</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>minimax/hailuo-3-max</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obrigatório</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>integer</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obrigatório</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15</div><div>Mínimo: 1</div><div>Máximo: 600</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>768p, 480p</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>21:9, 16:9, 4:3, 1:1, 3:4, 9:16</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>boolean</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>false</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>array</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>Número mínimo de elementos: 1</div><div>Número máximo de elementos: 2</div><div>Conteúdo de entrada: Matriz de objetos de fotograma. Cada objeto tem type=image_url, image_url com url e frame_type. Utilize um URL HTTPS de imagem e defina frame_type como first_frame ou last_frame. Cada função de fotograma aparece, no máximo, uma vez.</div><div>Chaves exatas: type, image_url, frame_type</div><div>Condições: Estas chaves descrevem cada objeto de fotograma; image_url contém apenas url. Omita frame_images num pedido apenas de texto.</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>array</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span><div>Padrão: ^https://</div></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>object</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores e limites\"><span class=\"card-cell-label\">Valores e limites</span></td><td data-cell-label=\"Predefinição\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinição</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinações de materiais de entrada</summary><p class=\"note-s\"><b>Texto para vídeo</b> · Uma instrução escrita. · Obrigatório: model, prompt, duration</p><p class=\"note-s\"><code>Forneça prompt como texto e duration em segundos inteiros. Escolha uma resolução suportada e, se necessário, uma proporção.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Tipo: string · minimax/hailuo-3-max</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Tipo: string · Número máximo de bytes UTF-8: 10 000 · São obrigatórios caracteres que não sejam espaços: Sim</p><p class=\"note-s\"><b>Imagem para vídeo</b> · Uma instrução escrita e uma imagem do primeiro fotograma. · Obrigatório: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images é uma matriz. Cada objeto de fotograma tem type, image_url e frame_type; image_url contém url. Defina type como image_url. Utilize first_frame com um last_frame opcional. Cada função de fotograma aparece, no máximo, uma vez. Forneça um URL HTTPS público de imagem para cada fotograma. Escolha uma resolução suportada e, se necessário, uma proporção.</code></p><p class=\"note-s\">Chaves exatas: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Tipo: string · minimax/hailuo-3-max</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Tipo: string · Número máximo de bytes UTF-8: 10 000 · São obrigatórios caracteres que não sejam espaços: Sim</p></details><details class=\"note-s\" data-method-contract><summary>Parâmetros e ciclo de vida do método</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parâmetro</th><th>Contrato</th></tr></thead><tbody><tr><th data-cell-label=\"Parâmetro\" scope=\"row\"><span class=\"card-cell-label\">Parâmetro</span><code>content_type</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>application/json</td></tr><tr><th data-cell-label=\"Parâmetro\" scope=\"row\"><span class=\"card-cell-label\">Parâmetro</span><code>required</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Parâmetro\" scope=\"row\"><span class=\"card-cell-label\">Parâmetro</span><code>material_types</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>text, image</td></tr><tr><th data-cell-label=\"Parâmetro\" scope=\"row\"><span class=\"card-cell-label\">Parâmetro</span><code>additional_properties</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>false</td></tr><tr><th data-cell-label=\"Parâmetro\" scope=\"row\"><span class=\"card-cell-label\">Parâmetro</span><code>optional_controls</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Ciclo de vida: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifários</h3><div class=\"card-result-process\" data-billing-basis><h5>Cálculo do custo final</h5><p class=\"note-s\">As tarifas apresentadas permitem estimar o custo antes da geração. O montante final cobrado é calculado a partir do custo registado para a geração original. A duração medida do resultado e as quantidades previstas não correspondem à quantidade final faturável.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>As referências tarifárias não acrescentam opções ao pedido. Os parâmetros suportados constam do método selecionado.</p><dl data-price-conditions><dt>Modo rápido</dt><dd>Não especificado <span class=\"note-s\">Quando o modo rápido está selecionado</span></dd><dt>Modo flex</dt><dd>Não especificado <span class=\"note-s\">Quando o modo flex está selecionado</span></dd><dt>Esforço máximo de raciocínio</dt><dd>Não especificado <span class=\"note-s\">Quando o esforço máximo de raciocínio usa o ajuste predefinido (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifas estimadas para comparação</h4><h4>Preços por configuração</h4><p class=\"note-s\">Associe cada custo às condições apresentadas. Use uma única tarifa para cada conjunto de configurações alternativas.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuração</th><th>Tabela de tarifas</th><th>Quantidade prevista</th><th>Componente do custo</th><th>Unidade de faturação</th><th>Condições de faturação</th><th>Custo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Tarifas base por token</th><td data-cell-label=\"Tabela de tarifas\"><span class=\"card-cell-label\">Tabela de tarifas</span>Tarifa base</td><td data-cell-label=\"Quantidade prevista\"><span class=\"card-cell-label\">Quantidade prevista</span>—</td><td data-cell-label=\"Componente do custo\"><span class=\"card-cell-label\">Componente do custo</span>—</td><td data-cell-label=\"Unidade de faturação\"><span class=\"card-cell-label\">Unidade de faturação</span>—</td><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>—</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Entrada · Tokens de entrada · Estimativa apenas para comparação</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Saída · Tokens de saída · Estimativa apenas para comparação</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Leitura da cache · Estimativa apenas para comparação</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escrita na cache · Estimativa apenas para comparação</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escrita na cache, 1 hora · Estimativa apenas para comparação</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Saída de vídeo · tarifa de referência</th><td data-cell-label=\"Tabela de tarifas\"><span class=\"card-cell-label\">Tabela de tarifas</span>—</td><td data-cell-label=\"Quantidade prevista\"><span class=\"card-cell-label\">Quantidade prevista</span>—</td><td data-cell-label=\"Componente do custo\"><span class=\"card-cell-label\">Componente do custo</span><code>reference_output_rate</code></td><td data-cell-label=\"Unidade de faturação\"><span class=\"card-cell-label\">Unidade de faturação</span>por segundo de saída</td><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>—</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Tarifa de referência por segundo de vídeo de saída · Estimativa apenas para comparação</span> <b>$0.16</b> <span class=\"price-unit\">por segundo de saída</span></div></td></tr><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Preço do vídeo</th><td data-cell-label=\"Tabela de tarifas\"><span class=\"card-cell-label\">Tabela de tarifas</span>—</td><td data-cell-label=\"Quantidade prevista\"><span class=\"card-cell-label\">Quantidade prevista</span>—</td><td data-cell-label=\"Componente do custo\"><span class=\"card-cell-label\">Componente do custo</span>—</td><td data-cell-label=\"Unidade de faturação\"><span class=\"card-cell-label\">Unidade de faturação</span>por segundo de vídeo</td><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>resolution: 480p</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Preço do vídeo · Estimativa apenas para comparação</span> <b>$0.1</b> <span class=\"price-unit\">por segundo de vídeo</span></div></td></tr><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Preço do vídeo</th><td data-cell-label=\"Tabela de tarifas\"><span class=\"card-cell-label\">Tabela de tarifas</span>—</td><td data-cell-label=\"Quantidade prevista\"><span class=\"card-cell-label\">Quantidade prevista</span>—</td><td data-cell-label=\"Componente do custo\"><span class=\"card-cell-label\">Componente do custo</span>—</td><td data-cell-label=\"Unidade de faturação\"><span class=\"card-cell-label\">Unidade de faturação</span>por segundo de vídeo</td><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>resolution: 768p</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Preço do vídeo · Estimativa apenas para comparação</span> <b>$0.16</b> <span class=\"price-unit\">por segundo de vídeo</span></div></td></tr><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Custo estimado de geração</th><td data-cell-label=\"Tabela de tarifas\"><span class=\"card-cell-label\">Tabela de tarifas</span>—</td><td data-cell-label=\"Quantidade prevista\"><span class=\"card-cell-label\">Quantidade prevista</span>estimativa para uma geração</td><td data-cell-label=\"Componente do custo\"><span class=\"card-cell-label\">Componente do custo</span>—</td><td data-cell-label=\"Unidade de faturação\"><span class=\"card-cell-label\">Unidade de faturação</span>—</td><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>—</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Custo estimado de geração · Estimativa apenas para comparação</span> <b>$0.5</b> <span class=\"price-unit\">estimativa antes da geração</span></div><p class=\"note-s\">Esta estimativa não é um encargo adicional nem uma tarifa fixa para a geração concluída.</p></td></tr></tbody></table></div></div><p class=\"note-s\">O Ailoot reserva um montante estimado antes de um pedido. Após o resultado, liquida o custo final com base na utilização medida. No streaming, a liquidação usa o registo final de utilização. <a href=\"/docs/pt-pt/billing/reserve/\">Como funcionam a reserva e a liquidação →</a></p><div data-declared-reference-pricing><h4>Detalhes da tarifa de referência</h4><p class=\"note-s\">As tabelas de referência do modelo não alteram a seleção do método, as cotações ou os custos. Os custos ativos usam as tarifas do método Ailoot selecionado.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Referências de preços das configurações de vídeo</summary><h4>Preços por configuração</h4><p class=\"note-s\">Associe cada custo às condições apresentadas. Use uma única tarifa para cada conjunto de configurações alternativas.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuração</th><th>Condições de faturação</th><th>Custo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Preço do vídeo</th><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>Não é declarada nenhuma condição adicional nesta chave de preços.</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Preço do vídeo</span> <b>$0.16</b> <span class=\"price-unit\">por segundo de vídeo</span></div><p class=\"note-s\">Referência de preço publicada para a configuração apresentada. Os montantes finais cobrados seguem a configuração efetivamente faturada.</p></td></tr><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Preço do vídeo</th><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>resolution: 480p</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Preço do vídeo</span> <b>$0.1</b> <span class=\"price-unit\">por segundo de vídeo</span></div><p class=\"note-s\">Referência de preço publicada para a configuração apresentada. Os montantes finais cobrados seguem a configuração efetivamente faturada.</p></td></tr><tr><th data-cell-label=\"Configuração\" scope=\"row\"><span class=\"card-cell-label\">Configuração</span>Preço do vídeo</th><td data-cell-label=\"Condições de faturação\"><span class=\"card-cell-label\">Condições de faturação</span>resolution: 768p</td><td data-cell-label=\"Custo\"><span class=\"card-cell-label\">Custo</span><div><span>Saída · Preço do vídeo</span> <b>$0.16</b> <span class=\"price-unit\">por segundo de vídeo</span></div><p class=\"note-s\">Referência de preço publicada para a configuração apresentada. Os montantes finais cobrados seguem a configuração efetivamente faturada.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exemplos de pedidos</h3><h4>Ailoot Ultra · Vídeo</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes de código\"><button class=\"cg-tab\" id=\"model-code-1869-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1869-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · crie um vídeo</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><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-1869-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1869-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;duration&quot;:8,&quot;model&quot;:&quot;minimax/hailuo-3-max&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;resolution&quot;:&quot;480p&quot;}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\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 result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Receber e guardar os resultados</h3><h4>Ailoot Ultra · Vídeo</h4><p class=\"note-s\">URLs assinados para conteúdo pertencente ao utilizador</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>Verificar o estado da tarefa</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes de código\"><button class=\"cg-tab\" id=\"model-code-1870-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1870-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET estado da operação original</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><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-1870-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1870-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Outras leituras de conteúdo</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes de código\"><button class=\"cg-tab\" id=\"model-code-1871-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1871-panel-0\" aria-selected=\"true\" tabindex=\"0\">Guardar cada saída concluída de que é titular</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><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-1871-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1871-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Guardar todos os resultados concluídos</h5><p class=\"note-s\">Guarde cada vídeo concluído ou ficheiro devolvido; obtenha cada URL de recurso efetivamente devolvido.</p><p class=\"note-s\">Conserve todos os resultados reais que pertencem ao utilizador e os respetivos metadados medidos devolvidos.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Se for necessário verificar a resposta original</h5><p class=\"note-s\">503 result_pending_check + id original + X-Should-Retry:false; nunca repita o original</p></div><details class=\"card-about\" data-output-fields><summary>Campos da resposta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th><th>Significado</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Posição deste vídeo na lista de saídas, com contagem a partir de zero.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>URL HTTPS assinado para transferir este vídeo concluído.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Resumo criptográfico SHA-256 dos bytes do vídeo original; null se não estiver disponível.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Tamanho do ficheiro de vídeo original em bytes; null se não estiver disponível.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Duração medida do vídeo em milissegundos; null se não estiver disponível.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Largura do vídeo em píxeis; null se não estiver disponível.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Altura do vídeo em píxeis; null se não estiver disponível.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Identificador do codec de vídeo; null se não estiver registado.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>boolean | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Indica se o vídeo contém uma faixa de áudio; null se não tiver sido medido.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string | null</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Identificador do codec de áudio; null quando não está registado qualquer identificador.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Erros e passos seguintes</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Resposta</th><th>Condição</th><th>Passo seguinte</th></tr></thead><tbody><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>O acesso ao vídeo não está disponível ou este ID de vídeo não foi encontrado.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Verifique o acesso ao vídeo. Para um vídeo existente, utilize o ID público original e a mesma chave API.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>A chave API não corresponde à conta autenticada.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Verifique a sua chave API e o acesso à conta antes de enviar.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>Não foi possível ler o pedido ou o índice de transferência é inválido.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Corrija o corpo do pedido. Para uma transferência, escolha um índice de saída devolvido pela tarefa original.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>Não é possível calcular o preço da configuração de vídeo selecionada.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Escolha uma configuração de vídeo suportada e preencha as opções obrigatórias antes de enviar um pedido corrigido.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>Uma entrada de vídeo ou a tarefa original de continuação é inválida.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Utilize entradas HTTPS válidas. Para continuação, utilize o ID público do seu vídeo original concluído com a mesma chave API.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>402 · <code>billing_error</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>O saldo disponível ou os limites não permitem efetuar uma reserva.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Verifique o saldo disponível e os limites antes de enviar um novo pedido.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>503 · <code>server_error</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>A verificação, o armazenamento ou o acesso ao serviço de vídeo está temporariamente indisponível.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Aguarde a disponibilidade do serviço. Se já tiver um ID de vídeo, consulte essa tarefa original em vez de criar outra geração.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>O resultado e a cobrança do vídeo original precisam de verificação.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Conserve o ID de vídeo devolvido e consulte essa tarefa. Não envie um pedido de geração substituto enquanto estiver a ser verificada.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>A transferência do vídeo existente está temporariamente indisponível.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Consulte a mesma tarefa de vídeo mais tarde e transfira a saída existente. Uma nova geração cria uma operação separada.</td></tr><tr><th data-cell-label=\"Resposta\" scope=\"row\"><span class=\"card-cell-label\">Resposta</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Condição\"><span class=\"card-cell-label\">Condição</span>O conteúdo do vídeo não foi publicado.</td><td data-cell-label=\"Passo seguinte\"><span class=\"card-cell-label\">Passo seguinte</span>Consulte o estado da tarefa original. Transfira quando indicar completed; se indicar failed, siga o aviso de verificação da cobrança.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliases</h3><h4>Aliases do modelo</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=minimax%2Fhailuo-3-max&amp;route=Ultra&amp;caller=minimax%2Fhailuo-3-max&amp;fmt=videos\"><code>minimax/hailuo-3-max</code></a></span></p><h4>Aliases dos caminhos dos métodos</h4><p class=\"note-s\">Use os caminhos dos métodos indicados acima.</p><h4>IDs de chamada relacionados</h4><p class=\"note-s\"><a href=\"#m=minimax%2Fhailuo-3-max&amp;route=Ultra&amp;caller=minimax%2Fhailuo-3-max&amp;fmt=videos\"><code>minimax/hailuo-3-max</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "minimax/hailuo-3-max",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "minimax/hailuo-3-max",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|minimax%2Fhailuo-3-max",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "As tarifas apresentadas permitem estimar o custo antes da geração. O montante final cobrado é calculado a partir do custo registado para a geração original. A duração medida do resultado e as quantidades previstas não correspondem à quantidade final faturável.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Conserve todos os resultados reais que pertencem ao utilizador e os respetivos metadados medidos devolvidos.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "O acesso ao vídeo não está disponível ou este ID de vídeo não foi encontrado.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Verifique o acesso ao vídeo. Para um vídeo existente, utilize o ID público original e a mesma chave API.",
                "type": "not_found_error"
              },
              {
                "condition": "A chave API não corresponde à conta autenticada.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Verifique a sua chave API e o acesso à conta antes de enviar.",
                "type": "authentication_error"
              },
              {
                "condition": "Não foi possível ler o pedido ou o índice de transferência é inválido.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Corrija o corpo do pedido. Para uma transferência, escolha um índice de saída devolvido pela tarefa original.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Não é possível calcular o preço da configuração de vídeo selecionada.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Escolha uma configuração de vídeo suportada e preencha as opções obrigatórias antes de enviar um pedido corrigido.",
                "type": "price_unavailable"
              },
              {
                "condition": "Uma entrada de vídeo ou a tarefa original de continuação é inválida.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Utilize entradas HTTPS válidas. Para continuação, utilize o ID público do seu vídeo original concluído com a mesma chave API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "O saldo disponível ou os limites não permitem efetuar uma reserva.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Verifique o saldo disponível e os limites antes de enviar um novo pedido.",
                "type": "billing_error"
              },
              {
                "condition": "A verificação, o armazenamento ou o acesso ao serviço de vídeo está temporariamente indisponível.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Aguarde a disponibilidade do serviço. Se já tiver um ID de vídeo, consulte essa tarefa original em vez de criar outra geração.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "O resultado e a cobrança do vídeo original precisam de verificação.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Conserve o ID de vídeo devolvido e consulte essa tarefa. Não envie um pedido de geração substituto enquanto estiver a ser verificada.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "A transferência do vídeo existente está temporariamente indisponível.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Consulte a mesma tarefa de vídeo mais tarde e transfira a saída existente. Uma nova geração cria uma operação separada.",
                "type": "server_error"
              },
              {
                "condition": "O conteúdo do vídeo não foi publicado.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Consulte o estado da tarefa original. Transfira quando indicar completed; se indicar failed, siga o aviso de verificação da cobrança.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + id original + X-Should-Retry:false; nunca repita o original"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3-max"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Forneça prompt como texto e duration em segundos inteiros. Escolha uma resolução suportada e, se necessário, uma proporção.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Uma instrução escrita."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3-max"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images é uma matriz. Cada objeto de fotograma tem type, image_url e frame_type; image_url contém url. Defina type como image_url. Utilize first_frame com um last_frame opcional. Cada função de fotograma aparece, no máximo, uma vez. Forneça um URL HTTPS público de imagem para cada fotograma. Escolha uma resolução suportada e, se necessário, uma proporção.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Uma instrução escrita e uma imagem do primeiro fotograma."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Posição deste vídeo na lista de saídas, com contagem a partir de zero.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL HTTPS assinado para transferir este vídeo concluído.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Resumo criptográfico SHA-256 dos bytes do vídeo original; null se não estiver disponível.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Tamanho do ficheiro de vídeo original em bytes; null se não estiver disponível.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Duração medida do vídeo em milissegundos; null se não estiver disponível.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Largura do vídeo em píxeis; null se não estiver disponível.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Altura do vídeo em píxeis; null se não estiver disponível.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Identificador do codec de vídeo; null se não estiver registado.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Indica se o vídeo contém uma faixa de áudio; null se não tiver sido medido.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Identificador do codec de áudio; null quando não está registado qualquer identificador.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "URLs assinados para conteúdo pertencente ao utilizador",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "minimax/hailuo-3-max"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "minimax/hailuo-3-max"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "768p",
                  "480p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "768p",
                    "480p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "21:9",
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Estas chaves descrevem cada objeto de fotograma; image_url contém apenas url. Omita frame_images num pedido apenas de texto.",
                "content": "Matriz de objetos de fotograma. Cada objeto tem type=image_url, image_url com url e frame_type. Utilize um URL HTTPS de imagem e defina frame_type como first_frame ou last_frame. Cada função de fotograma aparece, no máximo, uma vez.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 0,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "model": {
                  "const": "minimax/hailuo-3-max"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "768p",
                    "480p"
                  ]
                },
                "seed": false,
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": false,
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist."
              ]
            },
            "unsupported": [
              "size",
              "seed",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_component_role": "reference_output_rate",
              "billing_input": false,
              "estimate_only": true,
              "fallback_reference": true,
              "quoted_unit": "per output second",
              "selectable_request_branch": false,
              "selector_reference_only": true
            },
            "label": "Saída de vídeo · tarifa de referência",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Output video second reference rate",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Preço do vídeo",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 768p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_768p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Esta estimativa não é um encargo adicional nem uma tarifa fixa para a geração concluída.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Custo estimado de geração",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"minimax/hailuo-3-max\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"480p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "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": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_component_role": "reference_output_rate",
              "billing_input": false,
              "estimate_only": true,
              "fallback_reference": true,
              "quoted_unit": "per output second",
              "selectable_request_branch": false,
              "selector_reference_only": true
            },
            "label": "Video output · reference rate",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Output video second reference rate",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 768p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_768p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "minimax/hailuo-3-max",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds",
            "label": "Output video second reference rate",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "public_unit_label": "per output second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_480p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_768p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.5",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.5",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "minimax/hailuo-3-max",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "a7c76fb028d548e5c3669226aa7eaecb2ea1b76769ea78690c1e08d77d461afc",
    "input_html_sha256": "835486a60fb8d4161c9ed93ad29f6162839b70180d613bb8be39fadcbd4c5864",
    "private_audit_sha256": "8a6668dc95556bb5a16050e182596f4757c8607236c1a3e0f4f2fb9831976a14",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/pt-pt/minimax-hailuo-3-max/",
    "description": "MiniMax H3 Max é uma variante H3 rápida, submetida a pós-treino, para vídeo curto com áudio sincronizado. O fluxo documentado da MiniMax suporta texto, imagens de fotogramas e referências multimodais, com saída a 480P ou 768P, duração de 5–15 segundos e opções próprias de expansão de instruções.",
    "locale": "pt-pt",
    "md_url": "https://ailoot.ai/models/pt-pt/minimax-hailuo-3-max/index.md",
    "title": "MiniMax: H3 Max — Ailoot",
    "url": "https://ailoot.ai/models/pt-pt/minimax-hailuo-3-max/"
  },
  "rawModel": {
    "about": "Uma variante H3 rápida submetida a pós-treino\n\nMiniMax H3 Max é uma variante do modelo base MiniMax H3 submetida a pós-treino, otimizada para geração mais rápida, cumprimento das instruções e qualidade audiovisual. A variante foi desenvolvida através de pós-treino pela fal Research. Mantém um contexto multimodal unificado e imagem e som sincronizados de forma nativa. A velocidade é uma prioridade de conceção, e não um tempo fixo de conclusão para cada instrução, duração ou aplicação.\n\nMantenha Max distinto do sistema H3 original e da variante separada Max Turbo. A interface atual da MiniMax apresenta Max a 480P ou 768P, com 768P por predefinição, 24 fotogramas por segundo e uma duração inteira entre 5 e 15 segundos. O seu fluxo Max documentado não oferece a definição 2K do sistema H3 original nem uma saída de quatro segundos.\n\nDa instrução ao plano\n\nTodas as gerações incluem instruções em texto não vazias, até 7 000 caracteres por elemento de texto. Descreva o sujeito, a composição inicial, a ação e o resultado e torne depois claras as indicações de câmara e som. Numa revelação curta de um objeto, identifique o que o espetador deve ver primeiro, como o objeto entra em cena e como o plano deve terminar.\n\nUma instrução útil de cinco segundos pode descrever uma chávena de cerâmica numa mesa de madeira, uma mão a pousar um pires ao seu lado, uma pequena aproximação da câmara e o som da cerâmica a tocar na madeira. Mantenha a ação suficientemente pequena para caber na duração selecionada e inspecione se o movimento e o som devolvidos acompanham o mesmo acontecimento.\n\nCriação guiada por fotogramas\n\nO fabricante documenta um fotograma inicial, um fotograma final ou ambos. Uma primeira imagem estabelece onde o clipe começa; uma última imagem estabelece o estado visual final. Explique o movimento que os liga, incluindo alterações de pose, posição de objetos, câmara ou iluminação. Numa transição entre dois fotogramas, evite instruções que introduzam uma cena incompatível entre os extremos.\n\nA saída guiada por fotogramas obtém a proporção a partir da imagem de entrada. Para trabalho apenas em texto, escolha uma proporção concreta entre 21:9, 16:9, 4:3, 1:1, 3:4 ou 9:16. O trabalho guiado por referências pode utilizar uma proporção adaptativa ou uma das opções explícitas documentadas. Componha a referência ou a cena escrita para o enquadramento de destino, em vez de presumir que a mesma disposição funciona igualmente bem na vertical e na horizontal.\n\nReferências multimodais\n\nO esquema atual de geração Max da MiniMax documenta também imagens, vídeo e áudio de referência. Indique o que cada um deve influenciar: a identidade de uma personagem, um ambiente, um padrão de movimento, uma trajetória de câmara, o timbre de voz ou uma característica sonora. Os papéis de primeiro/último fotograma e os papéis de recursos multimédia de referência são mutuamente exclusivos nessa interface.\n\nNum plano de personagem, identifique separadamente a referência de aspeto e a referência de movimento e forneça depois a ação e a fala pretendidas. Uma referência de voz que estabelece a interpretação é diferente de copiar o seu sinal de áudio completo. Seja explícito nas instruções quanto às características a conservar e às alterações a fazer e reveja o clipe audiovisual efetivo face a cada papel de referência.\n\nExpansão de instruções\n\nA definição de expansão específica de Max oferece as opções disabled, balanced e quality, com balanced por predefinição. Escolha disabled quando as instruções fornecidas devem passar sem expansão; utilize um modo de expansão documentado quando desejar interpretação adicional. Conserve as instruções originais para distinguir uma alteração introduzida durante a expansão do conteúdo pedido.\n\nDescreva o som como parte da cena. Identifique os sons físicos, o ambiente e quaisquer palavras faladas e separe-os da música de fundo destinada apenas ao público. Forneça a fala exata e identifique quem a deve dizer, em vez de pedir diálogo não especificado. Ouça o resultado para além de o ver; uma imagem convincente não comprova que a redação falada ou o ritmo temporal estejam corretos.\n\nPreparação das entradas e limites\n\nO esquema atual do fabricante aceita imagens JPG, JPEG, PNG, WebP, HEIC ou HEIF, até 30 MB cada, com lados entre 256 e 5 760 píxeis e proporções entre 0.4 e 2.5. Os papéis inicial e final permitem uma imagem cada; o modo de referências permite até nove imagens. Preserve uma vista clara do sujeito e dos pormenores que têm de continuar identificáveis.\n\nO vídeo de referência permite até três clipes MP4 ou MOV, cada um com 2–15 segundos e, em conjunto, no máximo 15 segundos, com um limite de 50 MB por ficheiro. Documenta vídeo H.264 ou H.265, áudio AAC ou MP3, lados entre 256 e 5 760 píxeis, proporções entre 0.4 e 2.5 e taxa de fotogramas entre 23.976 e 60. O áudio de referência permite até três clipes WAV ou MP3, cada um até 15 MB e com 2–15 segundos, em conjunto no máximo 15 segundos. O corpo do pedido tem um limite separado de 64 MB.\n\nUtilize apenas referências que contribuam para o plano e identifique cada contribuição no texto. Um clipe de movimento curto e relevante é mais fácil de utilizar como orientação do que uma longa coleção de acontecimentos sem relação entre si. Mantenha explícitas a duração pretendida e a resolução de saída para comparar o resultado com as mesmas instruções.\n\nO resultado concluído\n\nO fluxo assíncrono do fabricante devolve a identidade de uma tarefa antes de o vídeo concluído estar disponível. A sua interface de consulta de tarefas recupera tarefas dos sete dias anteriores. Guarde o clipe efetivamente devolvido e a sua especificação para montagem ou revisão adicional; um identificador de tarefa não é o recurso audiovisual. Os endereços de transferência têm prazo de validade, pelo que deve conservar o próprio ficheiro quando guardar um resultado selecionado.\n\nReveja a continuidade dos sujeitos, o movimento, o texto visível, o diálogo e a sincronização do som no tamanho em que o clipe será utilizado. Utilize comentários concretos para outras instruções criativas: o gesto que mudou, a fala omitida ou o enquadramento que exige ajuste. O resultado útil é um plano audiovisual curto ligado ao conteúdo fornecido e às suas relações explícitas com as referências.",
    "alias_of": null,
    "aliases": [],
    "author": "MiniMax",
    "available": null,
    "canonical_model": "minimax/hailuo-3-max",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.5",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.5",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Todas as tarifas da configuração constam dos detalhes."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "c3ee132fc5b4cd02f24f5c4d",
        "label": "Referências de preços das configurações de vídeo",
        "profiles": [
          {
            "basis": "Referência de preço publicada para a configuração apresentada. Os montantes finais cobrados seguem a configuração efetivamente faturada.",
            "dimensions": {
              "conditions": "Não é declarada nenhuma condição adicional nesta chave de preços."
            },
            "label": "Preço do vídeo",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referência de preço publicada para a configuração apresentada. Os montantes finais cobrados seguem a configuração efetivamente faturada.",
            "dimensions": {
              "conditions": "resolution: 480p"
            },
            "label": "Preço do vídeo",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referência de preço publicada para a configuração apresentada. Os montantes finais cobrados seguem a configuração efetivamente faturada.",
            "dimensions": {
              "conditions": "resolution: 768p"
            },
            "label": "Preço do vídeo",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "minimax/hailuo-3-max",
    "input": [
      "text",
      "image"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "As tarifas apresentadas permitem estimar o custo antes da geração. O montante final cobrado é calculado a partir do custo registado para a geração original. A duração medida do resultado e as quantidades previstas não correspondem à quantidade final faturável.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Conserve todos os resultados reais que pertencem ao utilizador e os respetivos metadados medidos devolvidos.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "O acesso ao vídeo não está disponível ou este ID de vídeo não foi encontrado.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Verifique o acesso ao vídeo. Para um vídeo existente, utilize o ID público original e a mesma chave API.",
                "type": "not_found_error"
              },
              {
                "condition": "A chave API não corresponde à conta autenticada.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Verifique a sua chave API e o acesso à conta antes de enviar.",
                "type": "authentication_error"
              },
              {
                "condition": "Não foi possível ler o pedido ou o índice de transferência é inválido.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Corrija o corpo do pedido. Para uma transferência, escolha um índice de saída devolvido pela tarefa original.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Não é possível calcular o preço da configuração de vídeo selecionada.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Escolha uma configuração de vídeo suportada e preencha as opções obrigatórias antes de enviar um pedido corrigido.",
                "type": "price_unavailable"
              },
              {
                "condition": "Uma entrada de vídeo ou a tarefa original de continuação é inválida.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Utilize entradas HTTPS válidas. Para continuação, utilize o ID público do seu vídeo original concluído com a mesma chave API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "O saldo disponível ou os limites não permitem efetuar uma reserva.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Verifique o saldo disponível e os limites antes de enviar um novo pedido.",
                "type": "billing_error"
              },
              {
                "condition": "A verificação, o armazenamento ou o acesso ao serviço de vídeo está temporariamente indisponível.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Aguarde a disponibilidade do serviço. Se já tiver um ID de vídeo, consulte essa tarefa original em vez de criar outra geração.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "O resultado e a cobrança do vídeo original precisam de verificação.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Conserve o ID de vídeo devolvido e consulte essa tarefa. Não envie um pedido de geração substituto enquanto estiver a ser verificada.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "A transferência do vídeo existente está temporariamente indisponível.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Consulte a mesma tarefa de vídeo mais tarde e transfira a saída existente. Uma nova geração cria uma operação separada.",
                "type": "server_error"
              },
              {
                "condition": "O conteúdo do vídeo não foi publicado.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Consulte o estado da tarefa original. Transfira quando indicar completed; se indicar failed, siga o aviso de verificação da cobrança.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + id original + X-Should-Retry:false; nunca repita o original"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3-max"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Forneça prompt como texto e duration em segundos inteiros. Escolha uma resolução suportada e, se necessário, uma proporção.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Uma instrução escrita."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3-max"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images é uma matriz. Cada objeto de fotograma tem type, image_url e frame_type; image_url contém url. Defina type como image_url. Utilize first_frame com um last_frame opcional. Cada função de fotograma aparece, no máximo, uma vez. Forneça um URL HTTPS público de imagem para cada fotograma. Escolha uma resolução suportada e, se necessário, uma proporção.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Uma instrução escrita e uma imagem do primeiro fotograma."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Posição deste vídeo na lista de saídas, com contagem a partir de zero.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL HTTPS assinado para transferir este vídeo concluído.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Resumo criptográfico SHA-256 dos bytes do vídeo original; null se não estiver disponível.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Tamanho do ficheiro de vídeo original em bytes; null se não estiver disponível.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Duração medida do vídeo em milissegundos; null se não estiver disponível.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Largura do vídeo em píxeis; null se não estiver disponível.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Altura do vídeo em píxeis; null se não estiver disponível.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Identificador do codec de vídeo; null se não estiver registado.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Indica se o vídeo contém uma faixa de áudio; null se não tiver sido medido.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Identificador do codec de áudio; null quando não está registado qualquer identificador.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "URLs assinados para conteúdo pertencente ao utilizador",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "minimax/hailuo-3-max"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "minimax/hailuo-3-max"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "768p",
                  "480p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "768p",
                    "480p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "21:9",
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Estas chaves descrevem cada objeto de fotograma; image_url contém apenas url. Omita frame_images num pedido apenas de texto.",
                "content": "Matriz de objetos de fotograma. Cada objeto tem type=image_url, image_url com url e frame_type. Utilize um URL HTTPS de imagem e defina frame_type como first_frame ou last_frame. Cada função de fotograma aparece, no máximo, uma vez.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 0,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "model": {
                  "const": "minimax/hailuo-3-max"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "768p",
                    "480p"
                  ]
                },
                "seed": false,
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": false,
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist."
              ]
            },
            "unsupported": [
              "size",
              "seed",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_component_role": "reference_output_rate",
              "billing_input": false,
              "estimate_only": true,
              "fallback_reference": true,
              "quoted_unit": "per output second",
              "selectable_request_branch": false,
              "selector_reference_only": true
            },
            "label": "Saída de vídeo · tarifa de referência",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Output video second reference rate",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Preço do vídeo",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 768p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_768p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Esta estimativa não é um encargo adicional nem uma tarifa fixa para a geração concluída.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Custo estimado de geração",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"minimax/hailuo-3-max\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"480p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "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": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "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": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_component_role": "reference_output_rate",
              "billing_input": false,
              "estimate_only": true,
              "fallback_reference": true,
              "quoted_unit": "per output second",
              "selectable_request_branch": false,
              "selector_reference_only": true
            },
            "label": "Video output · reference rate",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Output video second reference rate",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 768p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_768p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "minimax/hailuo-3-max",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "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": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds",
            "label": "Output video second reference rate",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "public_unit_label": "per output second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_480p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_768p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.5",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.5",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "minimax/hailuo-3-max",
        "request_model_id": "minimax/hailuo-3-max",
        "route_label": "Ultra"
      }
    ],
    "name": "MiniMax: H3 Max",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.5,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.5,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "input_materials_additive": true,
          "resolution": "480P"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.10",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "input_materials_additive": true,
              "resolution": "480P"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "input_materials_additive": true,
          "resolution": "768P"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "input_materials_additive": true,
              "resolution": "768P"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "output_resolution": "480P"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.1106",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "adds_to_output": true,
              "output_resolution": "480P"
            },
            "key": "input_video",
            "label": "input video",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "output_resolution": "768P"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.286",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "adds_to_output": true,
              "output_resolution": "768P"
            },
            "key": "input_video",
            "label": "input video",
            "profile_index": 3,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "first_free_reference_images": 2,
          "only_additional_images_charged": true,
          "reference_audio_free": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.148",
            "amount_unit": "usd_per_input_image",
            "conditions": {
              "adds_to_output": true,
              "first_free_reference_images": 2,
              "only_additional_images_charged": true,
              "reference_audio_free": true
            },
            "key": "input_image",
            "label": "input image",
            "profile_index": 4,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "output second Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.16",
            "key": "duration_seconds",
            "label": "output second",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.10",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=480p",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.10",
            "key": "duration_seconds_480p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.10",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=768p",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.16",
            "key": "duration_seconds_768p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          }
        ]
      }
    ],
    "public_id": "minimax/hailuo-3-max",
    "short": "MiniMax H3 Max é uma variante H3 rápida, submetida a pós-treino, para vídeo curto com áudio sincronizado. O fluxo documentado da MiniMax suporta texto, imagens de fotogramas e referências multimodais, com saída a 480P ou 768P, duração de 5–15 segundos e opções próprias de expansão de instruções."
  },
  "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": "MiniMax H3 Max é uma variante H3 rápida, submetida a pós-treino, para vídeo curto com áudio sincronizado. O fluxo documentado da MiniMax suporta texto, imagens de fotogramas e referências multimodais, com saída a 480P ou 768P, duração de 5–15 segundos e opções próprias de expansão de instruções.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "e0b858ff66284af8b5a2e17136450089c58da604c4871fb8415562d056aac367",
    "renderer_sha256": "8caea4544177cc2b7d2cb3356b5f07bfd3660386d75f2714a6f603fa5e2a6cd2"
  },
  "sourceRevision": "21f6d57a51fb64702fb198d6954fcd6488c4eecec1867e1ece2bae791b529122"
}
