lowpoly wordt op 30 okt 2026 uitgefaseerd. Stap vóór deze datums over op een ander model om fouten bij verzoeken te voorkomen.

Printbaarheid analyseren API

Analyseer een 3D-model op printbaarheid — waterdichtheid, volume, gaten, niet-manifold randen en gedegenereerde vlakken. Controleer optioneel ook de wanddikte bij de afmeting waarop u van plan bent te printen.


POST/openapi/v1/print/analyze

Printbaarheid analyseren-taak aanmaken

Deze endpoint maakt een nieuwe analyze-printability-taak aan. De taak evalueert een 3D-model en rapporteert de printbaarheidsmetrieken ervan.

De taak wordt op de achtergrond uitgevoerd. Zie Verwerkingstijden voor de gebruikelijke duur.

Als de invoertaak al gecachete printbaarheid heeft, is de geretourneerde taak direct gereed en geeft de eerste GET erop het analyseresultaat terug zonder via de worker te gaan.

Om ook de wanddikte te controleren bij de maat waarmee u van plan bent te printen, stuurt u printer_type, een printmaat, of beide. Het resultaat wordt geretourneerd in printability.thin_walls. Het controleren van de wanddikte duurt langer, dus de taak is meestal niet direct gereed, zelfs als het model al eerder is geanalyseerd.

Parameters

  • Name
    model_url
    Type
    string
    Verplicht
    Description

    URL van een te analyseren 3D-model. Ondersteunde formaten: .glb, .gltf, .obj, .fbx, .stl. Gebruik een http- of https-URL, of een base64 data:-URL voor een GLB (data:model/gltf-binary;base64,...) of glTF (data:model/gltf+json;base64,...). .obj-, .fbx- en .stl-bestanden moeten worden verzonden als een http- of https-URL.

    Maximale bestandsgrootte: 400 MB voor een http- of https-URL, 100 MB voor een data:-URI.

    Een GLB-, glTF-, FBX- of OBJ-bestand groter dan 100 MB mag maximaal 10.000.000 vlakken hebben. Vlakken worden geteld als driehoeken: een vierhoek telt als 2, en een mesh die meerdere keren wordt getekend, telt één keer per kopie. Boven 100 MB moet een FBX-bestand binaire FBX 7.1 of nieuwer zijn, en mag een GLB- of glTF-bestand geen Draco-compressie gebruiken.

    Meshy-downloadlinks (assets.meshy.ai/…?Expires=…&Signature=…) zijn ondertekend en stoppen met werken op expires_at van de taak; de taak opnieuw ophalen vernieuwt deze niet. Geef voor een met Meshy gegenereerd model in plaats daarvan input_task_id mee. Dit werkt zolang de brontaak behouden blijft (zie Asset-retentie). Om een model daarna opnieuw te gebruiken, downloadt u het vóór expires_at en stuurt u uw eigen kopie mee.

  • Name
    printer_type
    Type
    string
    Description

    De printer die u van plan bent te gebruiken. Dit bepaalt de minimale wanddikte voor de wanddikte-controle. Standaard fdm wanneer u een printmaat meestuurt zonder dit veld.

    Beschikbare waarden:

    • fdm: filament, minimale wanddikte 1,0 mm.
    • sla: resin, minimale wanddikte 0,8 mm.
    • full_color: full-color, minimale wanddikte 2,0 mm.
  • Name
    intended_print_height_mm
    Type
    number
    Description

    Hoogte van de print, in millimeters. Bereik: [1, 1000]. Afgerond op de dichtstbijzijnde millimeter. Alleen voor GLB-invoer.

  • Name
    intended_print_longest_side_mm
    Type
    number
    Description

    Lengte van de langste zijde van de print, in millimeters. Bereik: [1, 1000]. Afgerond op de dichtstbijzijnde millimeter. Werkt met elk invoerformaat.

Resultaat

De result-eigenschap van de response bevat de id van de nieuw aangemaakte analyze-printability-taak.

Foutmodi

  • Name
    400 - Bad Request
    Description

    Het verzoek was onacceptabel. Veelvoorkomende oorzaken:

    • Ontbrekende parameter: noch input_task_id noch model_url is meegegeven.
    • Ongeldige UUID: input_task_id is geen geldige UUID.
    • Ongeldige model-URL: model_url is onjuist opgemaakt, gebruikt een niet-ondersteund schema, of heeft een niet-ondersteunde bestandsextensie.
    • Modelbestand te groot: de inhoud van model_url overschreed 400 MB (http- of https-URL) of 100 MB (data:-URI).
    • Te veel vlakken: model_url is een GLB-, glTF-, FBX- of OBJ-bestand groter dan 100 MB met meer dan 10.000.000 vlakken. Verminder het aantal vlakken en stuur het bestand opnieuw.
    • ASCII FBX groter dan 100 MB: model_url is een ASCII FBX groter dan 100 MB. Stuur het als binaire FBX of GLB.
    • Onleesbaar modelbestand: model_url is groter dan 100 MB en de header kan niet worden gelezen, bijvoorbeeld een Draco-gecomprimeerde GLB of glTF, of een binaire FBX ouder dan 7.1.
    • Modelheader te complex: model_url is groter dan 100 MB en de header bevat te veel meshes, nodes of records om te controleren. Verminder het aantal objecten in het bestand en stuur het opnieuw.
    • Modelbestand kon niet worden gedownload: model_url gaf een fout terug, meestal omdat een ondertekende Meshy-downloadlink is verlopen. De taak opnieuw ophalen geeft dezelfde URL met dezelfde vervaldatum terug, dus stuur uw eigen kopie van het bestand, of gebruik input_task_id zolang de brontaak nog behouden blijft.
    • Taak niet geslaagd: de aangeduide taak is nog in behandeling, bezig of mislukt.
    • Ongeldige printmaat: intended_print_height_mm of intended_print_longest_side_mm valt buiten [1, 1000], of beide zijn meegestuurd.
    • Onbekend printertype: printer_type is niet fdm, sla of full_color.
    • Hoogte op een niet-GLB-model: intended_print_height_mm is meegestuurd met een model_url die geen .glb is. Gebruik in plaats daarvan intended_print_longest_side_mm.
    • Dit model kan niet op hoogte worden geschaald: bij de gevraagde hoogte (of de standaard 150 mm) zou de langste zijde van het model buiten [1, 1000] mm vallen, is het model plat, of kan de grootte niet worden bepaald. Gebruik in plaats daarvan intended_print_longest_side_mm. Voor een .glb-model_url en sommige input_task_id-taken wordt dit pas ontdekt nadat de taak is gestart, en eindigt de taak in plaats daarvan met FAILED.
    • STL-maat onbruikbaar: printer_type is meegestuurd zonder maat, en de eigen langste zijde van de .stl kan niet worden gelezen of valt buiten [1, 1000] mm. Stuur intended_print_longest_side_mm mee.
  • Name
    401 - Unauthorized
    Description

    Authenticatie is mislukt. Controleer uw API-sleutel.

  • Name
    404 - Not Found
    Description

    Veelvoorkomende oorzaken:

    • De taak bestaat niet, is verwijderd, of is eigendom van een andere gebruiker.
    • De taak gebruikt een model ouder dan Meshy 6, of de mode ervan produceert geen 3D-asset.
    • Het onderliggende modelbestand is niet langer beschikbaar in de opslag.
  • Name
    429 - Too Many Requests
    Description

    U heeft uw quotum voor openstaande taken of uw rate limit overschreden.

Request

POST
/openapi/v1/print/analyze
# Analyze an existing task
curl https://api.meshy.ai/openapi/v1/print/analyze \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578"
  }'

