Zum Inhalt springen

Sofortpreis: Lade deine Datei hoch und sieh den Preis noch vor der Registrierung.

HazTuPieza

API

Schick uns eine Datei und eine Konfiguration, und wir geben dir sofort den Preis zurück: für 3D-Druck und Laserschneiden von Acrylglas. Es ist dieselbe Preisberechnung wie auf der Website; vereinbarte Konditionen werden also automatisch berücksichtigt.

Loslegen

Du brauchst ein Konto und einen Schlüssel. Den Schlüssel erstellst du unter Konto → API-Schlüssel; er wird nur einmal angezeigt. Wir speichern ihn nicht im Klartext. Wenn du ihn verlierst, musst du ihn widerrufen und einen neuen erstellen.

Alles läuft über HTTPS und antwortet mit JSON. Anfragen mit Body erwarten JSON und Content-Type: application/json; Anfragen mit Datei laufen als multipart.

Zum Prüfen, ob der Schlüssel funktioniert, kannst du jeden Endpoint verwenden:

curl https://haztupieza.es/api/v1/orders \
  -H "Authorization: Bearer htp_TU_CLAVE"

Preis berechnen

Die Preisberechnung ist kostenlos und erstellt nichts: weder ein gespeichertes Angebot noch einen Warenkorb oder eine Bestellung. Du kannst sie beim Anpassen der Maße beliebig oft aufrufen.

Mit Datei

POST/api/v1/quotes/file

Der kurze Weg: Du lädst das Teil hoch und wir messen es aus. Das funktioniert für 3D-Druck und Laserschneiden; das Verfahren ergibt sich aus der Dateiendung.

3D-Druck — eine STL-, 3MF- oder STEP-Datei:

curl https://haztupieza.es/api/v1/quotes/file \
  -H "Authorization: Bearer htp_TU_CLAVE" \
  -F "file=@soporte.stl" \
  -F 'config={"materialId":"pla","colorId":"negro","qualityId":"standard","infillId":"i25","quantity":4,"supports":true,"leadTimeId":"standard"}'

Laserschneiden — eine SVG- oder DXF-Datei. Die Maße werden direkt aus der Zeichnung übernommen:

curl https://haztupieza.es/api/v1/quotes/file \
  -H "Authorization: Bearer htp_TU_CLAVE" \
  -F "file=@tapa.svg" \
  -F 'config={"sheetId":"pmma-colada-incoloro-3","quantity":10,"leadTimeId":"standard"}'

Die Antwort enthält neben dem Preis auch die von uns ermittelten Maße:

200 OK
{
  "ok": true,
  "errors": [],
  "total": 24.18,
  "breakdown": {
    "unitPrice": 6.045,
    "lines": [
      { "id": "material", "label": "Material", "amount": 4.12 },
      { "id": "machine", "label": "Máquina", "amount": 11.4 },
      { "id": "finishing", "label": "Acabados", "amount": 4.9 }
    ],
    "taxRate": 0.21,
    "leadTimeDays": 3
  },
  "file": {
    "name": "soporte.stl",
    "mesh": {
      "volumeCm3": 18.42,
      "surfaceCm2": 96.3,
      "boundingBoxMm": { "x": 62.4, "y": 41, "z": 18 },
      "triangles": 24680,
      "watertight": true,
      "hash": "9f2c1a7b"
    }
  }
}

Wir speichern nichts aus der Datei. Die Datei wird im Arbeitsspeicher vermessen und danach verworfen. Können wir ein Format nicht öffnen — etwa SolidWorks oder Illustrator —, antworten wir mit 200, «manualReview» auf true und dem Grund: Dann kalkuliert ein Mensch.

Mit bereits vermessener Geometrie

POST/api/v1/quotes

Wenn du Volumen und Bounding Box des Teils schon hast — weil du selbst misst oder sie aus einer früheren Kalkulation gespeichert hast —, musst du die Datei nicht erneut hochladen.

curl https://haztupieza.es/api/v1/quotes \
  -H "Authorization: Bearer htp_TU_CLAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "process": "FDM_3D",
    "label": "soporte.stl",
    "config": {
      "materialId": "pla",
      "colorId": "negro",
      "qualityId": "standard",
      "infillId": "i25",
      "quantity": 4,
      "supports": true,
      "leadTimeId": "standard"
    },
    "mesh": {
      "volumeCm3": 18.42,
      "surfaceCm2": 96.3,
      "boundingBoxMm": {
        "x": 62.4,
        "y": 41,
        "z": 18
      },
      "triangles": 24680,
      "watertight": true,
      "hash": "9f2c1a7b"
    }
  }'

