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:
{
"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)
| Kennung | Name | Details |
|---|---|---|
| pla | PLA | PLA · 15 colores |
| pla-alta-resistencia | PLA alta resistencia | PLA · 9 colores |
| pla-mate | PLA Mate | PLA · 3 colores |
| pla-reciclado | PLA Reciclado | PLA · 3 colores |
| pla-seda | PLA Silk | PLA · 7 colores |
| pla-madera | PLA Madera | PLA · 3 colores |
| pla-marmol | PLA Marmol | PLA · 2 colores |
| pla-glitter | PLA Glitter | PLA · 4 colores |
| pla-fluorescente | PLA Fluorescente (glow in the dark) | PLA · 2 colores |
| pla-metalizado | PLA Metalizado | PLA · 4 colores |
| petg | PETG | PETG · 7 colores |
| abs | ABS-E | ABS · 5 colores |
| asa | ASA | ASA · 4 colores |
| tpu-95a | TPU 95A Flex | TPU · 5 colores |
| nylon-pa | Nylon PA | PA · 2 colores |
| hips | HIPS | HIPS · 2 colores |
Jedes Material enthält seine Farben in «colors». Die Farb-ID kommt in «colorId».
Qualitätsstufen
| Kennung | Name | Details |
|---|---|---|
| draft | Borrador 0,28 mm | 0.28 mm |
| standard | Estándar 0,20 mm | 0.2 mm |
| fine | Fina 0,16 mm | 0.16 mm |
| ultra | Ultrafina 0,12 mm | 0.12 mm |
Füllungen
| Kennung | Name | Details |
|---|---|---|
| i15 | 15 % ligero | 15 % |
| i25 | 25 % estándar | 25 % |
| i40 | 40 % resistente | 40 % |
| i60 | 60 % robusto | 60 % |
| i100 | 100 % macizo | 100 % |
Acrylglasplatten (Laserschneiden)
| Kennung | Name | Details |
|---|---|---|
| pmma-colada-incoloro-3 | Metacrilato transparente 3 mm | 3 mm · 1000×600 mm |
| pmma-colada-incoloro-5 | Metacrilato transparente 5 mm | 5 mm · 1000×600 mm |
| pmma-colada-incoloro-6 | Metacrilato transparente 6 mm | 6 mm · 1000×600 mm |
| pmma-colada-incoloro-8 | Metacrilato transparente 8 mm | 8 mm · 1000×600 mm |
| pmma-colada-incoloro-10 | Metacrilato transparente 10 mm | 10 mm · 1000×600 mm |
| pmma-extrusion-incoloro-3 | Metacrilato extrusión transparente 3 mm | 3 mm · 1000×600 mm |
| pmma-extrusion-incoloro-5 | Metacrilato extrusión transparente 5 mm | 5 mm · 1000×600 mm |
| pmma-blanco-3 | Metacrilato opal 3 mm | 3 mm · 1000×600 mm |
| pmma-negro-3 | Metacrilato negro 3 mm | 3 mm · 1000×600 mm |
| pmma-tintado-3-rojo | Metacrilato tintado rojo 3 mm | 3 mm · 1000×600 mm |
| pmma-tintado-3-azul | Metacrilato tintado azul 3 mm | 3 mm · 1000×600 mm |
| pmma-tintado-3-verde | Metacrilato tintado verde 3 mm | 3 mm · 1000×600 mm |
| pmma-tintado-3-ambar | Metacrilato tintado ámbar 3 mm | 3 mm · 1000×600 mm |
| pmma-tintado-3-fume | Metacrilato tintado fumé 3 mm | 3 mm · 1000×600 mm |
| dm-3 | DM 3 mm | 3 mm · 800×400 mm |
| pmma-fluor-3-naranja | Metacrilato fluorescente naranja 3 mm | 3 mm · 1000×600 mm |
| pmma-fluor-3-rojo | Metacrilato fluorescente rojo 3 mm | 3 mm · 1000×600 mm |
| pmma-fluor-3-verde | Metacrilato fluorescente verde 3 mm | 3 mm · 1000×600 mm |
Formen aus dem Katalog
| Kennung | Name | shapeParams |
|---|---|---|
| rect | Rectángulo | w, h |
| rect-bevel | Rectángulo achaflanado | w, h, bevel |
| rect-corner | Rectángulo con esquina cortada | w, h, cutW, cutH |
| rect-slant | Rectángulo con lado inclinado | w, hLeft, hRight |
| separador | Separador de estantería | w, h, frente |
| triangle | Triángulo | w, h |
| triangle-right | Triángulo rectángulo | w, h |
| triangle-right-mirror | Triángulo rectángulo invertido | w, h |
| trapezoid | Trapecio | wTop, wBottom, h |
| parallelogram | Paralelogramo | w, h, offset |
| hexagon | Hexágono | w, h |
| octagon | Octágono | w, h, bevel |
| polygon | Polígono regular | sides, d |
| rounded-rect | Rectángulo redondeado | w, h, radius |
| circle | Círculo | d |
| ring | Corona | d, inner |
| oval | Óvalo | w, h |
| stadium | Óvalo plano | w, h |
| semicircle | Semicírculo | d |
| quarter-circle | Cuarto de círculo | r |
| arch | Arco | w, h |
| barrel | Tonel | w, h, bulge |
| star | Estrella | points, d, inner |
| heart | Corazón | w, h |
| drop | Gota | w, h |
| arrow | Flecha | w, h, stem, head |
| kite | Cometa | w, h, cross |
| gem | Gema | w, 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
| Kennung | Name | Details |
|---|---|---|
| NONE | Sin agujeros | — |
| CORNERS | En las esquinas | diameterMm, edgeDistanceMm |
| PERIMETER | Repartidos por el borde | diameterMm, edgeDistanceMm, count o edgeCounts |
| RADIAL | En círculo | diameterMm, count, centerDistanceMm |
| GRID | En cuadrícula | diameterMm, rows, columns, centerDistanceMm |
| POINTS | En coordenadas concretas | diameterMm, points[{ xMm, yMm }] |
| CUSTOM | Los que traiga el archivo | — |
Lieferzeiten
| Kennung | Name | Details |
|---|---|---|
| standard | Estándar | 3 días laborables |
| express | Exprés 48 h | 2 días laborables |
| urgent | Urgente 24 h | 1 días laborables |
Dateiformate
Unterstützte Formate und was wir jeweils damit machen:
| Kennung | Proceso | Details |
|---|---|---|
| .stl .obj .3mf .ply | FDM_3D | Se miden solas. Precio al momento. |
| .step .stp .iges .igs .brep | FDM_3D | Se teselan en el servidor. Precio al momento. |
| .sldprt .ipt .f3d .3dm .sat .x_t | FDM_3D | CAD propietario: lo cotiza una persona. |
| .svg .dxf | LASER_ACRYLIC | Se miden solas. Precio al momento. |
| .ai | LASER_ACRYLIC | Lo 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.
{
"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: 42Wenn 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.
401unauthorized— Der Schlüssel fehlt, ist falsch oder wurde widerrufen.404not_found— Diese Bestellung gehört nicht zu deinem Konto. Ist sie nicht vorhanden, antworten wir genauso; sonst ließen sich gültige Codes erraten.422invalid_request— Die Konfiguration ist ungültig. Unter «details» stehen die Fehler feldweise.429rate_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.