# Or analyze a model URL directly
curl https://api.meshy.ai/openapi/v1/print/analyze \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "model_url": "https://example.com/model.glb"
  }'

# Also check wall thickness for a 100 mm tall SLA print
curl https://api.meshy.ai/openapi/v1/print/analyze \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
    "printer_type": "sla",
    "intended_print_height_mm": 100
  }'

Response

{
  "result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}

GET/openapi/v1/print/analyze/:id

Printbaarheid analyseren taak ophalen

Deze endpoint haalt een analyze-printability-taak op aan de hand van de ID.

Parameters

  • Name
    id
    Type
    path
    Description

    De ID van de analyze-printability-taak die moet worden opgehaald.

Returns

Het Analyze Printability Task Object. Het printability-veld is null totdat de taak de status SUCCEEDED bereikt. Wanneer de wanddikte is gecontroleerd, bevat printability ook intended_print en thin_walls.

Request

GET
/openapi/v1/print/analyze/a43b5c6d-7e8f-901a-234b-567c890d1e2f
curl https://api.meshy.ai/openapi/v1/print/analyze/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-analyze",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000001000,
  "expires_at": 1715725401000,
  "task_error": null,
  "printability": {
    "_version": "v1",
    "status": "warning",
    "issue_count": 1,
    "error_count": 0,
    "warning_count": 1,
    "metrics": {
      "is_watertight": true,
      "volume": 1.316167354292668,
      "non_manifold_edges": 0,
      "degenerate_faces": 43242,
      "holes": 0
    },
    "evaluated_at": 1700000001000
  },
  "consumed_credits": 0
}

Response (wall thickness checked)

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-analyze",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000012000,
  "expires_at": 1715725412000,
  "task_error": null,
  "printability": {
    "_version": "v1",
    "status": "error",
    "issue_count": 2,
    "error_count": 1,
    "warning_count": 1,
    "metrics": {
      "is_watertight": true,
      "volume": 1.316167354292668,
      "non_manifold_edges": 0,
      "degenerate_faces": 43242,
      "holes": 0
    },
    "intended_print": {
      "printer_type": "sla",
      "height_mm": 100,
      "longest_side_mm": 118,
      "wall_thickness_mm": 0.8,
      "dimensions_mm": [118, 72.41, 99.87]
    },
    "thin_walls": {
      "thin_area_ratio": 0.083,
      "has_thin_walls": true,
      "status": "error"
    },
    "evaluated_at": 1700000012000
  },
  "consumed_credits": 0
}

DELETE/openapi/v1/print/analyze/:id

Een taak voor Printbaarheid analyseren verwijderen

Deze endpoint verwijdert permanent een taak voor het analyseren van printbaarheid en het bijbehorende gecachte resultaat. Deze actie is onomkeerbaar.

Pad­parameters

  • Name
    id
    Type
    path
    Description

    De ID van de taak voor printbaarheidsanalyse die moet worden verwijderd.

Taakstatus

Een taak die nog PENDING is, wordt verwijderd en de credits die bij het aanmaken zijn verbruikt, worden terugbetaald.

Een taak die al IN_PROGRESS is, kan niet worden verwijderd: het verzoek wordt geweigerd met 409 Conflict en de taak blijft doorlopen. Credits voor een taak die de worker al is gestart, worden niet terugbetaald, dus als je de taak halverwege verwijdert, verlies je zowel de credits als het resultaat. Wacht tot de taak de status SUCCEEDED, FAILED of CANCELED bereikt en verwijder deze dan.

Een taak in een eindstatus (SUCCEEDED, FAILED of CANCELED) wordt verwijderd zonder terugbetaling.

Retourwaarden

Retourneert 200 OK bij succes, of 409 Conflict wanneer de taak IN_PROGRESS is.

Request

DELETE
/openapi/v1/print/analyze/a43b5c6d-7e8f-901a-234b-567c890d1e2f
curl --request DELETE \
  --url https://api.meshy.ai/openapi/v1/print/analyze/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS — the task is left running:
{
  "message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}

GET/openapi/v1/print/analyze

Lijst met taken voor printbaarheidsanalyse

Deze endpoint stelt u in staat om een lijst met taken voor printbaarheidsanalyse op te halen.

Parameters

Optionele attributen

  • Name
    page_num
    Type
    integer
    Description

    Paginanummer voor paginering. Begint bij en standaard 1.

  • Name
    page_size
    Type
    integer
    Description

    Limiet voor de paginagrootte. Standaard 10 items. Maximaal toegestaan is 100 items.

  • Name
    sort_by
    Type
    string
    Description

    Veld om op te sorteren. Beschikbare waarden:

    • +created_at: Sorteer op aanmaaktijd in oplopende volgorde.
    • -created_at: Sorteer op aanmaaktijd in aflopende volgorde.

Retourwaarden

Retourneert een gepagineerde lijst van Analyze Printability Task Objecten.

Request

GET
/openapi/v1/print/analyze
curl https://api.meshy.ai/openapi/v1/print/analyze?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

[
  {
    "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
    "type": "print-analyze",
    "status": "SUCCEEDED",
    "progress": 100,
    "preceding_tasks": 0,
    "created_at": 1699999999000,
    "started_at": 1700000000000,
    "finished_at": 1700000001000,
    "expires_at": 1715725401000,
    "task_error": null,
    "printability": {
      "_version": "v1",
      "status": "warning",
      "issue_count": 1,
      "error_count": 0,
      "warning_count": 1,
      "metrics": {
        "is_watertight": true,
        "volume": 1.316167354292668,
        "non_manifold_edges": 0,
        "degenerate_faces": 43242,
        "holes": 0
      },
      "evaluated_at": 1700000001000
    },
    "consumed_credits": 0
  }
]

GET/openapi/v1/print/analyze/:id/stream

Stream an Analyze Printability Task

Deze endpoint streamt realtime updates voor een printbaarheid-analysetaak via Server-Sent Events (SSE).

Parameters

  • Name
    id
    Type
    path
    Description

    Unieke identifier voor de analyze-printability-taak die gestreamd moet worden.

Retourwaarden

Retourneert een stream van Analyze Printability Task Objects als Server-Sent Events.

Elk frame bevat het volledige taakobject voor de fase — dezelfde vorm die de Get-endpoint retourneert — dus zolang de taak PENDING of IN_PROGRESS is, zijn de outputvelden simpelweg nog niet ingevuld (null, [] of {}) en is finished_at gelijk aan null. Het printability-blok wordt pas verzonden zodra de taak SUCCEEDED bereikt.

Request

GET
/openapi/v1/print/analyze/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream
curl -N https://api.meshy.ai/openapi/v1/print/analyze/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response Stream

// Error event example
event: error
data: {
  "status_code": 404,
  "message": "Task not found"
}

// Message event examples illustrate task progress.
// Every frame is the full task object; fields not yet populated are null / empty.
// The PENDING frame below is abbreviated to the fields that change.
event: message
data: {
  "id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
  "progress": 0,
  "status": "PENDING"
}

event: message
data: {
  "id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
  "type": "print-analyze",
  "status": "SUCCEEDED",
  "progress": 100,
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000001000,
  "expires_at": 1715725401000,
  "task_error": null,
  "printability": {
    "_version": "v1",
    "status": "warning",
    "issue_count": 1,
    "error_count": 0,
    "warning_count": 1,
    "metrics": {
      "is_watertight": true,
      "volume": 1.316167354292668,
      "non_manifold_edges": 0,
      "degenerate_faces": 43242,
      "holes": 0
    },
    "evaluated_at": 1700000001000
  },
  "consumed_credits": 0
}

Het Printbaarheid analyseren Taakobject

  • Name
    id
    Type
    string
    Description

    Unieke identificatie voor de taak. Hoewel we een k-sortable UUID gebruiken voor taak-id's als implementatiedetail, moet je geen aannames doen over het formaat van de id.

  • Name
    type
    Type
    string
    Description

    Type van de analyze-printability-taak. De waarde is print-analyze.

  • Name
    status
    Type
    string
    Description

    Status van de taak. Mogelijke waarden zijn een van PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progress van de taak. Als de taak nog niet gestart is, zal deze eigenschap 0 zijn. Zodra de taak is geslaagd, wordt dit 100.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Het aantal voorafgaande taken.

  • Name
    created_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de taak is aangemaakt, in milliseconden.

  • Name
    started_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de taak is gestart, in milliseconden. Als de taak nog niet gestart is, zal deze eigenschap 0 zijn.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de taak is voltooid, in milliseconden. Als de taak nog niet voltooid is, zal deze eigenschap 0 zijn.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer het taakresultaat uit het systeem zal verlopen, in milliseconden. 0 als de taak nog niet is voltooid.

  • Name
    task_error
    Type
    object
    Description

    Foutinformatie als de taak is mislukt. Deze eigenschap is null als de taak niet is mislukt. Zie Fouten voor meer details.

    • Name
      message
      Type
      string
      Description

      Foutmelding die beschrijft wat er misging.

  • Name
    printability
    Type
    object
    Description

    Resultaat van de printbaarheidsevaluatie. null totdat de taak SUCCEEDED bereikt.

    • Name
      _version
      Type
      string
      Description

      Schemaversie van het printbaarheidsresultaat. Momenteel v1.

    • Name
      status
      Type
      string
      Description

      Algemene status. Een van:

      • healthy: geen fouten en geen waarschuwingen.
      • warning: ten minste één waarschuwing, geen fouten.
      • error: ten minste één fout.
      • unknown: het model kon niet worden geanalyseerd.

      Wanneer wanddikte werd gecontroleerd, is dit de slechtste van de bovenstaande controles en thin_walls.status. Van slechtst naar best: error, warning, unknown, healthy.

    • Name
      issue_count
      Type
      integer
      Description

      Totaal aantal problemen, gelijk aan error_count + warning_count.

    • Name
      error_count
      Type
      integer
      Description

      Aantal problemen op foutniveau. Fouten worden gemeld wanneer het model niet waterdicht is, een niet-positief volume heeft, of niet-manifold randen heeft. Wanneer wanddikte werd gecontroleerd, tellen wanden die te dun zijn (thin_walls.status is error) als nog een extra fout.

    • Name
      warning_count
      Type
      integer
      Description

      Aantal problemen op waarschuwingsniveau. Waarschuwingen worden gemeld wanneer het model gedegenereerde vlakken of gaten bevat.

    • Name
      metrics
      Type
      object
      Description

      Ruwe geometriemetingen die door de evaluator worden geretourneerd.

      • Name
        is_watertight
        Type
        boolean
        Description

        true wanneer de mesh geen grensranden heeft (d.w.z. gesloten is).

      • Name
        volume
        Type
        number
        Description

        Volume van het model in kubieke meter.

      • Name
        non_manifold_edges
        Type
        integer
        Description

        Aantal niet-manifold randen.

      • Name
        degenerate_faces
        Type
        integer
        Description

        Aantal gedegenereerde vlakken (vlakken met oppervlakte nul of ongeldige vlakken).

      • Name
        holes
        Type
        integer
        Description

        Aantal gaten (grenslussen) in de mesh.

    • Name
      intended_print
      Type
      object
      Description

      De printer en grootte die de wanddiktecontrole gebruikte. Alleen aanwezig wanneer wanddikte werd gecontroleerd.

      • Name
        printer_type
        Type
        string
        Description

        fdm, sla, of full_color.

      • Name
        height_mm
        Type
        number
        Description

        De printhoogte in millimeter, als de print op hoogte werd geschaald. Anders null.

      • Name
        longest_side_mm
        Type
        number
        Description

        De langste zijde van de print in millimeter. Bij schaling op hoogte wordt dit berekend aan de hand van de proporties van het model.

      • Name
        wall_thickness_mm
        Type
        number
        Description

        De minimale wanddikte voor printer_type, in millimeter. Wanden die dunner zijn dan dit worden gerapporteerd als te dun.

      • Name
        dimensions_mm
        Type
        array
        Description

        De [breedte, diepte, hoogte] van de print in millimeter. De hoogte kan een fractie van een millimeter afwijken van height_mm. null voor niet-GLB-invoer, of als de grootte van het model niet kan worden bepaald.

    • Name
      thin_walls
      Type
      object
      Description

      Het resultaat van de wanddiktecontrole. Alleen aanwezig wanneer wanddikte werd gecontroleerd.

      • Name
        thin_area_ratio
        Type
        number
        Description

        Aandeel van het oppervlak, van 0 tot 1, dat dunner is dan intended_print.wall_thickness_mm. null als het model niet gemeten kon worden.

      • Name
        has_thin_walls
        Type
        boolean
        Description

        true als enig deel van het oppervlak te dun is. Scherpe hoeken alleen kunnen dit al instellen, gebruik dus status om te bepalen of de wanden verdikt moeten worden. null als het model niet gemeten kon worden.

      • Name
        status
        Type
        string
        Description

        Het oordeel over de wanddikte. Een van:

        • healthy: 5% of minder van het oppervlak is te dun.
        • error: meer dan 5% van het oppervlak is te dun. Om de wanden te verdikken, geef je de id van deze taak door aan Printbaarheid repareren als input_task_id (voor een .stl-, .fbx- of .gltf-model_url stuur je in plaats daarvan het bestand als model_url).
        • unknown: het model kon niet gemeten worden. Als de wanddiktecontrole zelf mislukt, eindigt de taak als FAILED.
    • Name
      evaluated_at
      Type
      timestamp
      Description

      Tijdstempel van wanneer de analyse werd berekend, in milliseconden sinds epoch.

  • Name
    consumed_credits
    Type
    integer
    Description

    Altijd 0. Dit endpoint is gratis.

The Analyze Printability Task Object

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-analyze",
  "status": "SUCCEEDED",
  "progress": 100,
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000001000,
  "expires_at": 1715725401000,
  "task_error": null,
  "printability": {
    "_version": "v1",
    "status": "warning",
    "issue_count": 1,
    "error_count": 0,
    "warning_count": 1,
    "metrics": {
      "is_watertight": true,
      "volume": 1.316167354292668,
      "non_manifold_edges": 0,
      "degenerate_faces": 43242,
      "holes": 0
    },
    "evaluated_at": 1700000001000
  },
  "consumed_credits": 0
}

The Analyze Printability Task Object (wall thickness checked)

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-analyze",
  "status": "SUCCEEDED",
  "progress": 100,
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000012000,
  "expires_at": 1715725412000,
  "task_error": null,
  "printability": {
    "_version": "v1",
    "status": "error",
    "issue_count": 2,
    "error_count": 1,
    "warning_count": 1,
    "metrics": {
      "is_watertight": true,
      "volume": 1.316167354292668,
      "non_manifold_edges": 0,
      "degenerate_faces": 43242,
      "holes": 0
    },
    "intended_print": {
      "printer_type": "sla",
      "height_mm": 100,
      "longest_side_mm": 118,
      "wall_thickness_mm": 0.8,
      "dimensions_mm": [118, 72.41, 99.87]
    },
    "thin_walls": {
      "thin_area_ratio": 0.083,
      "has_thin_walls": true,
      "status": "error"
    },
    "evaluated_at": 1700000012000
  },
  "consumed_credits": 0
}