{
  "aboutHtml": "<p>Tripo tworzy zasoby w postaci modeli 3D z opisu lub referencji wizualnej. Jego procesy oddzielają wygenerowanie obiektu od późniejszych kroków, takich jak teksturowanie, rigging i konwersja. Zacznij od wskazania zamierzonego zasobu i operacji, która go wytwarza: statycznej siatki do sceny, obiektu z teksturami do renderowania lub modelu przygotowywanego dalej w edytorze 3D.</p><p>Przy opisie tekstowym do tworzenia modelu przedstaw kształt obiektu i jego ważne części. Małą latarnię można określić przez korpus, uchwyt, otwory i proporcje; stworzenie przez sylwetkę, kończyny i pozę. Podaj materiał lub sposób wizualnego opracowania, gdy ma znaczenie dla wyniku. Skup opis na samym obiekcie, aby wygenerowaną geometrię można było ocenić względem jasnego projektu.</p><p>W procesie producenta opartym na referencjach przygotuj obrazy pokazujące obrys obiektu i jego charakterystyczne cechy. Kilka ujęć powinno przedstawiać ten sam obiekt ze spójnymi proporcjami i akcesoriami. Sprawdź po generowaniu części ukryte w referencji, ponieważ przekonujący widok z przodu nie dowodzi, że tył, spód lub połączenia elementów odpowiadają zamierzonemu projektowi.</p><p>Zachowaj wybraną wersję modelu przy żądaniu. Interfejs generowania Tripo identyfikuje operację osobno od ustawienia wersji modelu, a udokumentowany przykład tekstowego tworzenia modelu wybiera jawną wersję. Przy porównywaniu zasobów zachowaj dokładną wersję i ustawienia, aby zmiana opisu obiektu nie została pomylona ze zmianą konfiguracji generowania.</p><p>Geometria i wygląd powierzchni są osobnymi decyzjami produkcyjnymi. Bazowy proces producenta odróżnia model bez tekstur od wyniku z teksturami i materiałami do renderowania opartego na fizyce. Wybierz postać zasobu potrzebną w następnym kroku, a następnie sprawdź siatkę i towarzyszące pliki materiałów. Obraz podglądu ułatwia orientację, a rzeczywisty model jest zasobem potrzebnym do składania sceny i dalszej edycji.</p><p>Zbadaj ukończony obiekt pod kilkoma kątami. Sprawdź sylwetkę, rozdzielenie części, cienkie elementy, otwory i powierzchnie styku komponentów. Przy stylizowanym rekwizycie porównaj proporcje z założeniami projektu. Przy obiekcie przypominającym produkt sprawdź, które szczegóły są przedstawione geometrią, a które występują tylko w opracowaniu powierzchni. Wskaż cechę wymagającą poprawy przed zmianą promptu lub referencji.</p><p>Generowanie przebiega jako zadanie asynchroniczne. Zachowaj identyfikator pierwotnego zadania podczas sprawdzania statusu i przechowuj razem ukończony model, podgląd i wszystkie pozostałe zwrócone pliki. Udokumentowany wynik obejmuje pola wyjściowe związane z modelem i renderowane obrazy. Zapisz same pliki do następnego kroku produkcyjnego, zamiast polegać na tymczasowym odnośniku wyniku lub traktować podgląd jako kompletny zasób 3D.</p><p>Zaimportuj model do docelowego edytora lub środowiska oglądania i sprawdź tam jego orientację, skalę, materiały i geometrię. Rekwizyt sceny, render z bliska i postać gotowa do animacji mają różne potrzeby wykończenia. Zachowaj kopię roboczą do edycji i wygenerowany zasób źródłowy wraz z opisem i referencjami. Gdy potrzebna jest kolejna operacja, taka jak praca z teksturami lub rigging, wybierz ją świadomie i sprawdź wynikowy zasób jako osobny etap.</p>",
  "aboutText": "Tripo tworzy zasoby w postaci modeli 3D z opisu lub referencji wizualnej. Jego procesy oddzielają wygenerowanie obiektu od późniejszych kroków, takich jak teksturowanie, rigging i konwersja. Zacznij od wskazania zamierzonego zasobu i operacji, która go wytwarza: statycznej siatki do sceny, obiektu z teksturami do renderowania lub modelu przygotowywanego dalej w edytorze 3D.\n\nPrzy opisie tekstowym do tworzenia modelu przedstaw kształt obiektu i jego ważne części. Małą latarnię można określić przez korpus, uchwyt, otwory i proporcje; stworzenie przez sylwetkę, kończyny i pozę. Podaj materiał lub sposób wizualnego opracowania, gdy ma znaczenie dla wyniku. Skup opis na samym obiekcie, aby wygenerowaną geometrię można było ocenić względem jasnego projektu.\n\nW procesie producenta opartym na referencjach przygotuj obrazy pokazujące obrys obiektu i jego charakterystyczne cechy. Kilka ujęć powinno przedstawiać ten sam obiekt ze spójnymi proporcjami i akcesoriami. Sprawdź po generowaniu części ukryte w referencji, ponieważ przekonujący widok z przodu nie dowodzi, że tył, spód lub połączenia elementów odpowiadają zamierzonemu projektowi.\n\nZachowaj wybraną wersję modelu przy żądaniu. Interfejs generowania Tripo identyfikuje operację osobno od ustawienia wersji modelu, a udokumentowany przykład tekstowego tworzenia modelu wybiera jawną wersję. Przy porównywaniu zasobów zachowaj dokładną wersję i ustawienia, aby zmiana opisu obiektu nie została pomylona ze zmianą konfiguracji generowania.\n\nGeometria i wygląd powierzchni są osobnymi decyzjami produkcyjnymi. Bazowy proces producenta odróżnia model bez tekstur od wyniku z teksturami i materiałami do renderowania opartego na fizyce. Wybierz postać zasobu potrzebną w następnym kroku, a następnie sprawdź siatkę i towarzyszące pliki materiałów. Obraz podglądu ułatwia orientację, a rzeczywisty model jest zasobem potrzebnym do składania sceny i dalszej edycji.\n\nZbadaj ukończony obiekt pod kilkoma kątami. Sprawdź sylwetkę, rozdzielenie części, cienkie elementy, otwory i powierzchnie styku komponentów. Przy stylizowanym rekwizycie porównaj proporcje z założeniami projektu. Przy obiekcie przypominającym produkt sprawdź, które szczegóły są przedstawione geometrią, a które występują tylko w opracowaniu powierzchni. Wskaż cechę wymagającą poprawy przed zmianą promptu lub referencji.\n\nGenerowanie przebiega jako zadanie asynchroniczne. Zachowaj identyfikator pierwotnego zadania podczas sprawdzania statusu i przechowuj razem ukończony model, podgląd i wszystkie pozostałe zwrócone pliki. Udokumentowany wynik obejmuje pola wyjściowe związane z modelem i renderowane obrazy. Zapisz same pliki do następnego kroku produkcyjnego, zamiast polegać na tymczasowym odnośniku wyniku lub traktować podgląd jako kompletny zasób 3D.\n\nZaimportuj model do docelowego edytora lub środowiska oglądania i sprawdź tam jego orientację, skalę, materiały i geometrię. Rekwizyt sceny, render z bliska i postać gotowa do animacji mają różne potrzeby wykończenia. Zachowaj kopię roboczą do edycji i wygenerowany zasób źródłowy wraz z opisem i referencjami. Gdy potrzebna jest kolejna operacja, taka jak praca z teksturami lub rigging, wybierz ją świadomie i sprawdź wynikowy zasób jako osobny etap.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "d789ceb8fd8bbb17a80a5579ec187616b2c7ffab511e69df3f39b3389d213c7f",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "pl",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Tripo: 3D Generation</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Zamknij\">×</button></div><div class=\"idline\"><span>Tripo /</span><code>tripo3d</code><button type=\"button\" id=\"copy-id\">Kopiuj ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sekcje karty modelu\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Dane wejściowe i metody</button><button type=\"button\" data-card-jump=\"pricing\">Cennik</button><button type=\"button\" data-card-jump=\"examples\">Przykłady</button><button type=\"button\" data-card-jump=\"results\">Wyniki</button><button type=\"button\" data-card-jump=\"aliases\">Aliasy</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metody 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|3d|/v1/3d/generations|tripo3d\">3D</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\">Start</h3><p class=\"mdesc-full\">Tripo tworzy model 3D z pisemnego opisu obiektu. Szersze procesy producenta rozdzielają geometrię, teksturowanie i późniejsze przetwarzanie modelu; sprawdź ukończoną siatkę z kilku stron i zachowaj rzeczywiste pliki do docelowej sceny lub edytora.</p><dl class=\"card-io\" data-card-io><div><dt>Akceptowane dane wejściowe</dt><dd>Tekst</dd></div><div><dt>Wyniki</dt><dd>model_3d · Obrazy</dd></div></dl><details class=\"card-about\"><summary>O modelu</summary><p class=\"note-s\" data-model-method-boundary>Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.</p><div class=\"mabout\" id=\"m-about\"><p>Tripo tworzy zasoby w postaci modeli 3D z opisu lub referencji wizualnej. Jego procesy oddzielają wygenerowanie obiektu od późniejszych kroków, takich jak teksturowanie, rigging i konwersja. Zacznij od wskazania zamierzonego zasobu i operacji, która go wytwarza: statycznej siatki do sceny, obiektu z teksturami do renderowania lub modelu przygotowywanego dalej w edytorze 3D.</p><p>Przy opisie tekstowym do tworzenia modelu przedstaw kształt obiektu i jego ważne części. Małą latarnię można określić przez korpus, uchwyt, otwory i proporcje; stworzenie przez sylwetkę, kończyny i pozę. Podaj materiał lub sposób wizualnego opracowania, gdy ma znaczenie dla wyniku. Skup opis na samym obiekcie, aby wygenerowaną geometrię można było ocenić względem jasnego projektu.</p><p>W procesie producenta opartym na referencjach przygotuj obrazy pokazujące obrys obiektu i jego charakterystyczne cechy. Kilka ujęć powinno przedstawiać ten sam obiekt ze spójnymi proporcjami i akcesoriami. Sprawdź po generowaniu części ukryte w referencji, ponieważ przekonujący widok z przodu nie dowodzi, że tył, spód lub połączenia elementów odpowiadają zamierzonemu projektowi.</p><p>Zachowaj wybraną wersję modelu przy żądaniu. Interfejs generowania Tripo identyfikuje operację osobno od ustawienia wersji modelu, a udokumentowany przykład tekstowego tworzenia modelu wybiera jawną wersję. Przy porównywaniu zasobów zachowaj dokładną wersję i ustawienia, aby zmiana opisu obiektu nie została pomylona ze zmianą konfiguracji generowania.</p><p>Geometria i wygląd powierzchni są osobnymi decyzjami produkcyjnymi. Bazowy proces producenta odróżnia model bez tekstur od wyniku z teksturami i materiałami do renderowania opartego na fizyce. Wybierz postać zasobu potrzebną w następnym kroku, a następnie sprawdź siatkę i towarzyszące pliki materiałów. Obraz podglądu ułatwia orientację, a rzeczywisty model jest zasobem potrzebnym do składania sceny i dalszej edycji.</p><p>Zbadaj ukończony obiekt pod kilkoma kątami. Sprawdź sylwetkę, rozdzielenie części, cienkie elementy, otwory i powierzchnie styku komponentów. Przy stylizowanym rekwizycie porównaj proporcje z założeniami projektu. Przy obiekcie przypominającym produkt sprawdź, które szczegóły są przedstawione geometrią, a które występują tylko w opracowaniu powierzchni. Wskaż cechę wymagającą poprawy przed zmianą promptu lub referencji.</p><p>Generowanie przebiega jako zadanie asynchroniczne. Zachowaj identyfikator pierwotnego zadania podczas sprawdzania statusu i przechowuj razem ukończony model, podgląd i wszystkie pozostałe zwrócone pliki. Udokumentowany wynik obejmuje pola wyjściowe związane z modelem i renderowane obrazy. Zapisz same pliki do następnego kroku produkcyjnego, zamiast polegać na tymczasowym odnośniku wyniku lub traktować podgląd jako kompletny zasób 3D.</p><p>Zaimportuj model do docelowego edytora lub środowiska oglądania i sprawdź tam jego orientację, skalę, materiały i geometrię. Rekwizyt sceny, render z bliska i postać gotowa do animacji mają różne potrzeby wykończenia. Zachowaj kopię roboczą do edycji i wygenerowany zasób źródłowy wraz z opisem i referencjami. Gdy potrzebna jest kolejna operacja, taka jak praca z teksturami lub rigging, wybierz ją świadomie i sprawdź wynikowy zasób jako osobny etap.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Dostępne w Ailoot · dane wejściowe i metody</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · 3D</b> <code>POST /v1/3d/generations</code></summary><dl class=\"method-capabilities\"><div><dt>Wejście</dt><dd><code>text</code></dd></div><div><dt>Wyjście</dt><dd><code>model_3d</code>, <code>image</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Pole</th><th>Typ</th><th>Wymaganie</th><th>Wartości i limity</th><th>Domyślnie</th></tr></thead><tbody><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>tripo3d</div><div>Warunki: Użyj selektora modelu Ailoot.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">type</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>text_to_model, image_to_model, multiview_to_model, texture_model, animate_prerigcheck, animate_rig, animate_retarget, stylize_model, convert_model</div><div>Warunki: Kompletny przykład używa text_to_model; inne typy zadań wymagają udokumentowanych danych wejściowych właściwych dla danego zadania.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model_version</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>v2.0-20240919, v1.4-20240625, v2.5-20250123, v3.0-20250812, Turbo-v1.0-20250506</div><div>Warunki: Wybierz wersję wyraźnie wskazaną w dokumentacji; ten przykład używa v3.0-20250812.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Opisz obiekt, który chcesz utworzyć.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Parametry i cykl życia metody</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametr</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>content_type</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>application/json</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>required</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>model, type, model_version, prompt</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>optional</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span></td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>conditions</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>Użyj selektora modelu Ailoot., Kompletny przykład używa text_to_model; inne typy zadań wymagają udokumentowanych danych wejściowych właściwych dla danego zadania., Wybierz wersję wyraźnie wskazaną w dokumentacji; ten przykład używa v3.0-20250812., Opisz obiekt, który chcesz utworzyć.</td></tr></tbody></table></div><p>Cykl życia: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/3d/generations/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Cennik</h3><div class=\"card-result-process\" data-billing-basis><h5>Jak obliczana jest ostateczna opłata</h5><p class=\"note-s\">Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.</p><dl data-price-conditions><dt>Tryb szybki</dt><dd>Nie określono <span class=\"note-s\">Gdy wybrany jest tryb szybki</span></dd><dt>Tryb flex</dt><dd>Nie określono <span class=\"note-s\">Gdy wybrany jest tryb flex</span></dd><dt>Maksymalna intensywność rozumowania</dt><dd>Nie określono <span class=\"note-s\">Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Szacunkowe stawki do porównania</h4><h4>Ceny według konfiguracji</h4><p class=\"note-s\">Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguracja</th><th>Tabela stawek</th><th>Przewidywana ilość</th><th>Opłata</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguracja\" scope=\"row\"><span class=\"card-cell-label\">Konfiguracja</span>Bazowe stawki za tokeny</th><td data-cell-label=\"Tabela stawek\"><span class=\"card-cell-label\">Tabela stawek</span>Stawka podstawowa</td><td data-cell-label=\"Przewidywana ilość\"><span class=\"card-cell-label\">Przewidywana ilość</span>—</td><td data-cell-label=\"Opłata\"><span class=\"card-cell-label\">Opłata</span><div><span>Wejście · Tokeny wejściowe · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wyjście · Tokeny wyjściowe · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Odczyt cache · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Zapis do cache · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Zapis do cache, 1 godz. · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div></td></tr><tr><th data-cell-label=\"Konfiguracja\" scope=\"row\"><span class=\"card-cell-label\">Konfiguracja</span>Szacowany koszt generowania</th><td data-cell-label=\"Tabela stawek\"><span class=\"card-cell-label\">Tabela stawek</span>—</td><td data-cell-label=\"Przewidywana ilość\"><span class=\"card-cell-label\">Przewidywana ilość</span>szacunek dla jednego generowania</td><td data-cell-label=\"Opłata\"><span class=\"card-cell-label\">Opłata</span><div><span>Wyjście · Szacowany koszt generowania · Szacunek tylko do porównania</span> <b>$1.35</b> <span class=\"price-unit\">szacunek przed generowaniem</span></div><p class=\"note-s\">Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. <a href=\"/docs/pl/billing/reserve/\">Jak działają rezerwacja i rozliczenie →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Przykładowe żądania</h3><h4>Ailoot Ultra · 3D</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Warianty kodu\"><button class=\"cg-tab\" id=\"model-code-2793-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2793-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · utwórz raz i zachowaj potwierdzenie</button><button class=\"cg-tab\" id=\"model-code-2793-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2793-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Odczytaj pierwotne zadanie</button><button class=\"cg-tab\" id=\"model-code-2793-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2793-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Zapisz każdy ukończony zasób należący do Ciebie</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiuj kod\"><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-2793-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2793-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON&#39;\n{\n  &quot;model&quot;: &quot;tripo3d&quot;,\n  &quot;type&quot;: &quot;text_to_model&quot;,\n  &quot;prompt&quot;: &quot;a cute pig&quot;,\n  &quot;model_version&quot;: &quot;v3.0-20250812&quot;\n}\nJSON\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/3d/generations \\\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\n# Create once; retain id, polling_url, original task identifiers and every header.\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2793-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2793-tab-1\" hidden><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_STATUS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&quot;result.json&quot;).read_text())\nu=urljoin(&quot;https://api.ailoot.ai&quot;,r[&quot;polling_url&quot;])\np=urlsplit(u)\nif p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or p.username or p.password:\n    raise SystemExit(&quot;Unexpected returned polling URL; preserve the response&quot;)\nsubprocess.run([&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,u,&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;],&quot;-D&quot;,&quot;status-headers.txt&quot;,&quot;-o&quot;,&quot;status.json&quot;],check=True)\n# Read this same original polling_url again while pending.\n# Preserve unknown/result_pending_check; do not repeat creation.\nPY_STATUS\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2793-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2793-tab-2\" hidden><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(&quot;status.json&quot;).read_text())\nroles={}\ndef visit(v,path=&quot;&quot;):\n    if isinstance(v,dict):\n        for k,x in v.items(): visit(x,path+&quot;/&quot;+k)\n    elif isinstance(v,list):\n        for i,x in enumerate(v): visit(x,path+&quot;/&quot;+str(i))\n    elif isinstance(v,str):\n        u=urljoin(&quot;https://api.ailoot.ai&quot;,v); p=urlsplit(u)\n        if p.scheme==&quot;https&quot; and p.netloc==&quot;api.ailoot.ai&quot; and not p.username and not p.password and p.path.startswith(&quot;/v1/media/assets/&quot;) and p.path.endswith(&quot;/content&quot;):\n            roles.setdefault(u,[]).append(path)\nvisit(r)\nif not roles: raise SystemExit(&quot;No completed owned assets; retain the original status&quot;)\nmanifest=[]\nfor i,(u,paths) in enumerate(roles.items()):\n    target=Path(f&quot;asset-{i}.bin&quot;)\n    subprocess.run([&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,u,&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;],&quot;-o&quot;,str(target)],check=True)\n    raw=target.read_bytes()\n    if not raw: raise SystemExit(&quot;Empty asset; retain original status and metadata&quot;)\n    ext=&quot;glb&quot; if raw[:4]==b&quot;glTF&quot; else &quot;png&quot; if raw[:8]==b&quot;\\x89PNG\\r\\n\\x1a\\n&quot; else &quot;jpg&quot; if raw[:3]==b&quot;\\xff\\xd8\\xff&quot; else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;mp4&quot; if raw[4:8]==b&quot;ftyp&quot; else &quot;bin&quot;\n    name=f&quot;asset-{i}.{ext}&quot;\n    if target.name!=name: target.rename(name)\n    manifest.append({&quot;file&quot;:name,&quot;response_paths&quot;:paths,&quot;bytes&quot;:len(raw)})\nPath(&quot;asset-manifest.json&quot;).write_text(json.dumps(manifest,indent=2))\nprint(&quot;Saved&quot;,len(manifest),&quot;unique owned assets; every response role retained&quot;)\nPY_ASSETS\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Odbieranie i zapisywanie wyników</h3><h4>Ailoot Ultra · 3D</h4><p class=\"note-s\">Pobierz każdy zwrócony obraz lub zapisz jego zawartość Base64</p><ul class=\"card-result-paths\"><li><code>GET /v1/3d/generations/{request_id}</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Zachowaj wszystkie ukończone wyniki</h5><p class=\"note-s\">Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.</p><p class=\"note-s\">Zachowaj kompletną odpowiedź i nagłówki, pierwotne identyfikatory, wszystkie rzeczywiste wyniki oraz wszystkie pola użycia i rozliczeń. Zapisz każdy unikalny zasób należący do użytkownika i zachowaj wszystkie role, które na niego wskazują.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jeśli trzeba sprawdzić pierwotną odpowiedź</h5><p class=\"note-s\">Zachowaj zwrócone publiczne id zadania lub operacji oraz wszystkie nagłówki. Odczytuj wyłącznie pierwotne zadanie; unknown ani result_pending_check nie uprawniają do ponownego utworzenia.</p></div><details class=\"card-about\" data-output-fields><summary>Pola odpowiedzi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Pole</th><th>Typ</th></tr></thead><tbody><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">code</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.task_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.status</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.progress</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.output.*</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.result.*.url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.result.*.type</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data.thumbnail</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasy</h3><h4>Aliasy modelu</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=tripo3d&amp;route=Ultra&amp;caller=tripo3d&amp;fmt=3d\"><code>tripo3d</code></a></span></p><h4>Aliasy ścieżek metod</h4><p class=\"note-s\">Użyj ścieżek metod podanych powyżej.</p><h4>Powiązane ID modeli</h4><p class=\"note-s\"><a href=\"#m=tripo3d&amp;route=Ultra&amp;caller=tripo3d&amp;fmt=3d\"><code>tripo3d</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "tripo3d",
        "fmt": "3d",
        "http": "POST",
        "path": "/v1/3d/generations",
        "request_model_id": "tripo3d",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|3d|/v1/3d/generations|tripo3d",
      "ordinal": 0,
      "rawMethod": {
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.",
          "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": "Retain the complete response and headers, original identifiers, every actual output and all usage/accounting fields. Save each unique owned asset and retain every role pointing to it.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [],
              "create": {
                "http": "POST",
                "path": "/v1/3d/generations"
              },
              "failed_states": [
                "failed",
                "banned",
                "expired",
                "cancelled"
              ],
              "id_source": "Use returned polling_url and id. Keep provider_task_id and X-Ailoot-Task-Id as separate original identifiers.",
              "mode": "submit_once_poll_original",
              "owned_content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "Use the exact returned signed URL; never construct a token."
              },
              "pending_states": [
                "queued",
                "running"
              ],
              "state_field": "data.status",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/3d/generations/{request_id}"
                }
              ],
              "unknown": "Zachowaj zwrócone publiczne id zadania lub operacji oraz wszystkie nagłówki. Odczytuj wyłącznie pierwotne zadanie; unknown ani result_pending_check nie uprawniają do ponownego utworzenia.",
              "unknown_no_replay": true
            },
            "outputs": {
              "all_results": "Zachowaj kompletną odpowiedź i nagłówki, pierwotne identyfikatory, wszystkie rzeczywiste wyniki oraz wszystkie pola użycia i rozliczeń. Zapisz każdy unikalny zasób należący do użytkownika i zachowaj wszystkie role, które na niego wskazują.",
              "every_actual_output": true,
              "family": "3d",
              "fields": [
                {
                  "name": "id",
                  "type": "string"
                },
                {
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "name": "code",
                  "type": "integer"
                },
                {
                  "name": "data.task_id",
                  "type": "string"
                },
                {
                  "name": "data.status",
                  "type": "string"
                },
                {
                  "name": "data.progress",
                  "type": "integer"
                },
                {
                  "name": "data.output.*",
                  "type": "string"
                },
                {
                  "name": "data.result.*.url",
                  "type": "string"
                },
                {
                  "name": "data.result.*.type",
                  "type": "string"
                },
                {
                  "name": "data.thumbnail",
                  "type": "string"
                }
              ],
              "formats": "Inspect actual asset bytes and preserve declared metadata; preview type labels do not determine file extensions.",
              "maximum_outputs": null
            },
            "parameters": [
              {
                "conditions": "Użyj selektora modelu Ailoot.",
                "default_known": false,
                "enum": [
                  "tripo3d"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Kompletny przykład używa text_to_model; inne typy zadań wymagają udokumentowanych danych wejściowych właściwych dla danego zadania.",
                "default_known": false,
                "enum": [
                  "text_to_model",
                  "image_to_model",
                  "multiview_to_model",
                  "texture_model",
                  "animate_prerigcheck",
                  "animate_rig",
                  "animate_retarget",
                  "stylize_model",
                  "convert_model"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "type",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Wybierz wersję wyraźnie wskazaną w dokumentacji; ten przykład używa v3.0-20250812.",
                "default_known": false,
                "enum": [
                  "v2.0-20240919",
                  "v1.4-20240625",
                  "v2.5-20250123",
                  "v3.0-20250812",
                  "Turbo-v1.0-20250506"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model_version",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Opisz obiekt, który chcesz utworzyć.",
                "default_known": false,
                "enum_known": false,
                "maximum_length": null,
                "name": "prompt",
                "required": true,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "model": {
                  "enum": [
                    "tripo3d"
                  ],
                  "type": "string"
                },
                "model_version": {
                  "enum": [
                    "v2.0-20240919",
                    "v1.4-20240625",
                    "v2.5-20250123",
                    "v3.0-20250812",
                    "Turbo-v1.0-20250506"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "text_to_model",
                    "image_to_model",
                    "multiview_to_model",
                    "texture_model",
                    "animate_prerigcheck",
                    "animate_rig",
                    "animate_retarget",
                    "stylize_model",
                    "convert_model"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "type",
                "model_version",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "tripo3d",
                "model_version": "v3.0-20250812",
                "prompt": "a cute pig",
                "type": "text_to_model"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "conditions": [
              "Użyj selektora modelu Ailoot.",
              "Kompletny przykład używa text_to_model; inne typy zadań wymagają udokumentowanych danych wejściowych właściwych dla danego zadania.",
              "Wybierz wersję wyraźnie wskazaną w dokumentacji; ten przykład używa v3.0-20250812.",
              "Opisz obiekt, który chcesz utworzyć."
            ],
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [],
            "required": [
              "model",
              "type",
              "model_version",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [],
            "create": {
              "http": "POST",
              "path": "/v1/3d/generations"
            },
            "failed_states": [
              "failed",
              "banned",
              "expired",
              "cancelled"
            ],
            "id_source": "Use returned polling_url and id. Keep provider_task_id and X-Ailoot-Task-Id as separate original identifiers.",
            "mode": "submit_once_poll_original",
            "owned_content": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}/content",
              "url_source": "Use the exact returned signed URL; never construct a token."
            },
            "pending_states": [
              "queued",
              "running"
            ],
            "state_field": "data.status",
            "status": [
              {
                "http": "GET",
                "path": "/v1/3d/generations/{request_id}"
              }
            ],
            "unknown": "Keep the returned public task or operation id and all headers. Read only the original task; unknown or result_pending_check does not authorize another creation.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/3d/generations"
          },
          "method_aliases": [],
          "output": {
            "all_results": "Retain the complete response and headers, original identifiers, every actual output and all usage/accounting fields. Save each unique owned asset and retain every role pointing to it.",
            "every_actual_output": true,
            "family": "3d",
            "fields": [
              {
                "name": "id",
                "type": "string"
              },
              {
                "name": "polling_url",
                "type": "string"
              },
              {
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "name": "code",
                "type": "integer"
              },
              {
                "name": "data.task_id",
                "type": "string"
              },
              {
                "name": "data.status",
                "type": "string"
              },
              {
                "name": "data.progress",
                "type": "integer"
              },
              {
                "name": "data.output.*",
                "type": "string"
              },
              {
                "name": "data.result.*.url",
                "type": "string"
              },
              {
                "name": "data.result.*.type",
                "type": "string"
              },
              {
                "name": "data.thumbnail",
                "type": "string"
              }
            ],
            "formats": "Inspect actual asset bytes and preserve declared metadata; preview type labels do not determine file extensions.",
            "maximum_outputs": null
          }
        },
        "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"
              }
            ]
          },
          {
            "basis": "Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Szacowany koszt generowania",
            "units": [
              {
                "amount": "1.35",
                "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": "1.35",
                "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}\"\ncat > request.json <<'JSON'\n{\n  \"model\": \"tripo3d\",\n  \"type\": \"text_to_model\",\n  \"prompt\": \"a cute pig\",\n  \"model_version\": \"v3.0-20250812\"\n}\nJSON\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/3d/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n# Create once; retain id, polling_url, original task identifiers and every header.\n",
            "label": "curl · create once and retain receipt",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_STATUS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\nu=urljoin(\"https://api.ailoot.ai\",r[\"polling_url\"])\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or p.username or p.password:\n    raise SystemExit(\"Unexpected returned polling URL; preserve the response\")\nsubprocess.run([\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",u,\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"],\"-D\",\"status-headers.txt\",\"-o\",\"status.json\"],check=True)\n# Read this same original polling_url again while pending.\n# Preserve unknown/result_pending_check; do not repeat creation.\nPY_STATUS\n",
            "label": "Read the original task",
            "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())\nroles={}\ndef visit(v,path=\"\"):\n    if isinstance(v,dict):\n        for k,x in v.items(): visit(x,path+\"/\"+k)\n    elif isinstance(v,list):\n        for i,x in enumerate(v): visit(x,path+\"/\"+str(i))\n    elif isinstance(v,str):\n        u=urljoin(\"https://api.ailoot.ai\",v); p=urlsplit(u)\n        if p.scheme==\"https\" and p.netloc==\"api.ailoot.ai\" and not p.username and not p.password and p.path.startswith(\"/v1/media/assets/\") and p.path.endswith(\"/content\"):\n            roles.setdefault(u,[]).append(path)\nvisit(r)\nif not roles: raise SystemExit(\"No completed owned assets; retain the original status\")\nmanifest=[]\nfor i,(u,paths) in enumerate(roles.items()):\n    target=Path(f\"asset-{i}.bin\")\n    subprocess.run([\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",u,\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"],\"-o\",str(target)],check=True)\n    raw=target.read_bytes()\n    if not raw: raise SystemExit(\"Empty asset; retain original status and metadata\")\n    ext=\"glb\" if raw[:4]==b\"glTF\" else \"png\" if raw[:8]==b\"\\x89PNG\\r\\n\\x1a\\n\" else \"jpg\" if raw[:3]==b\"\\xff\\xd8\\xff\" else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"mp4\" if raw[4:8]==b\"ftyp\" else \"bin\"\n    name=f\"asset-{i}.{ext}\"\n    if target.name!=name: target.rename(name)\n    manifest.append({\"file\":name,\"response_paths\":paths,\"bytes\":len(raw)})\nPath(\"asset-manifest.json\").write_text(json.dumps(manifest,indent=2))\nprint(\"Saved\",len(manifest),\"unique owned assets; every response role retained\")\nPY_ASSETS\n",
            "label": "Save every completed owned asset",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "3d",
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "3D",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "out": null,
        "output": [
          "model_3d",
          "image"
        ],
        "path": "/v1/3d/generations",
        "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"
              }
            ]
          },
          {
            "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": "1.35",
                "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": "1.35",
                "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": "tripo3d",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/3d/generations/{request_id}"
        ],
        "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": "1.35",
            "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": "1.35",
            "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": "tripo3d",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "ad54403ac4d0a993b74dbc333c9b60c3cefd1818db7149ed35dced9ab0ddd449",
    "input_html_sha256": "547828d4522455edc1f56a353d6712410697bf850b07dac84453a6f81045467e",
    "private_audit_sha256": "18881eb4fbc95641b7a516958a4ad21ed2584b05af11134f856c1eb6c8a8098d",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/pl/tripo3d/",
    "description": "Tripo tworzy model 3D z pisemnego opisu obiektu. Szersze procesy producenta rozdzielają geometrię, teksturowanie i późniejsze przetwarzanie modelu; sprawdź ukończoną siatkę z kilku stron i zachowaj rzeczywiste pliki do docelowej sceny lub edytora.",
    "locale": "pl",
    "md_url": "https://ailoot.ai/models/pl/tripo3d/index.md",
    "title": "Tripo: 3D Generation — Ailoot",
    "url": "https://ailoot.ai/models/pl/tripo3d/"
  },
  "rawModel": {
    "about": "Tripo tworzy zasoby w postaci modeli 3D z opisu lub referencji wizualnej. Jego procesy oddzielają wygenerowanie obiektu od późniejszych kroków, takich jak teksturowanie, rigging i konwersja. Zacznij od wskazania zamierzonego zasobu i operacji, która go wytwarza: statycznej siatki do sceny, obiektu z teksturami do renderowania lub modelu przygotowywanego dalej w edytorze 3D.\n\nPrzy opisie tekstowym do tworzenia modelu przedstaw kształt obiektu i jego ważne części. Małą latarnię można określić przez korpus, uchwyt, otwory i proporcje; stworzenie przez sylwetkę, kończyny i pozę. Podaj materiał lub sposób wizualnego opracowania, gdy ma znaczenie dla wyniku. Skup opis na samym obiekcie, aby wygenerowaną geometrię można było ocenić względem jasnego projektu.\n\nW procesie producenta opartym na referencjach przygotuj obrazy pokazujące obrys obiektu i jego charakterystyczne cechy. Kilka ujęć powinno przedstawiać ten sam obiekt ze spójnymi proporcjami i akcesoriami. Sprawdź po generowaniu części ukryte w referencji, ponieważ przekonujący widok z przodu nie dowodzi, że tył, spód lub połączenia elementów odpowiadają zamierzonemu projektowi.\n\nZachowaj wybraną wersję modelu przy żądaniu. Interfejs generowania Tripo identyfikuje operację osobno od ustawienia wersji modelu, a udokumentowany przykład tekstowego tworzenia modelu wybiera jawną wersję. Przy porównywaniu zasobów zachowaj dokładną wersję i ustawienia, aby zmiana opisu obiektu nie została pomylona ze zmianą konfiguracji generowania.\n\nGeometria i wygląd powierzchni są osobnymi decyzjami produkcyjnymi. Bazowy proces producenta odróżnia model bez tekstur od wyniku z teksturami i materiałami do renderowania opartego na fizyce. Wybierz postać zasobu potrzebną w następnym kroku, a następnie sprawdź siatkę i towarzyszące pliki materiałów. Obraz podglądu ułatwia orientację, a rzeczywisty model jest zasobem potrzebnym do składania sceny i dalszej edycji.\n\nZbadaj ukończony obiekt pod kilkoma kątami. Sprawdź sylwetkę, rozdzielenie części, cienkie elementy, otwory i powierzchnie styku komponentów. Przy stylizowanym rekwizycie porównaj proporcje z założeniami projektu. Przy obiekcie przypominającym produkt sprawdź, które szczegóły są przedstawione geometrią, a które występują tylko w opracowaniu powierzchni. Wskaż cechę wymagającą poprawy przed zmianą promptu lub referencji.\n\nGenerowanie przebiega jako zadanie asynchroniczne. Zachowaj identyfikator pierwotnego zadania podczas sprawdzania statusu i przechowuj razem ukończony model, podgląd i wszystkie pozostałe zwrócone pliki. Udokumentowany wynik obejmuje pola wyjściowe związane z modelem i renderowane obrazy. Zapisz same pliki do następnego kroku produkcyjnego, zamiast polegać na tymczasowym odnośniku wyniku lub traktować podgląd jako kompletny zasób 3D.\n\nZaimportuj model do docelowego edytora lub środowiska oglądania i sprawdź tam jego orientację, skalę, materiały i geometrię. Rekwizyt sceny, render z bliska i postać gotowa do animacji mają różne potrzeby wykończenia. Zachowaj kopię roboczą do edycji i wygenerowany zasób źródłowy wraz z opisem i referencjami. Gdy potrzebna jest kolejna operacja, taka jak praca z teksturami lub rigging, wybierz ją świadomie i sprawdź wynikowy zasób jako osobny etap.",
    "about_sha256": "3d88be548916d6dfe1ba3f7f45529658d642c81e978ab85ab1e500c4038154fc",
    "alias_of": null,
    "aliases": [],
    "author": "Tripo",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "3d"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "1.35",
            "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": "1.35",
            "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": "Pełny cennik konfiguracji w szczegółach."
      }
    ],
    "ctx": null,
    "display_name": "Tripo: 3D Generation",
    "formats": [
      "3d"
    ],
    "id": "tripo3d",
    "input": [
      "text"
    ],
    "kind": "3d",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.",
          "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": "Retain the complete response and headers, original identifiers, every actual output and all usage/accounting fields. Save each unique owned asset and retain every role pointing to it.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [],
              "create": {
                "http": "POST",
                "path": "/v1/3d/generations"
              },
              "failed_states": [
                "failed",
                "banned",
                "expired",
                "cancelled"
              ],
              "id_source": "Use returned polling_url and id. Keep provider_task_id and X-Ailoot-Task-Id as separate original identifiers.",
              "mode": "submit_once_poll_original",
              "owned_content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "Use the exact returned signed URL; never construct a token."
              },
              "pending_states": [
                "queued",
                "running"
              ],
              "state_field": "data.status",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/3d/generations/{request_id}"
                }
              ],
              "unknown": "Zachowaj zwrócone publiczne id zadania lub operacji oraz wszystkie nagłówki. Odczytuj wyłącznie pierwotne zadanie; unknown ani result_pending_check nie uprawniają do ponownego utworzenia.",
              "unknown_no_replay": true
            },
            "outputs": {
              "all_results": "Zachowaj kompletną odpowiedź i nagłówki, pierwotne identyfikatory, wszystkie rzeczywiste wyniki oraz wszystkie pola użycia i rozliczeń. Zapisz każdy unikalny zasób należący do użytkownika i zachowaj wszystkie role, które na niego wskazują.",
              "every_actual_output": true,
              "family": "3d",
              "fields": [
                {
                  "name": "id",
                  "type": "string"
                },
                {
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "name": "code",
                  "type": "integer"
                },
                {
                  "name": "data.task_id",
                  "type": "string"
                },
                {
                  "name": "data.status",
                  "type": "string"
                },
                {
                  "name": "data.progress",
                  "type": "integer"
                },
                {
                  "name": "data.output.*",
                  "type": "string"
                },
                {
                  "name": "data.result.*.url",
                  "type": "string"
                },
                {
                  "name": "data.result.*.type",
                  "type": "string"
                },
                {
                  "name": "data.thumbnail",
                  "type": "string"
                }
              ],
              "formats": "Inspect actual asset bytes and preserve declared metadata; preview type labels do not determine file extensions.",
              "maximum_outputs": null
            },
            "parameters": [
              {
                "conditions": "Użyj selektora modelu Ailoot.",
                "default_known": false,
                "enum": [
                  "tripo3d"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Kompletny przykład używa text_to_model; inne typy zadań wymagają udokumentowanych danych wejściowych właściwych dla danego zadania.",
                "default_known": false,
                "enum": [
                  "text_to_model",
                  "image_to_model",
                  "multiview_to_model",
                  "texture_model",
                  "animate_prerigcheck",
                  "animate_rig",
                  "animate_retarget",
                  "stylize_model",
                  "convert_model"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "type",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Wybierz wersję wyraźnie wskazaną w dokumentacji; ten przykład używa v3.0-20250812.",
                "default_known": false,
                "enum": [
                  "v2.0-20240919",
                  "v1.4-20240625",
                  "v2.5-20250123",
                  "v3.0-20250812",
                  "Turbo-v1.0-20250506"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model_version",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Opisz obiekt, który chcesz utworzyć.",
                "default_known": false,
                "enum_known": false,
                "maximum_length": null,
                "name": "prompt",
                "required": true,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "model": {
                  "enum": [
                    "tripo3d"
                  ],
                  "type": "string"
                },
                "model_version": {
                  "enum": [
                    "v2.0-20240919",
                    "v1.4-20240625",
                    "v2.5-20250123",
                    "v3.0-20250812",
                    "Turbo-v1.0-20250506"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "text_to_model",
                    "image_to_model",
                    "multiview_to_model",
                    "texture_model",
                    "animate_prerigcheck",
                    "animate_rig",
                    "animate_retarget",
                    "stylize_model",
                    "convert_model"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "type",
                "model_version",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "tripo3d",
                "model_version": "v3.0-20250812",
                "prompt": "a cute pig",
                "type": "text_to_model"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "conditions": [
              "Użyj selektora modelu Ailoot.",
              "Kompletny przykład używa text_to_model; inne typy zadań wymagają udokumentowanych danych wejściowych właściwych dla danego zadania.",
              "Wybierz wersję wyraźnie wskazaną w dokumentacji; ten przykład używa v3.0-20250812.",
              "Opisz obiekt, który chcesz utworzyć."
            ],
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [],
            "required": [
              "model",
              "type",
              "model_version",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [],
            "create": {
              "http": "POST",
              "path": "/v1/3d/generations"
            },
            "failed_states": [
              "failed",
              "banned",
              "expired",
              "cancelled"
            ],
            "id_source": "Use returned polling_url and id. Keep provider_task_id and X-Ailoot-Task-Id as separate original identifiers.",
            "mode": "submit_once_poll_original",
            "owned_content": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}/content",
              "url_source": "Use the exact returned signed URL; never construct a token."
            },
            "pending_states": [
              "queued",
              "running"
            ],
            "state_field": "data.status",
            "status": [
              {
                "http": "GET",
                "path": "/v1/3d/generations/{request_id}"
              }
            ],
            "unknown": "Keep the returned public task or operation id and all headers. Read only the original task; unknown or result_pending_check does not authorize another creation.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/3d/generations"
          },
          "method_aliases": [],
          "output": {
            "all_results": "Retain the complete response and headers, original identifiers, every actual output and all usage/accounting fields. Save each unique owned asset and retain every role pointing to it.",
            "every_actual_output": true,
            "family": "3d",
            "fields": [
              {
                "name": "id",
                "type": "string"
              },
              {
                "name": "polling_url",
                "type": "string"
              },
              {
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "name": "code",
                "type": "integer"
              },
              {
                "name": "data.task_id",
                "type": "string"
              },
              {
                "name": "data.status",
                "type": "string"
              },
              {
                "name": "data.progress",
                "type": "integer"
              },
              {
                "name": "data.output.*",
                "type": "string"
              },
              {
                "name": "data.result.*.url",
                "type": "string"
              },
              {
                "name": "data.result.*.type",
                "type": "string"
              },
              {
                "name": "data.thumbnail",
                "type": "string"
              }
            ],
            "formats": "Inspect actual asset bytes and preserve declared metadata; preview type labels do not determine file extensions.",
            "maximum_outputs": null
          }
        },
        "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"
              }
            ]
          },
          {
            "basis": "Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Szacowany koszt generowania",
            "units": [
              {
                "amount": "1.35",
                "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": "1.35",
                "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}\"\ncat > request.json <<'JSON'\n{\n  \"model\": \"tripo3d\",\n  \"type\": \"text_to_model\",\n  \"prompt\": \"a cute pig\",\n  \"model_version\": \"v3.0-20250812\"\n}\nJSON\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/3d/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n# Create once; retain id, polling_url, original task identifiers and every header.\n",
            "label": "curl · create once and retain receipt",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_STATUS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\nu=urljoin(\"https://api.ailoot.ai\",r[\"polling_url\"])\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or p.username or p.password:\n    raise SystemExit(\"Unexpected returned polling URL; preserve the response\")\nsubprocess.run([\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",u,\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"],\"-D\",\"status-headers.txt\",\"-o\",\"status.json\"],check=True)\n# Read this same original polling_url again while pending.\n# Preserve unknown/result_pending_check; do not repeat creation.\nPY_STATUS\n",
            "label": "Read the original task",
            "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())\nroles={}\ndef visit(v,path=\"\"):\n    if isinstance(v,dict):\n        for k,x in v.items(): visit(x,path+\"/\"+k)\n    elif isinstance(v,list):\n        for i,x in enumerate(v): visit(x,path+\"/\"+str(i))\n    elif isinstance(v,str):\n        u=urljoin(\"https://api.ailoot.ai\",v); p=urlsplit(u)\n        if p.scheme==\"https\" and p.netloc==\"api.ailoot.ai\" and not p.username and not p.password and p.path.startswith(\"/v1/media/assets/\") and p.path.endswith(\"/content\"):\n            roles.setdefault(u,[]).append(path)\nvisit(r)\nif not roles: raise SystemExit(\"No completed owned assets; retain the original status\")\nmanifest=[]\nfor i,(u,paths) in enumerate(roles.items()):\n    target=Path(f\"asset-{i}.bin\")\n    subprocess.run([\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",u,\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"],\"-o\",str(target)],check=True)\n    raw=target.read_bytes()\n    if not raw: raise SystemExit(\"Empty asset; retain original status and metadata\")\n    ext=\"glb\" if raw[:4]==b\"glTF\" else \"png\" if raw[:8]==b\"\\x89PNG\\r\\n\\x1a\\n\" else \"jpg\" if raw[:3]==b\"\\xff\\xd8\\xff\" else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"mp4\" if raw[4:8]==b\"ftyp\" else \"bin\"\n    name=f\"asset-{i}.{ext}\"\n    if target.name!=name: target.rename(name)\n    manifest.append({\"file\":name,\"response_paths\":paths,\"bytes\":len(raw)})\nPath(\"asset-manifest.json\").write_text(json.dumps(manifest,indent=2))\nprint(\"Saved\",len(manifest),\"unique owned assets; every response role retained\")\nPY_ASSETS\n",
            "label": "Save every completed owned asset",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "3d",
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "3D",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "out": null,
        "output": [
          "model_3d",
          "image"
        ],
        "path": "/v1/3d/generations",
        "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"
              }
            ]
          },
          {
            "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": "1.35",
                "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": "1.35",
                "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": "tripo3d",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/3d/generations/{request_id}"
        ],
        "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": "1.35",
            "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": "1.35",
            "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": "tripo3d",
        "request_model_id": "tripo3d",
        "route_label": "Ultra"
      }
    ],
    "name": "Tripo: 3D Generation",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 1.35,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 1.35,
      "varies": false
    },
    "short": "Tripo tworzy model 3D z pisemnego opisu obiektu. Szersze procesy producenta rozdzielają geometrię, teksturowanie i późniejsze przetwarzanie modelu; sprawdź ukończoną siatkę z kilku stron i zachowaj rzeczywiste pliki do docelowej sceny lub edytora.",
    "short_sha256": "0e9752112cce15b72a6c69cb4fa8f88d6c7680bd4fa7b5979e885dd64f1ebe71"
  },
  "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": "Tripo tworzy model 3D z pisemnego opisu obiektu. Szersze procesy producenta rozdzielają geometrię, teksturowanie i późniejsze przetwarzanie modelu; sprawdź ukończoną siatkę z kilku stron i zachowaj rzeczywiste pliki do docelowej sceny lub edytora.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "20baa7db7f0a6863fe971ad98fe4a7a67b59674b329194c09d26f77918410fec",
    "renderer_sha256": "1217dcf19a93e99ac1d6fd7bf974dc19adc12fea4bd4470c2601f04e48f688cb"
  },
  "sourceRevision": "07af9b3b07f81bbb13b9fdc67ecee58c1b20eb573c493c5caa407a6745c1ecfb"
}
