Welcome to the Quote3D Documentation! ⏳

Core Concepts

This page introduces the foundational ideas and patterns that power the platform. Understanding these concepts will help you get the most out of the API and build robust integrations for 3D printing workflows.

1. Authentication & Security

All API endpoints require authentication using a Bearer JWT token. You generate tokens from your Quote3D dashboard and include them in the Authorization header of every request.

Reminder: Keep your API tokens secure. Never share them publicly or commit them to version control.

2. Account Management

Manage your account, uploads, and usage statistics through dedicated endpoints:

  • GET /v2/user Retrieve your account details
  • GET /v2/user/uploads List all of the files you've uploaded to your account. These are listed from newest to oldest.
  • GET /v2/quota Get your current quota limits and usage for quotes and storage
  • GET /v2/usage Get detailed usage analytics including endpoint statistics, material usage, and time-based trends

3. Part Info

Check if your models are printable and get part dimensions:

  • POST /v2/printability/{file_id} Gets measurements of the uploaded file in order to check that the part will fit in the printer before your generate a quote.

If you are familiar with Three JS, you can calculate this with Javascript on the client side of your web app, bypassing the need to use this endpoint. This is provided as an alternative to give you more options.

4. File Management

Upload, download, and manage your 3D model files (STL, 3MF, OBJ formats):

  • Get a temporary upload_id to upload a new file with the public upload route.: GET /v2/file/upload-id - Get a temporary upload_id to upload a new file with the public upload route.
  • This route does NOT require authentication. Use this on your client side to upload files directly to our storage.: POST /v2/file/public/{upload_id} - This route does NOT require authentication. Use this on your client side to upload files directly to our storage.

    Using the Public Upload route lets you avoid routing large files through your backend server. This prevents exposing your API token and reduces server load.

  • Upload a file from your server side (requires authentication, use this when you want to upload from your backend): POST /v2/fileUpload a file from your server side (requires authentication, use this when you want to upload from your backend)
  • Download a file using its file_id: GET /v2/file/{file_id}Download a file using its file_id
  • Delete a file you no longer need: DELETE /v2/file/{file_id}Delete a file you no longer need

5. Quote Operations

Generate instant quotes for your 3D prints and manage quote history:

  • Generate an instant quote for a 3D model. Returns detailed pricing, material usage, and print time estimates.: POST /v2/file/quote/{file_id}Generate an instant quote for a 3D model. Returns detailed pricing, material usage, and print time estimates.
  • Generate a quote asynchronously. Returns a job ID that you can use to check the status.: POST /v2/file/quote/{file_id}/asyncGenerate a quote asynchronously. Returns a job ID that you can use to check the status.
  • Check the status of an async quote job. Returns progress percentage and completion status.: GET /v2/jobs/{job_id}Check the status of an async quote job. Returns progress percentage and completion status.
  • Retrieve all your quote history with pagination support: GET /v2/quotesRetrieve all your quote history with pagination support
  • Get detailed information about a specific quote: GET /v2/quotes/{quote_id}Get detailed information about a specific quote
  • Remove a quote from your history: DELETE /v2/quotes/{quote_id}Remove a quote from your history

Quote Request Parameters

When generating a quote, you can provide custom configuration in the request body. Any parameters you don't specify will be automatically taken from your Dashboard Slice Profile settings. This allows you to override specific settings per quote while keeping defaults for others.

Important: If you don't provide a parameter in your request, the API will use the value from your Dashboard Slice Profile (Printer Profile, Material Profile, or Global Settings). Make sure to set up your default profiles in the Dashboard for consistent quotes.

printer_config

Printer configuration parameters. All fields are optional and will use your default Printer Profile values if not provided.

ParameterTypeDescription
bed_size_xnumberBuild volume X dimension (mm)
bed_size_ynumberBuild volume Y dimension (mm)
bed_size_znumberBuild volume Z dimension (mm)
nozzle_diameternumberNozzle diameter (mm)
nozzle_countnumberNumber of nozzles
print_speednumberDefault print speed (mm/s)
max_print_speednumberMaximum print speed (mm/s)
travel_speednumberTravel speed (mm/s)
first_layer_speednumberFirst layer speed (mm/s)
layer_heightnumberLayer height (mm)
min_layer_heightnumberMinimum layer height (mm)
max_layer_heightnumberMaximum layer height (mm)
perimetersnumberNumber of perimeters/walls
top_solid_layersnumberTop solid layers count
bottom_solid_layersnumberBottom solid layers count
min_wall_countnumberMinimum wall count
max_wall_countnumberMaximum wall count
fill_densitynumberInfill density (0-100%)
infill_patternstringInfill pattern. Options: rectilinear, alignedrectilinear, zigzag, crosszag, lockedzag, line, grid, triangles, trihexagon, cubic, adaptivecubic, supportcubic, honeycomb, honeycomb3d, lateralhoneycomb, gyroid, monotonic, monotonicline, lightning. Default: rectilinear
support_materialbooleanEnable support material
support_overhang_anglenumberSupport overhang angle (degrees)
support_densitynumberSupport density (0-100%)
acceleration_printnumberPrint acceleration (mm/s²)
acceleration_travelnumberTravel acceleration (mm/s²)
acceleration_retractionnumberRetraction acceleration (mm/s²)
jerk_printnumberPrint jerk (mm/s)
jerk_travelnumberTravel jerk (mm/s)
jerk_retractionnumberRetraction jerk (mm/s)
min_hotend_tempnumberMinimum hotend temperature (°C)
max_hotend_tempnumberMaximum hotend temperature (°C)
min_bed_tempnumberMinimum bed temperature (°C)
max_bed_tempnumberMaximum bed temperature (°C)
hourly_costnumberMachine hourly cost

