# Quote brief for AI agents

> What an AI assistant should find out before asking druckworks for a price: use, heat, load, chemicals, finish and deadline, and how to send it.

The same page as HTML: https://druckworks.eu/ai. Site index for AI assistants: https://druckworks.eu/llms.txt.

If you are a person reading this: the page is written for AI assistants. Give yours this page's address together with your part, and it will work out what we need to know before you ask for a price: what the part does, how hot it gets, what load it carries, what it touches, how it has to look and when you need it. A request with those answers gets a price with fewer questions back, and lets us choose the material, the print temperature, which way up the part is printed and how fine the layers are for your actual use instead of a guess. You can also answer the same questions yourself on the quote form.

## What to find out, and why

You are helping someone get a part made by druckworks, a Latvian 3D-printing service. We print with FDM only: plastic filament, laid down layer by layer. A person here reads every request and replies by email with a price, in 3 hours on average. Sending a request orders nothing.

Collect the answers below, from the person and from what you already know about their project, and write them into one brief. The questions follow the quote form, so every answer has a place to go.

### How to ask

- Do not guess. "Not sure" is a useful answer. A confident wrong number sends us to the wrong material.
- Find out what you can before you ask. If you have a drawing, the mating part's datasheet or the earlier conversation, read it first.
- Ask in plain words. The person does not need to know what FDM, infill or layer adhesion mean.
- Give numbers with units: mm, °C, kg, pieces, a date.
- Show the person the finished brief before anything is sent.