Ein 200 bedeutet nicht immer Ja. Wenn das Teil nicht gefertigt werden kann — etwa weil diese Platte nicht mehr angeboten wird oder das Maß nicht in die Maschine passt —, bleibt die Antwort 200, mit «ok» auf false und dem Grund in «errors». Das ist eine gültige Antwort, kein Fehler: Ein erneuter Versuch würde genau dasselbe ergeben. Prüfe immer «ok».

Laserschneiden, alle Felder

Ohne Datei kannst du jede Form aus dem Katalog anfragen. Dieses Beispiel zeigt wirklich alles, was der Endpoint akzeptiert, einschließlich der Standardwerte; fast nichts davon ist Pflicht.

curl https://haztupieza.es/api/v1/quotes \
  -H "Authorization: Bearer htp_TU_CLAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "process": "LASER_ACRYLIC",
    "label": "frontal",
    "config": {
      "sheetId": "pmma-colada-incoloro-3",
      "shape": "ROUNDED_RECT",
      "shapeId": "rounded-rect",
      "shapeParams": {
        "w": 300,
        "h": 200,
        "radius": 12
      },
      "widthMm": 300,
      "heightMm": 200,
      "cornerRadiusMm": 12,
      "innerDiameterMm": 0,
      "quantity": 10,
      "cutouts": [
        {
          "id": "ventana",
          "shapeId": "circle",
          "params": {
            "d": 22
          },
          "xMm": 60,
          "yMm": 100,
          "rotationDeg": 0,
          "conservarPieza": true
        },
        {
          "id": "ranura",
          "shapeId": "stadium",
          "params": {
            "w": 40,
            "h": 8
          },
          "xMm": 240,
          "yMm": 100,
          "rotationDeg": 90
        },
        {
          "id": "rotulo",
          "shapeId": "texto",
          "params": {},
          "texto": {
            "texto": "SALIDA",
            "tipografiaId": "stardos-stencil",
            "alturaMm": 25
          },
          "xMm": 150,
          "yMm": 100,
          "rotationDeg": 0
        }
      ],
      "holes": {
        "pattern": "CORNERS",
        "diameterMm": 4,
        "edgeDistanceMm": 10,
        "count": 4,
        "edgeCounts": [
          2,
          2,
          2,
          2
        ],
        "rows": 0,
        "columns": 0,
        "centerDistanceMm": 0,
        "points": []
      },
      "engraveAreaCm2": 0,
      "leadTimeId": "express",
      "vectorPendingReview": false,
      "notes": "Cantos pulidos por la cara vista."
    }
  }'

Nur diese Angaben sind erforderlich: sheetId, shape, widthMm, heightMm, quantity, leadTimeId

shapeId: "texto" — schneidet den Text als Kontur des Teils, mit der von dir angegebenen Schriftart und Höhe.

curl https://haztupieza.es/api/v1/quotes \
  -H "Authorization: Bearer htp_TU_CLAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "process": "LASER_ACRYLIC",
    "config": {
      "sheetId": "pmma-colada-incoloro-3",
      "shape": "CUSTOM",
      "shapeId": "texto",
      "texto": {
        "texto": "ABIERTO",
        "tipografiaId": "anton",
        "alturaMm": 80
      },
      "widthMm": 400,
      "heightMm": 80,
      "quantity": 2,
      "leadTimeId": "standard"
    }
  }'

3D-Druck, alle Felder

Dasselbe für FDM: das ausführliche Beispiel einschließlich aller optionalen Angaben.

curl https://haztupieza.es/api/v1/quotes/file \
  -H "Authorization: Bearer htp_TU_CLAVE" \
  -F "file=@pieza.3mf" \
  -F 'config={"materialId":"pla","colorId":"negro","qualityId":"standard","infillId":"i25","quantity":4,"supports":true,"leadTimeId":"standard","finishIds":["sanding"],"extraColorIds":["rojo"],"plateId":"auto","nozzleId":"auto","pauses":[{"layer":40,"action":"Colocar 4 tuercas M3 en los alojamientos","inserts":[{"optionId":"tuerca-m3","quantity":4}]}],"notes":"La cara buena es la de arriba."}'

Optionen

Die Kennungen, die «materialId», «sheetId» und ähnliche Felder akzeptieren. Diese Liste stammt aus demselben Katalog wie in der Werkstatt und ändert sich mit ihm: Kopiere sie nicht, sondern ruf sie ab.

Alles unten in einem einzigen Aufruf und immer aktuell:

GET/api/v1/catalog

curl https://haztupieza.es/api/v1/catalog \
  -H "Authorization: Bearer htp_TU_CLAVE"

Aktueller Stand:

Materialien (3D-Druck)

KennungNameDetails
plaPLAPLA · 15 colores
pla-alta-resistenciaPLA alta resistenciaPLA · 9 colores
pla-matePLA MatePLA · 3 colores
pla-recicladoPLA RecicladoPLA · 3 colores
pla-sedaPLA SilkPLA · 7 colores
pla-maderaPLA MaderaPLA · 3 colores
pla-marmolPLA MarmolPLA · 2 colores
pla-glitterPLA GlitterPLA · 4 colores
pla-fluorescentePLA Fluorescente (glow in the dark)PLA · 2 colores
pla-metalizadoPLA MetalizadoPLA · 4 colores
petgPETGPETG · 7 colores
absABS-EABS · 5 colores
asaASAASA · 4 colores
tpu-95aTPU 95A FlexTPU · 5 colores
nylon-paNylon PAPA · 2 colores
hipsHIPSHIPS · 2 colores

Jedes Material enthält seine Farben in «colors». Die Farb-ID kommt in «colorId».

Qualitätsstufen

KennungNameDetails
draftBorrador 0,28 mm0.28 mm
standardEstándar 0,20 mm0.2 mm
fineFina 0,16 mm0.16 mm
ultraUltrafina 0,12 mm0.12 mm

Füllungen

KennungNameDetails
i1515 % ligero15 %
i2525 % estándar25 %
i4040 % resistente40 %
i6060 % robusto60 %
i100100 % macizo100 %

Acrylglasplatten (Laserschneiden)

KennungNameDetails
pmma-colada-incoloro-3Metacrilato transparente 3 mm3 mm · 1000×600 mm
pmma-colada-incoloro-5Metacrilato transparente 5 mm5 mm · 1000×600 mm
pmma-colada-incoloro-6Metacrilato transparente 6 mm6 mm · 1000×600 mm
pmma-colada-incoloro-8Metacrilato transparente 8 mm8 mm · 1000×600 mm
pmma-colada-incoloro-10Metacrilato transparente 10 mm10 mm · 1000×600 mm
pmma-extrusion-incoloro-3Metacrilato extrusión transparente 3 mm3 mm · 1000×600 mm
pmma-extrusion-incoloro-5Metacrilato extrusión transparente 5 mm5 mm · 1000×600 mm
pmma-blanco-3Metacrilato opal 3 mm3 mm · 1000×600 mm
pmma-negro-3Metacrilato negro 3 mm3 mm · 1000×600 mm
pmma-tintado-3-rojoMetacrilato tintado rojo 3 mm3 mm · 1000×600 mm
pmma-tintado-3-azulMetacrilato tintado azul 3 mm3 mm · 1000×600 mm
pmma-tintado-3-verdeMetacrilato tintado verde 3 mm3 mm · 1000×600 mm
pmma-tintado-3-ambarMetacrilato tintado ámbar 3 mm3 mm · 1000×600 mm
pmma-tintado-3-fumeMetacrilato tintado fumé 3 mm3 mm · 1000×600 mm
dm-3DM 3 mm3 mm · 800×400 mm
pmma-fluor-3-naranjaMetacrilato fluorescente naranja 3 mm3 mm · 1000×600 mm
pmma-fluor-3-rojoMetacrilato fluorescente rojo 3 mm3 mm · 1000×600 mm
pmma-fluor-3-verdeMetacrilato fluorescente verde 3 mm3 mm · 1000×600 mm

Formen aus dem Katalog

KennungNameshapeParams
rectRectángulow, h
rect-bevelRectángulo achaflanadow, h, bevel
rect-cornerRectángulo con esquina cortadaw, h, cutW, cutH
rect-slantRectángulo con lado inclinadow, hLeft, hRight
separadorSeparador de estanteríaw, h, frente
triangleTriángulow, h
triangle-rightTriángulo rectángulow, h
triangle-right-mirrorTriángulo rectángulo invertidow, h
trapezoidTrapeciowTop, wBottom, h
parallelogramParalelogramow, h, offset
hexagonHexágonow, h
octagonOctágonow, h, bevel
polygonPolígono regularsides, d
rounded-rectRectángulo redondeadow, h, radius
circleCírculod
ringCoronad, inner
ovalÓvalow, h
stadiumÓvalo planow, h
semicircleSemicírculod
quarter-circleCuarto de círculor
archArcow, h
barrelTonelw, h, bulge
starEstrellapoints, d, inner
heartCorazónw, h
dropGotaw, h
arrowFlechaw, h, stem, head
kiteCometaw, h, cross
gemGemaw, h, crown, top

«shapeId» wählt die Form aus, «shapeParams» übergibt ihre Maße; diese unterscheiden sich je nach Form. Bei einer Datei oder einem Rechteck nach Maß brauchst du keines der beiden Felder.

Bohrungsmuster

KennungNameDetails
NONESin agujeros—
CORNERSEn las esquinasdiameterMm, edgeDistanceMm
PERIMETERRepartidos por el bordediameterMm, edgeDistanceMm, count o edgeCounts
RADIALEn círculodiameterMm, count, centerDistanceMm
GRIDEn cuadrículadiameterMm, rows, columns, centerDistanceMm
POINTSEn coordenadas concretasdiameterMm, points[{ xMm, yMm }]
CUSTOMLos que traiga el archivo—

Lieferzeiten

KennungNameDetails
standardEstándar3 días laborables
expressExprés 48 h2 días laborables
urgentUrgente 24 h1 días laborables

Dateiformate

Unterstützte Formate und was wir jeweils damit machen:

KennungProcesoDetails
.stl .obj .3mf .plyFDM_3DSe miden solas. Precio al momento.
.step .stp .iges .igs .brepFDM_3DSe teselan en el servidor. Precio al momento.
.sldprt .ipt .f3d .3dm .sat .x_tFDM_3DCAD propietario: lo cotiza una persona.
.svg .dxfLASER_ACRYLICSe miden solas. Precio al momento.
.aiLASER_ACRYLICLo cotiza una persona.

Bestellungen

GET/api/v1/orders

Die letzten fünfzig, vom neuesten zum ältesten, jeweils mit Status und Sendungsverfolgung.

GET/api/v1/orders/{code}

Eine bestimmte Bestellung mit ihren Positionen und Beträgen.

200 OK
{
  "order": {
    "code": "HTP-3MQ8N-LY45L",
    "status": "IN_PRODUCTION",
    "total": 43.05,
    "trackingCarrier": "MRW",
    "trackingNumber": "0123456789",
    "items": [
      { "label": "tapa.svg", "quantity": 10, "process": "LASER_ACRYLIC",
        "unitPrice": 3.55, "total": 35.5 }
    ]
  }
}

Mögliche Statuswerte: AWAITING_PAYMENT, PAID, IN_PRODUCTION, QUALITY_CHECK, READY_FOR_PICKUP, SHIPPED, DELIVERED, CANCELLED, REFUNDED

Anfragelimit

60 Anfragen pro Minute und Schlüssel. Jede Antwort zeigt, wie viele dir noch bleiben; du musst das Limit also nicht erst erreichen, um zu wissen, wo es liegt:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 42

Wenn du darüberkommst, erhältst du 429 mit «Retry-After» in Sekunden. Das ist keine Strafe: Für eine Kalkulation wird die Geometrie des Teils aufgebaut und der Lagerbestand abgefragt. Eine fehlerhafte Schleife könnte sonst den Dienst für alle anderen blockieren.

Wenn etwas schiefläuft

Immer ein JSON mit «code» — stabil, damit du danach entscheiden kannst — und «error», der lesbaren Fehlermeldung.

  • 401 unauthorized — Der Schlüssel fehlt, ist falsch oder wurde widerrufen.
  • 404 not_found — Diese Bestellung gehört nicht zu deinem Konto. Ist sie nicht vorhanden, antworten wir genauso; sonst ließen sich gültige Codes erraten.
  • 422 invalid_request — Die Konfiguration ist ungültig. Unter «details» stehen die Fehler feldweise.
  • 429 rate_limited — Du hast das Limit überschritten.

Für Assistenten und Agenten

Wenn du das in einen Assistenten integrierst: Mit dem Schlüssel des Kunden und einer Datei lässt sich der Preis in einem einzigen Aufruf berechnen, ohne vorherige Schritte und ohne die Datei zuvor irgendwo hochzuladen.

Es gibt eine maschinenlesbare Beschreibung in zwei Formaten:

  • /openapi.json — der vollständige Vertrag, um einen Client zu generieren oder ihn als Tool zu laden.
  • /llms.txt — eine kurze Zusammenfassung als Klartext für den Kontext.

Was noch nicht möglich ist

Eine Bestellung abschließen. Kalkulieren ja, kaufen nein. Dafür muss vorher geklärt werden, wie bezahlt wird — auf Rechnung, auf Kredit —, und das ist ein Gespräch, kein Endpoint. Wenn dich das interessiert, Schreib uns und wir besprechen es: Es fehlt nur noch ein kleiner Schritt.

Fehlt dir etwas oder verhält sich etwas anders als hier beschrieben? Sag uns Bescheid. Es antwortet die Person, die das geschrieben hat.