material_config

Material configuration parameters. All fields are optional and will use your default Material Profile values if not provided.

Material Profile Integration: The filament_type parameter should match a material name from your Dashboard Material Profile. When you specify a filament_type (e.g., "PLA", "ABS", "PETG"), the API automatically loads all properties from that Material Profile, including density, temperatures, retraction settings, and pricing.

Pricing Accuracy: For accurate cost calculations, make sure to set both price_per_kg and price_per_gram in your Material Profile. The API uses these values to calculate material costs based on the actual filament weight used in the print. If these values are not set in your profile, you can override them in the API request.

Example: If you have a "PLA" material profile in your Dashboard with price_per_kg: 20.0 and price_per_gram: 0.02, you can simply send {"filament_type": "PLA"} in your request, and all pricing will be calculated automatically.

ParameterTypeDescription
filament_typestringFilament type (PLA, ABS, PETG, etc.)
densitynumberMaterial density (g/cm³)
diameternumberFilament diameter (mm)
temperaturenumberPrint temperature (°C)
print_temp_minnumberMinimum print temperature (°C)
print_temp_maxnumberMaximum print temperature (°C)
bed_temperaturenumberBed temperature (°C)
bed_temp_minnumberMinimum bed temperature (°C)
bed_temp_maxnumberMaximum bed temperature (°C)
fan_speednumberFan speed (0-100%)
min_fan_speednumberMinimum fan speed (0-100%)
retraction_distancenumberRetraction distance (mm)
retraction_speednumberRetraction speed (mm/s)
price_per_kgnumberPrice per kilogram
price_per_gramnumberPrice per gram
support_cost_multipliernumberSupport material cost multiplier

quote_config

Quote pricing configuration parameters. All fields are optional and will use your default Global Settings values if not provided.

ParameterTypeDescription
currencystringCurrency code (USD, EUR, etc.)
tax_ratenumberTax rate percentage (0-100)
fixed_feenumberFixed fee per quote
energy_cost_per_kwhnumberEnergy cost per kWh

Tip: Quotes are automatically saved to your account. You can access them anytime through the quote history endpoints.

6. Printer & Quote Profiles

Configure printer settings and pricing to get accurate quotes. You can manage your default profiles in the Dashboard Slice Profiles section, which will be used automatically when you don't specify parameters in API requests.

Profile Types

  • Printer Profile - Configure your printer settings (bed size, nozzle diameter, print speed, layer height, acceleration, jerk, temperatures, etc.) to match your actual printer. Set this as your default profile in the Dashboard, and it will be used for all quote requests unless you override specific parameters.
  • Material Profile - Set material properties (filament type, density, diameter, temperatures, fan speed, retraction settings, pricing) for each material you use. The API will automatically use the material profile matching the filament_type you specify in the request.
  • Global Settings - Configure global quote settings like tax rate, fixed fees, energy costs, and default layer heights. These settings apply to all quotes unless overridden in the request.

Best Practice: Set up your default profiles in the Dashboard Slice Profiles section. This way, you can make simple quote requests without specifying all parameters, and the API will automatically use your configured defaults. You can still override any parameter per-request when needed.

How Profile Merging Works

When you make a quote request, the API merges your request parameters with your Dashboard profiles using this priority:

  1. Request Parameters - Values you explicitly provide in the API request take highest priority
  2. User Profile - If you have a user-specific profile set as default, it's used next
  3. Global Profile - If no user profile exists, the system falls back to global defaults

This means you can override just the parameters you need (e.g., only layer_height or fill_density) while keeping all other settings from your Dashboard profiles.

7. Webhooks

Receive real-time notifications when events occur in your account:

  • POST /v2/webhooks - Create a new webhook endpoint
  • GET /v2/webhooks - List all your webhooks
  • GET /v2/webhooks/{webhook_id} - Get webhook details and delivery statistics
  • PUT /v2/webhooks/{webhook_id} - Update webhook settings
  • DELETE /v2/webhooks/{webhook_id} - Remove a webhook

Supported events: quote.completed, quote.failed, file.uploaded. Webhooks include HMAC-SHA256 signatures for security verification.

8. Analytics & Reporting

Get insights into your API usage and quote statistics:

  • GET /v2/analytics/quotes - Get comprehensive quote statistics including total quotes, average prices, material usage trends
  • GET /v2/analytics/popular - See your most popular materials and printer configurations
  • GET /v2/analytics/cost-trends - Analyze cost trends over time (daily, weekly, or monthly grouping)
  • GET /v2/analytics/export - Export your quotes and usage data as CSV or JSON

9. Rate Limiting & Quotas

Quote3D uses rate limiting to ensure fair usage and system stability:

  • Rate limits are applied per API token and vary by endpoint
  • Rate limit information is included in response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  • When rate limited, you'll receive a 429 Too Many Requests response with a Retry-After header
  • Monthly quotas for quotes and storage are based on your subscription plan

Best Practice: Implement exponential backoff when handling rate limit errors to avoid overwhelming the API.

10. RESTful, Versioned API

  • All endpoints are versioned (e.g., /v2/)
  • Uses standard HTTP methods:
  • Follows OpenAPI 3.1.0 standards for schema and documentation
  • API changelog available at: