Getting Started
PolyQuote is a simple API for pricing 3D prints. You send the details of your print — filament type, weight, time — and you get back a recommended sale price that covers your material, electricity, and chosen markup. No spreadsheets, no guesswork.
You can be up and running in three steps:
- Sign up. Head to api.polyformprints.co.uk and pick a plan. There's a free tier — no credit card needed.
- Check your email. Your API key arrives instantly. It starts with
pp_followed by a string of letters and numbers. - Make your first request. See The Quote Endpoint below for a copy-paste example.
Authentication
Every request to the paid /quote endpoint must include your API key in a header called x-api-key. That's the only authentication step — no OAuth, no tokens to refresh.
x-api-key: pp_your_key_here
Keep your key private. Anyone who has it can spend your monthly call quota. Don't paste it into public chats, GitHub repos, or client-side JavaScript on a public website.
If you think your key has been exposed, email [email protected] and we'll rotate it for you straight away.
Endpoints
All requests go to this base URL:
https://3d-print-quote-api.polyform-api.workers.dev
| Method | Path | What it does | Auth |
|---|---|---|---|
| GET | / |
Health check — confirms the API is up | None |
| POST | /quote |
Calculates a price for a print | API key |
| POST | /demo/quote |
Same as /quote but capped at 5 calls per hour |
None |
The Quote Endpoint
POST /quote — requires authentication.
This is the main workhorse. Send your print details, get a price back.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
filament_type |
string | Yes | — | One of: PLA, PETG, ABS, TPU |
weight_grams |
number | Yes | — | Weight of filament used in grams |
print_hours |
number | Yes | — | Total print time in hours |
markup_percent |
number | No | 100 |
Your profit markup percentage |
quantity |
number | No | 1 |
Number of units |
kwh_rate |
number | No | 0.29 |
Your electricity rate in £/kWh |
Example request
cURLcurl -X POST https://3d-print-quote-api.polyform-api.workers.dev/quote \
-H "Content-Type: application/json" \
-H "x-api-key: pp_your_key_here" \
-d '{
"filament_type": "PETG",
"weight_grams": 85,
"print_hours": 3.5,
"markup_percent": 120,
"quantity": 1
}'
Example response
{
"input": {
"filament_type": "PETG", // The filament type you sent
"weight_grams": 85, // The weight you sent
"print_hours": 3.5, // The print time you sent
"markup_percent": 120, // The markup you sent
"quantity": 1, // The quantity you sent
"kwh_rate": 0.29 // Electricity rate used (default or yours)
},
"costs": {
"material_cost_gbp": 1.36, // Filament cost for this print
"electricity_cost_gbp": 0.20, // Electricity cost for this print
"total_base_cost_gbp": 1.56 // Material + electricity, before markup
},
"recommended_price_gbp": 3.43, // Your suggested sale price
"currency": "GBP", // Always GBP for now
"calls_remaining": 4999 // Calls left in your monthly quota
}
The Demo Endpoint
POST /demo/quote — no authentication needed.
The demo endpoint accepts exactly the same parameters as the quote endpoint and runs exactly the same pricing calculation. It's the easiest way to kick the tyres before signing up — or to embed a live calculator on your own site.
Limits
The demo is capped at 5 requests per IP address per hour. When you hit the limit you'll get a 429 response with a friendly message and a sign-up link.
How the response differs
Two extra fields, and one missing field:
"demo": true— confirms this came from the demo endpoint"demo_requests_remaining"— how many demo calls you have left this hour- No
calls_remaining— that's for paying customers - A
"cta"field nudges you toward signing up for a real key
Example response
{
"input": { /* same as /quote */ },
"costs": { /* same as /quote */ },
"recommended_price_gbp": 3.43,
"currency": "GBP",
"demo": true,
"demo_requests_remaining": 4,
"cta": "Want unlimited quotes? Sign up free at https://api.polyformprints.co.uk"
}
Error Codes
Errors always come back as JSON with an error field describing what went wrong.
| Status | Message | What it means | How to fix it |
|---|---|---|---|
400 |
Invalid input | A required parameter is missing or one of your values isn't valid (e.g. a negative weight) | Check the parameters table and your request body |
401 |
Unauthorised | Your API key is missing, malformed, or unknown to us | Make sure the x-api-key header is present and the key is correct |
429 |
Monthly limit reached | You've used all the API calls included in your plan this month | Upgrade your plan, or wait for your monthly reset |
429 |
Demo limit reached | You've made 5 demo requests in the last hour from this IP | Sign up for a free key — or wait an hour |
500 / 502 |
Server error | Something went wrong on our end | Try again in a few seconds, or email [email protected] |
Pricing & Limits
| Plan | Price | Calls / month | Best for |
|---|---|---|---|
| Free | £0 / mo | 200 | Hobbyists and first-time integrators |
| Maker | £8 / mo | 5,000 | Active Etsy sellers and small print shops |
| Pro | £18 / mo | 25,000 | Print farms and high-volume sellers |
Your call limit resets on the same date each month as your subscription start date — so a plan started on the 13th resets on the 13th every month.
Sign up or change plan →
Manage your subscription (Stripe portal) →
FAQ
What filament prices does PolyQuote use?
Our default prices reflect typical UK retail costs: PLA £15/kg, PETG £16/kg, ABS £20/kg, TPU £24/kg. Right now you can override your electricity rate by passing your own kwh_rate. Filament price overrides are coming in a future update.
Can I use PolyQuote outside the UK?
Yes. Pass your local electricity rate using the kwh_rate parameter so the maths reflects your actual costs. Prices are returned in GBP for now — currency conversion is on the roadmap.
When does my call limit reset?
On the same date each month as your subscription start date. If you subscribed on the 13th, your quota resets on the 13th of every month.
What happens if I hit my limit?
Requests start returning a 429 Monthly limit reached error. You can either upgrade your plan from the Stripe portal or wait for your next monthly reset.
How do I cancel?
Open your subscription management page and click cancel — your plan stays active until the end of the current billing period. Or email [email protected] and we'll handle it for you.
Is my data safe?
We store only your email address and a count of how many API calls you've made. We never store the contents of your quote requests — your designs and pricing logic stay yours. See our Privacy Policy for full details.