{
  "aboutHtml": "<p>Tripo skaber 3D-modelaktiver ud fra en beskrivelse eller visuel reference. Dens arbejdsgange adskiller generering af et objekt fra senere trin som teksturering, rigging og konvertering. Begynd med at identificere det tilsigtede aktiv og den handling, der producerer det: et statisk mesh til en scene, et tekstureret objekt til rendering eller en model, der skal forberedes yderligere i en 3D-editor.</p><p>Beskriv objektets form og vigtige dele ved en tekst-til-model-opgave. En lille lanterne kan specificeres gennem sin krop, sit håndtag, åbninger og proportioner; et væsen gennem silhuet, lemmer og positur. Angiv materialet eller den visuelle behandling, når det er vigtigt for resultatet. Hold beskrivelsen fokuseret på selve objektet, så den genererede geometri kan vurderes mod et klart design.</p><p>Forbered billeder, der viser motivets omrids og særlige kendetegn, til en referencebaseret producentarbejdsgang. Flere visninger skal beskrive det samme objekt med ensartede proportioner og tilbehør. Gennemgå de dele, der er skjult i referencen, efter generering, fordi en overbevisende frontvisning ikke fastslår, at bagsiden, undersiden eller forbindelserne mellem komponenter matcher det tilsigtede design.</p><p>Gem den valgte modelversion sammen med anmodningen. Tripos genereringsgrænseflade identificerer handlingen adskilt fra modelversionsindstillingen, og det dokumenterede tekst-til-model-eksempel vælger en eksplicit version. Bevar den præcise version og indstillingerne, når aktiver sammenlignes, så en ændring i objektbeskrivelsen ikke forveksles med en ændring i genereringskonfigurationen.</p><p>Geometri og overfladeudseende er særskilte produktionsbeslutninger. Producentens basisarbejdsgang skelner mellem en model uden teksturer og et output med teksturer og materialer til fysisk baseret rendering. Vælg den aktivform, der kræves til det næste trin, og undersøg derefter både meshet og eventuelle tilhørende materialefiler. Et forhåndsvisningsbillede er nyttigt til orientering, mens den faktiske model er det aktiv, der kræves til scenesammensætning og videre redigering.</p><p>Undersøg det færdige objekt fra flere vinkler. Se på silhuetten, adskillelsen af dele, tynde detaljer, åbninger og overflader, hvor komponenter mødes. Sammenlign proportionerne med designbeskrivelsen ved en stiliseret rekvisit. Kontrollér ved et produktlignende objekt, hvilke detaljer der repræsenteres af geometri, og hvilke der kun fremgår af overfladebehandlingen. Identificér den egenskab, der kræver revision, før du ændrer prompten eller referencen.</p><p>Genereringen kører som en asynkron opgave. Bevar den oprindelige opgaveidentitet gennem statuskontrol, og hold den færdige model, forhåndsvisningen og eventuelle andre returnerede filer samlet. Det dokumenterede resultat omfatter modelrelaterede outputfelter og renderede billeder. Gem selve filerne til det næste produktionstrin frem for at stole på et midlertidigt resultatlink eller behandle forhåndsvisningen som det komplette 3D-resultat.</p><p>Importér modellen i den tilsigtede editor eller det tilsigtede visningsmiljø, og undersøg dens orientering, skala, materialer og geometri dér. En scenerekvisit, en nærbilledrendering og en animationsklar figur har forskellige behov for færdiggørelse. Bevar en arbejdskopi til redigeringer, og gem det genererede kildeaktiv sammen med dets opgavebeskrivelse og referencer. Vælg en anden handling bevidst, når den kræves, f.eks. teksturarbejde eller rigging, og gennemgå det resulterende aktiv som et særskilt trin.</p>",
  "aboutText": "Tripo skaber 3D-modelaktiver ud fra en beskrivelse eller visuel reference. Dens arbejdsgange adskiller generering af et objekt fra senere trin som teksturering, rigging og konvertering. Begynd med at identificere det tilsigtede aktiv og den handling, der producerer det: et statisk mesh til en scene, et tekstureret objekt til rendering eller en model, der skal forberedes yderligere i en 3D-editor.\n\nBeskriv objektets form og vigtige dele ved en tekst-til-model-opgave. En lille lanterne kan specificeres gennem sin krop, sit håndtag, åbninger og proportioner; et væsen gennem silhuet, lemmer og positur. Angiv materialet eller den visuelle behandling, når det er vigtigt for resultatet. Hold beskrivelsen fokuseret på selve objektet, så den genererede geometri kan vurderes mod et klart design.\n\nForbered billeder, der viser motivets omrids og særlige kendetegn, til en referencebaseret producentarbejdsgang. Flere visninger skal beskrive det samme objekt med ensartede proportioner og tilbehør. Gennemgå de dele, der er skjult i referencen, efter generering, fordi en overbevisende frontvisning ikke fastslår, at bagsiden, undersiden eller forbindelserne mellem komponenter matcher det tilsigtede design.\n\nGem den valgte modelversion sammen med anmodningen. Tripos genereringsgrænseflade identificerer handlingen adskilt fra modelversionsindstillingen, og det dokumenterede tekst-til-model-eksempel vælger en eksplicit version. Bevar den præcise version og indstillingerne, når aktiver sammenlignes, så en ændring i objektbeskrivelsen ikke forveksles med en ændring i genereringskonfigurationen.\n\nGeometri og overfladeudseende er særskilte produktionsbeslutninger. Producentens basisarbejdsgang skelner mellem en model uden teksturer og et output med teksturer og materialer til fysisk baseret rendering. Vælg den aktivform, der kræves til det næste trin, og undersøg derefter både meshet og eventuelle tilhørende materialefiler. Et forhåndsvisningsbillede er nyttigt til orientering, mens den faktiske model er det aktiv, der kræves til scenesammensætning og videre redigering.\n\nUndersøg det færdige objekt fra flere vinkler. Se på silhuetten, adskillelsen af dele, tynde detaljer, åbninger og overflader, hvor komponenter mødes. Sammenlign proportionerne med designbeskrivelsen ved en stiliseret rekvisit. Kontrollér ved et produktlignende objekt, hvilke detaljer der repræsenteres af geometri, og hvilke der kun fremgår af overfladebehandlingen. Identificér den egenskab, der kræver revision, før du ændrer prompten eller referencen.\n\nGenereringen kører som en asynkron opgave. Bevar den oprindelige opgaveidentitet gennem statuskontrol, og hold den færdige model, forhåndsvisningen og eventuelle andre returnerede filer samlet. Det dokumenterede resultat omfatter modelrelaterede outputfelter og renderede billeder. Gem selve filerne til det næste produktionstrin frem for at stole på et midlertidigt resultatlink eller behandle forhåndsvisningen som det komplette 3D-resultat.\n\nImportér modellen i den tilsigtede editor eller det tilsigtede visningsmiljø, og undersøg dens orientering, skala, materialer og geometri dér. En scenerekvisit, en nærbilledrendering og en animationsklar figur har forskellige behov for færdiggørelse. Bevar en arbejdskopi til redigeringer, og gem det genererede kildeaktiv sammen med dets opgavebeskrivelse og referencer. Vælg en anden handling bevidst, når den kræves, f.eks. teksturarbejde eller rigging, og gennemgå det resulterende aktiv som et særskilt trin.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "4219fc43414a2240ca4b76efde60c5bba83c922bdd507581c60ea733d38e4a79",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "da",
  "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=\"Luk\">×</button></div><div class=\"idline\"><span>Tripo /</span><code>tripo3d</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><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 skaber et 3D-modelaktiv ud fra en skriftlig objektbeskrivelse. Producentens bredere arbejdsgange skelner mellem geometri, teksturering og senere modelbehandling; undersøg det færdige mesh fra flere synsvinkler, og bevar de faktiske filer til den tilsigtede scene eller editor.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>model_3d · Billeder</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Tripo skaber 3D-modelaktiver ud fra en beskrivelse eller visuel reference. Dens arbejdsgange adskiller generering af et objekt fra senere trin som teksturering, rigging og konvertering. Begynd med at identificere det tilsigtede aktiv og den handling, der producerer det: et statisk mesh til en scene, et tekstureret objekt til rendering eller en model, der skal forberedes yderligere i en 3D-editor.</p><p>Beskriv objektets form og vigtige dele ved en tekst-til-model-opgave. En lille lanterne kan specificeres gennem sin krop, sit håndtag, åbninger og proportioner; et væsen gennem silhuet, lemmer og positur. Angiv materialet eller den visuelle behandling, når det er vigtigt for resultatet. Hold beskrivelsen fokuseret på selve objektet, så den genererede geometri kan vurderes mod et klart design.</p><p>Forbered billeder, der viser motivets omrids og særlige kendetegn, til en referencebaseret producentarbejdsgang. Flere visninger skal beskrive det samme objekt med ensartede proportioner og tilbehør. Gennemgå de dele, der er skjult i referencen, efter generering, fordi en overbevisende frontvisning ikke fastslår, at bagsiden, undersiden eller forbindelserne mellem komponenter matcher det tilsigtede design.</p><p>Gem den valgte modelversion sammen med anmodningen. Tripos genereringsgrænseflade identificerer handlingen adskilt fra modelversionsindstillingen, og det dokumenterede tekst-til-model-eksempel vælger en eksplicit version. Bevar den præcise version og indstillingerne, når aktiver sammenlignes, så en ændring i objektbeskrivelsen ikke forveksles med en ændring i genereringskonfigurationen.</p><p>Geometri og overfladeudseende er særskilte produktionsbeslutninger. Producentens basisarbejdsgang skelner mellem en model uden teksturer og et output med teksturer og materialer til fysisk baseret rendering. Vælg den aktivform, der kræves til det næste trin, og undersøg derefter både meshet og eventuelle tilhørende materialefiler. Et forhåndsvisningsbillede er nyttigt til orientering, mens den faktiske model er det aktiv, der kræves til scenesammensætning og videre redigering.</p><p>Undersøg det færdige objekt fra flere vinkler. Se på silhuetten, adskillelsen af dele, tynde detaljer, åbninger og overflader, hvor komponenter mødes. Sammenlign proportionerne med designbeskrivelsen ved en stiliseret rekvisit. Kontrollér ved et produktlignende objekt, hvilke detaljer der repræsenteres af geometri, og hvilke der kun fremgår af overfladebehandlingen. Identificér den egenskab, der kræver revision, før du ændrer prompten eller referencen.</p><p>Genereringen kører som en asynkron opgave. Bevar den oprindelige opgaveidentitet gennem statuskontrol, og hold den færdige model, forhåndsvisningen og eventuelle andre returnerede filer samlet. Det dokumenterede resultat omfatter modelrelaterede outputfelter og renderede billeder. Gem selve filerne til det næste produktionstrin frem for at stole på et midlertidigt resultatlink eller behandle forhåndsvisningen som det komplette 3D-resultat.</p><p>Importér modellen i den tilsigtede editor eller det tilsigtede visningsmiljø, og undersøg dens orientering, skala, materialer og geometri dér. En scenerekvisit, en nærbilledrendering og en animationsklar figur har forskellige behov for færdiggørelse. Bevar en arbejdskopi til redigeringer, og gem det genererede kildeaktiv sammen med dets opgavebeskrivelse og referencer. Vælg en anden handling bevidst, når den kræves, f.eks. teksturarbejde eller rigging, og gennemgå det resulterende aktiv som et særskilt trin.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</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>Inputtyper</dt><dd><code>text</code></dd></div><div><dt>Outputtyper</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>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>tripo3d</div><div>Betingelser: Brug Ailoot-modelvælgeren.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">type</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</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>Betingelser: Det komplette eksempel bruger text_to_model; andre opgavetyper kræver deres dokumenterede opgavespecifikke input.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">model_version</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>v2.0-20240919, v1.4-20240625, v2.5-20250123, v3.0-20250812, Turbo-v1.0-20250506</div><div>Betingelser: Vælg en udtrykkeligt dokumenteret version; dette eksempel bruger v3.0-20250812.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Betingelser: Beskriv objektet, der skal oprettes.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</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=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</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=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span></td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</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=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>conditions</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>Brug Ailoot-modelvælgeren., Det komplette eksempel bruger text_to_model; andre opgavetyper kræver deres dokumenterede opgavespecifikke input., Vælg en udtrykkeligt dokumenteret version; dette eksempel bruger v3.0-20250812., Beskriv objektet, der skal oprettes.</td></tr></tbody></table></div><p>Livscyklus: <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\">Priser</h3><div class=\"card-result-process\" data-billing-basis><h5>Sådan beregnes det endelige beløb</h5><p class=\"note-s\">De viste satser bruges til at anslå omkostningen før genereringen. Det endelige beløb beregnes ud fra den registrerede omkostning for den oprindelige generering. Den målte varighed af outputtet og de anslåede mængder er ikke den endelige fakturerbare mængde.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tarifoplysninger tilføjer ikke anmodningsmuligheder. Understøttede parametre står ved den valgte metode.</p><dl data-price-conditions><dt>Hurtig tilstand</dt><dd>Ikke angivet <span class=\"note-s\">Når hurtig tilstand er valgt</span></dd><dt>flex-tilstand</dt><dd>Ikke angivet <span class=\"note-s\">Når flex-tilstanden er valgt</span></dd><dt>Maksimal ræsonneringsindsats</dt><dd>Ikke angivet <span class=\"note-s\">Når default-justeringen anvendes ved maksimal ræsonneringsindsats</span></dd></dl></div><div data-declared-tariff-pricing><h4>Estimerede takster til sammenligning</h4><h4>Priser efter konfiguration</h4><p class=\"note-s\">Knyt hver omkostning til de viste betingelser. Brug én takst for hver gruppe af alternative konfigurationer.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguration</th><th>Takstplan</th><th>Forventet mængde</th><th>Beløb</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Grundpriser for tokens</th><td data-cell-label=\"Takstplan\"><span class=\"card-cell-label\">Takstplan</span>Grundtakst</td><td data-cell-label=\"Forventet mængde\"><span class=\"card-cell-label\">Forventet mængde</span>—</td><td data-cell-label=\"Beløb\"><span class=\"card-cell-label\">Beløb</span><div><span>Input · Inputtokens · Estimat kun til sammenligning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Output · Outputtokens · Estimat kun til sammenligning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cachelæsning · Estimat kun til sammenligning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cacheskrivning · Estimat kun til sammenligning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cacheskrivning, 1 time · Estimat kun til sammenligning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Anslået genereringsomkostning</th><td data-cell-label=\"Takstplan\"><span class=\"card-cell-label\">Takstplan</span>—</td><td data-cell-label=\"Forventet mængde\"><span class=\"card-cell-label\">Forventet mængde</span>estimat for én generering</td><td data-cell-label=\"Beløb\"><span class=\"card-cell-label\">Beløb</span><div><span>Output · Anslået genereringsomkostning · Estimat kun til sammenligning</span> <b>$1.35</b> <span class=\"price-unit\">estimat før generering</span></div><p class=\"note-s\">Dette estimat er hverken et ekstra gebyr eller en fast pris for den færdige generering.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot Ultra · 3D</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><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 · opret én gang, og bevar kvitteringen</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\">Læs den oprindelige opgave</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\">Gem hvert færdigt digitalt aktiv, du ejer</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><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\">Hent og gem resultater</h3><h4>Ailoot Ultra · 3D</h4><p class=\"note-s\">Hent hvert returneret billede, eller gem dets Base64-indhold</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>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Behold hele svaret og alle headere, de oprindelige identifikatorer, hvert faktisk output og alle felter til forbrug og afregning. Gem hvert entydigt aktiv, du ejer, og behold alle roller, der henviser til det.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det oprindelige svar skal kontrolleres</h5><p class=\"note-s\">Behold det returnerede offentlige opgave- eller operations-id og alle headere. Læs kun den oprindelige opgave; unknown eller result_pending_check giver ikke tilladelse til en ny oprettelse.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">code</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.task_id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.status</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.progress</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.output.*</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.result.*.url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.result.*.type</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">data.thumbnail</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</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>Aliaser for metodestier</h4><p class=\"note-s\">Brug metodestierne vist ovenfor.</p><h4>Relaterede kalder-ID’er</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": "De viste satser bruges til at anslå omkostningen før genereringen. Det endelige beløb beregnes ud fra den registrerede omkostning for den oprindelige generering. Den målte varighed af outputtet og de anslåede mængder er ikke den endelige fakturerbare mængde.",
          "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": "Behold det returnerede offentlige opgave- eller operations-id og alle headere. Læs kun den oprindelige opgave; unknown eller result_pending_check giver ikke tilladelse til en ny oprettelse.",
              "unknown_no_replay": true
            },
            "outputs": {
              "all_results": "Behold hele svaret og alle headere, de oprindelige identifikatorer, hvert faktisk output og alle felter til forbrug og afregning. Gem hvert entydigt aktiv, du ejer, og behold alle roller, der henviser til det.",
              "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": "Brug Ailoot-modelvælgeren.",
                "default_known": false,
                "enum": [
                  "tripo3d"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Det komplette eksempel bruger text_to_model; andre opgavetyper kræver deres dokumenterede opgavespecifikke input.",
                "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": "Vælg en udtrykkeligt dokumenteret version; dette eksempel bruger 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": "Beskriv objektet, der skal oprettes.",
                "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": [
              "Brug Ailoot-modelvælgeren.",
              "Det komplette eksempel bruger text_to_model; andre opgavetyper kræver deres dokumenterede opgavespecifikke input.",
              "Vælg en udtrykkeligt dokumenteret version; dette eksempel bruger v3.0-20250812.",
              "Beskriv objektet, der skal oprettes."
            ],
            "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": "Dette estimat er hverken et ekstra gebyr eller en fast pris for den færdige generering.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Anslået genereringsomkostning",
            "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": "42014dffa1f2c0e2f0b362a3d3874e7edc05c126e18ef764bd7e311ab1892628",
    "input_html_sha256": "50f1f6bfb49d2cafd75d7d2cbca9fd3831b24ce8159cf3b8e774569f4dd20438",
    "private_audit_sha256": "8cbc9964524aba930e06953c9b6c219ce1dde0ee85282a44915a945c10cafc39",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/da/tripo3d/",
    "description": "Tripo skaber et 3D-modelaktiv ud fra en skriftlig objektbeskrivelse. Producentens bredere arbejdsgange skelner mellem geometri, teksturering og senere modelbehandling; undersøg det færdige mesh fra flere synsvinkler, og bevar de faktiske filer til den tilsigtede scene eller editor.",
    "locale": "da",
    "md_url": "https://ailoot.ai/models/da/tripo3d/index.md",
    "title": "Tripo: 3D Generation — Ailoot",
    "url": "https://ailoot.ai/models/da/tripo3d/"
  },
  "rawModel": {
    "about": "Tripo skaber 3D-modelaktiver ud fra en beskrivelse eller visuel reference. Dens arbejdsgange adskiller generering af et objekt fra senere trin som teksturering, rigging og konvertering. Begynd med at identificere det tilsigtede aktiv og den handling, der producerer det: et statisk mesh til en scene, et tekstureret objekt til rendering eller en model, der skal forberedes yderligere i en 3D-editor.\n\nBeskriv objektets form og vigtige dele ved en tekst-til-model-opgave. En lille lanterne kan specificeres gennem sin krop, sit håndtag, åbninger og proportioner; et væsen gennem silhuet, lemmer og positur. Angiv materialet eller den visuelle behandling, når det er vigtigt for resultatet. Hold beskrivelsen fokuseret på selve objektet, så den genererede geometri kan vurderes mod et klart design.\n\nForbered billeder, der viser motivets omrids og særlige kendetegn, til en referencebaseret producentarbejdsgang. Flere visninger skal beskrive det samme objekt med ensartede proportioner og tilbehør. Gennemgå de dele, der er skjult i referencen, efter generering, fordi en overbevisende frontvisning ikke fastslår, at bagsiden, undersiden eller forbindelserne mellem komponenter matcher det tilsigtede design.\n\nGem den valgte modelversion sammen med anmodningen. Tripos genereringsgrænseflade identificerer handlingen adskilt fra modelversionsindstillingen, og det dokumenterede tekst-til-model-eksempel vælger en eksplicit version. Bevar den præcise version og indstillingerne, når aktiver sammenlignes, så en ændring i objektbeskrivelsen ikke forveksles med en ændring i genereringskonfigurationen.\n\nGeometri og overfladeudseende er særskilte produktionsbeslutninger. Producentens basisarbejdsgang skelner mellem en model uden teksturer og et output med teksturer og materialer til fysisk baseret rendering. Vælg den aktivform, der kræves til det næste trin, og undersøg derefter både meshet og eventuelle tilhørende materialefiler. Et forhåndsvisningsbillede er nyttigt til orientering, mens den faktiske model er det aktiv, der kræves til scenesammensætning og videre redigering.\n\nUndersøg det færdige objekt fra flere vinkler. Se på silhuetten, adskillelsen af dele, tynde detaljer, åbninger og overflader, hvor komponenter mødes. Sammenlign proportionerne med designbeskrivelsen ved en stiliseret rekvisit. Kontrollér ved et produktlignende objekt, hvilke detaljer der repræsenteres af geometri, og hvilke der kun fremgår af overfladebehandlingen. Identificér den egenskab, der kræver revision, før du ændrer prompten eller referencen.\n\nGenereringen kører som en asynkron opgave. Bevar den oprindelige opgaveidentitet gennem statuskontrol, og hold den færdige model, forhåndsvisningen og eventuelle andre returnerede filer samlet. Det dokumenterede resultat omfatter modelrelaterede outputfelter og renderede billeder. Gem selve filerne til det næste produktionstrin frem for at stole på et midlertidigt resultatlink eller behandle forhåndsvisningen som det komplette 3D-resultat.\n\nImportér modellen i den tilsigtede editor eller det tilsigtede visningsmiljø, og undersøg dens orientering, skala, materialer og geometri dér. En scenerekvisit, en nærbilledrendering og en animationsklar figur har forskellige behov for færdiggørelse. Bevar en arbejdskopi til redigeringer, og gem det genererede kildeaktiv sammen med dets opgavebeskrivelse og referencer. Vælg en anden handling bevidst, når den kræves, f.eks. teksturarbejde eller rigging, og gennemgå det resulterende aktiv som et særskilt trin.",
    "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": "De fulde prisoplysninger for konfigurationen findes under detaljer."
      }
    ],
    "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": "De viste satser bruges til at anslå omkostningen før genereringen. Det endelige beløb beregnes ud fra den registrerede omkostning for den oprindelige generering. Den målte varighed af outputtet og de anslåede mængder er ikke den endelige fakturerbare mængde.",
          "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": "Behold det returnerede offentlige opgave- eller operations-id og alle headere. Læs kun den oprindelige opgave; unknown eller result_pending_check giver ikke tilladelse til en ny oprettelse.",
              "unknown_no_replay": true
            },
            "outputs": {
              "all_results": "Behold hele svaret og alle headere, de oprindelige identifikatorer, hvert faktisk output og alle felter til forbrug og afregning. Gem hvert entydigt aktiv, du ejer, og behold alle roller, der henviser til det.",
              "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": "Brug Ailoot-modelvælgeren.",
                "default_known": false,
                "enum": [
                  "tripo3d"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Det komplette eksempel bruger text_to_model; andre opgavetyper kræver deres dokumenterede opgavespecifikke input.",
                "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": "Vælg en udtrykkeligt dokumenteret version; dette eksempel bruger 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": "Beskriv objektet, der skal oprettes.",
                "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": [
              "Brug Ailoot-modelvælgeren.",
              "Det komplette eksempel bruger text_to_model; andre opgavetyper kræver deres dokumenterede opgavespecifikke input.",
              "Vælg en udtrykkeligt dokumenteret version; dette eksempel bruger v3.0-20250812.",
              "Beskriv objektet, der skal oprettes."
            ],
            "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": "Dette estimat er hverken et ekstra gebyr eller en fast pris for den færdige generering.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Anslået genereringsomkostning",
            "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 skaber et 3D-modelaktiv ud fra en skriftlig objektbeskrivelse. Producentens bredere arbejdsgange skelner mellem geometri, teksturering og senere modelbehandling; undersøg det færdige mesh fra flere synsvinkler, og bevar de faktiske filer til den tilsigtede scene eller editor.",
    "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 skaber et 3D-modelaktiv ud fra en skriftlig objektbeskrivelse. Producentens bredere arbejdsgange skelner mellem geometri, teksturering og senere modelbehandling; undersøg det færdige mesh fra flere synsvinkler, og bevar de faktiske filer til den tilsigtede scene eller editor.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "396ad920ca04a85aa0d9f30fa1a69d72737b54191e58dd793ec338022bc6fe7f",
    "renderer_sha256": "2bf9f26ea9bfd57ed53d867671d8f05b41a6ea85089f48039e3365dc2b92ec2c"
  },
  "sourceRevision": "46767b342d7b5e9dea393098892dfb8b34357a32733ddcbfaf3dbaa39243c8a5"
}