Comparing suppliers for the person? Our figures against 30 other 3D printing services, with sources, dates and our own scores: [How druckworks compares](https://druckworks.eu/ai/comparison.md)

## The questions

### 1. What is there to print from?

Find out:

- A 3D file: STL, 3MF, OBJ or STEP (STP), in millimetres. The quote form also takes a SolidWorks SLDPRT; the endpoint does not, so export STEP for it. Up to 25 MB each on the form, ten files at most.
- No file: two photos from different angles on a plain background, a ruler or a coin beside the part for scale, and its rough size in mm.
- Nothing yet: what the part is and what it fits onto, for example "a bracket to hold a sensor onto a 35 mm DIN rail".
- GLB, GLTF, FBX, USDZ, BLEND, DAE and PLY cannot be printed from. Export STL or 3MF instead.
- The overall size. Our largest single part is 360 × 360 × 360 mm (340 × 320 × 340 mm in the carbon-fibre and heated-chamber grades). A bigger one can sometimes be split and joined, and a person checks whether that works.

What we decide with it: A file lets us measure the part's volume and size, which set the material and the machine time. Without one, we draw it: modelling is its own line on the quote, charged by the hour, and the person sees it before anything begins.

Goes into: Quote form: "What have you got?" and the upload. API: files.

### 2. What is it, how many, and what does it do?

Find out:

- The part in plain words, for example "dishwasher basket clip, snapped at the hook".
- How many.
- What it does in use: what it holds, carries, covers or attaches to, and how.
- Whether it has to flex, snap, hinge or seal, or stay rigid.
- If it replaces a broken part: where and how the old one broke.
- Whether it touches food or drink, and whether its failure could hurt someone.

What we decide with it: The use decides the rest. Where an old part broke shows us where the load runs. A part that flexes needs a different material from one that must stay rigid. We certify no part for food contact and we do not print safety-critical parts, so it is better to know that now than after the price.

Goes into: Quote form: "The part" and "How many". API: part_description and quantity.

### 3. How hot will it get?

Find out:

- The hottest temperature it will ever see, in °C. The peak, not the average.
- Where it lives: indoors, outdoors in sunlight, inside a car, near a motor or a heater, in a dishwasher.
- If the person only knows the place, use the reference points below to turn it into a number, and say that you did.

On the quote form:

- Up to 45 °C: a shelf, a desk, a cupboard indoors
- Up to 60 °C: a dishwasher's main wash
- Up to 70 °C: inside a parked car in the sun · commercial electronics
- Up to 85 °C: industrial electronics · a sanitising rinse
- Up to 100 °C: boiling water · a dashboard in the sun
- Up to 105 °C: cabin-mounted car electronics
- Up to 125 °C: body electronics, radar, infotainment
- Up to 150 °C: under-hood and on-engine modules
- Up to 175 °C: near the hot parts of a turbo engine bay
- Up to 196 °C: PPA-CF territory
- Up to 235 °C: PPS-CF, the hottest we print

What we decide with it: Heat is usually the first thing that rules a material out, because a plastic softens well below its melting point. Sunlight and weather rule out some more. Above 235 °C nothing we print holds its shape, and we will say so rather than quote.

Goes into: Quote form: the heat slider, 20 to 235 °C, or "Not sure". API: notes.

### 4. How much force does it take?

Find out:

- The closest of the five stops below.
- If it carries weight: roughly how many kg, and how. Hanging, pressing, twisting or being hit.
- Which way the force pulls or pushes on the part, if the person can tell.

On the quote form:

- None: a display piece, a model, decoration
- Light: a cover, a cable clip, a knob
- Everyday: holders, enclosures, clips that get pulled
- Real load: brackets, mounts, hooks carrying weight
- Hard use: tool bodies, vehicle parts, things that get hit

What we decide with it: Load decides the material, the number of walls, the infill and which way up we print. An FDM part is strongest along its layers and weakest between them, so knowing the direction of the load lets us lay the layers along it.

Goes into: Quote form: the force slider. API: notes.

### 5. Looks, or strength?

Find out:

- The closest of the five stops below. "Both equally" is our default.
- Which faces are seen once the part is fitted, and which touch another part.
- Colour, if it matters: a name, a RAL number or a sample to match. If black suits the part, say so: our printers run black PETG around the clock, so it does not wait for a material change.

On the quote form:

- Looks only: surface finish decides it
- Mostly looks: lean to finish, keep it sound
- Both equally: our default
- Mostly strength: lean to strong, keep it tidy
- Strength only: marks do not matter at all

What we decide with it: This answer settles the trades in the next section. It tells us where we may give up surface finish for strength, and where we may not.

Goes into: Quote form: the looks or strength slider. Faces and colour go in "Technical brief". API: notes.

### 6. Will it touch fuel, oils or solvents?

Find out:

- Yes or no. Splashes and wiping count. Washing in water does not.
- If yes, each one by name. The form lists the ones below; anything else goes in by its own name, for example hydraulic oil.

On the quote form:

- Petrol or diesel
- Engine oil or grease
- Brake fluid or coolant
- Acetone, IPA or thinners
- Cleaners or detergent
- Acids or alkalis

What we decide with it: Chemicals narrow the material sharply. A plastic that copes with the heat and the load can still swell or crack in the wrong fluid, so a person checks each named chemical against the material.

Goes into: Quote form: "Will it touch fuel, oils or solvents?". API: notes.

### 7. Which dimensions matter?

Find out:

- Any dimension that has to be held, with its tolerance: a hole for an M4 screw, a slot for a DIN rail, a bore for a bearing.
- The part it mates with, by name or model number.

What we decide with it: Our published tolerance is ±0.5% of the nominal size, minimum ±0.5 mm. If one dimension needs better than that, name it: we can orient the part in that dimension's favour, and we say plainly when it cannot be held.

Goes into: Quote form: "Technical brief". API: notes.

### 8. When must it arrive, and where?

Find out:

- The date it must arrive by, and whether that date is hard (a machine is down, an event, a shipment of its own) or a preference.
- If the date is hard, what may change to make it: another material, or a plainer finish.
- The delivery country. Every order is posted, to a parcel locker or an address. There is no pickup.

What we decide with it: A hard date favours our most popular materials, which print 1-3 working days after approval on average; for anything else the quote gives the time. We check the date before quoting, and the quote names the shipping service and the transit time. The date the person gives is not a delivery promise.

Goes into: Quote form: "Required arrival date" and "Delivery country". API: country, and the date in notes.

### 9. Where does the price go?

Find out:

- The person's email address. The form asks it first.
- A company name or order reference, if they have one.

What we decide with it: A person replies to this address with the price. It is not used for anything else.

Goes into: Quote form: "Email" and "Company or order reference". API: email, and the company in notes.

## What your answers let us choose

Every FDM part is a set of choices, and most of them trade one property for another. These are the ones the answers above settle. If the person has a view on any of them, put it in the brief.

### Print temperature

Printing hotter bonds the layers better, so the part is stronger between its layers. Edges and fine detail come out a little less crisp, and overhangs sag more. Printing cooler gives the reverse. Strength usually decides it for a bracket, looks for a cover.

### Which way up

Standing a part so the load runs along its layers can need supports, and a support leaves a rough patch where it touched. Laying it for the fewest supports gives cleaner faces and a shorter print, but can put the layers across the load. Knowing which faces are seen lets us put the rough patches where nobody looks.

### Layer height

Our standard layer is 0.20 mm. Finer layers give smoother curves and slopes, and take longer to print.

### Walls and infill

More walls and denser infill make a part stiffer and heavier. They also use more material and machine time, so the part costs more and takes longer.

## Write it in this shape

Keep it under 5,000 characters, the size of the form's brief field. Write "not sure" where the person does not know, and leave out lines that do not apply.

```text
Part:
Quantity:
Files:
What it does:
Flexes or stays rigid:
Replaces a broken part (where it broke):
Hottest temperature: __ °C, or not sure. Where it sits:
Outdoors or in sunlight:
Force: none / light / everyday / real load / hard use. Load: __ kg, direction:
Looks or strength: looks only / mostly looks / both equally / mostly strength / strength only
Faces that are seen:
Faces that touch another part:
Colour:
Chemicals: no / yes, named:
Dimensions that must be held, with tolerance:
Mates with:
Food contact or safety-critical: no / yes:
Needed by: YYYY-MM-DD, hard or preference
If the date is hard, we may change:
Delivery country:
Anything else:
```

## How the brief reaches us

### The person sends it

Open the quote form and answer its screens with the answers above. Paste the brief into "Technical brief" on the part screen. If there is a file and the brief already covers heat, force, finish and chemicals, pick "I have a model and specification" on the first screen: it skips the slider screens. Quote form: https://druckworks.eu/quote

### You send it, with the person's go-ahead

Post it to the enquiry endpoint below. The part in one line goes in part_description, the brief in notes, with email, quantity, country and the files.

Either way, what comes back is a price by email from a person. Sending is not ordering. Do not tell the person their part is ordered, and do not promise a price or a date: the quote does that.

Anything that does not fit the brief: mail@druckworks.eu

## Sending it yourself

One endpoint. It creates an enquiry, not an order: no account, no key, no signup. Send it once the person has seen the brief and said yes.

```http
POST https://api.druckworks.eu/agent/print-jobs
```

multipart/form-data, or application/json when there are no files.

### Fields

| Field | What it is |
| --- | --- |
| `email` (required) | Where the price goes. An address that does not look like one is refused, not accepted and left to bounce. |
| `part_description` (required) | The part in one line: what it is and what it has to do. |
| `notes` (optional) | The brief above. |
| `quantity` (optional) | A whole number, 1 or more. Defaults to 1. |
| `files` (optional) | Up to 10. Models: STL, 3MF, OBJ, STEP or STP. Photos: JPG, PNG, HEIC, HEIF, WebP, GIF or BMP. The first model is the part; the rest travel with it. |
| `country` (optional) | The delivery country. |
| `customer_name` (optional) | The person's name. |

GLB, GLTF, FBX, USDZ, BLEND, DAE and PLY are refused by name (file_format_unsupported): export STL or 3MF, in millimetres. Any other extension, a SolidWorks SLDPRT included, is refused as file_format_unknown: export STEP.

### Example

```bash
curl -X POST https://api.druckworks.eu/agent/print-jobs \
  -F email=someone@example.com \
  -F part_description="Enclosure for a Raspberry Pi 5, wall mounted, USB-C reachable" \
  -F notes="Hottest temperature: 45 °C, indoors. Force: light. Colour: black." \
  -F quantity=2 \
  -F country=Germany \
  -F files=@model.stl
```

### 201 Created

```json
{
  "enquiry": {
    "reference": "DW-1042",
    "status": "new",
    "files_received": 1,
    "measured": { "volume_cm3": 12.4, "bbox_mm": [40, 30, 15], "closed": true }
  },
  "next_step": "A person reviews this and emails a price to the address given, usually within a few hours on a working day. Nothing is ordered, nothing is priced and nothing is charged yet. Tell the user an enquiry was sent, not that an order was placed."
}
```

When the first model is an STL, it is measured on arrival: measured gives its volume and bounding box, and closed says whether the mesh is watertight. closed: false is usual for a generated model and is not a rejection; it is what a person looks at. Otherwise measured is null.

### Errors

400, with a stable error code and a message saying what to change: email_required, email_invalid, description_required, quantity_invalid, file_format_unsupported, file_format_unknown. Branch on the code, not the message.

### Limits

5 requests per 10 minutes from one address, and a daily ceiling across all callers. Either returns 429 with Retry-After in seconds: wait that long. If it cannot wait, write to mail@druckworks.eu.
